WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Miscellaneous Exercises

 

rolaend
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2015, 12:41     Titel: Miscellaneous Exercises
  Antworten mit Zitat      
Hallo Zusammen,
ich habe da mal ne Frage zu einer Aufgabenstellung.

EIn Vector soll betrachtet werden.
Sind in diesem Vector doppelte Einträge sollen diese geschlöscht werden.
Zudem sollen die Zahlen im Vector der größe nach ansteiegnd geordnet werden (ohne sort Befehl).ANschliesen soll der Vector angezeigt werden.

EIne fuction soll geschrieben werden welche diese Aufgabe löst.
Mein Ansatz dazu:

Code:
function [xout]=Neuexercise9G(x)
n=1;
for x(n):1:x(end)
if
    x(n+1)<x(n)
    n=n+1;
    deal(x(n+1),x(n));
elseif x(n+1)=x(n)
    n=n+1;
    clear x(n);
else x(n+1)>x(n)
    n=n+1;
end
end
x(n)
end


Bitte um eure Hilfe weil eine Fehlermeldung kommt:
Unbalanced or unexpected parenthesis or bracket.

Kann mir aber nicht erklären wieso.

Dank Euch, für eure Unterstützung.
edit winkow: bitte code umgebung benutzen
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.12.2015, 13:13     Titel:
  Antworten mit Zitat      
Hallo,

ich kann nur eine systematische Einarbeitung in MATLAB empfehlen, z.B. mit dem MATLAB Onramp. Ansonsten weiß man gar nicht, wo man anfangen soll...

Bei for-Schleifen benötigt man einen Laufindex. n bietet sich hier an.
Bei if-Anweisungen muss die Bedingung in dieselbe Zeile.
Zum Testen auf Gleichheit muss man == verwenden.
xout ist Rückgabeargument, wird aber nicht belegt.
Teile eines Vektors können nicht mit clear gelöscht werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rolaend
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2015, 20:12     Titel:
  Antworten mit Zitat      
Danke Harald für deine Hinweise und Anmerkungen.
Habe mich jetzt etwas intensiverer mit der Aufgabenstellung und mit Matlab auseinader gesetzt.
Meine function sieht bis her so aus. Und das Beste sie funktioniert auch für einen WerteBereich von -99 bis unendlich.
Allerdings kommt immer noch ein Fehlerkommentar beim Ausführen der function.
Vielelichtkann mir einer von euch einen Tipp geben wie ich die fuction so schreiben kann das Matlab keinen Fehler mehr ausgibt.

Code:
function [out]=Neuexercise(x)

s=length(x);
x(s+1)=-99;
c=x(1);
x(1)=-99;
x(s+1)=c;

for n=1:s;
       
       while x(n)>x(n+1);
            y=x(n);
            x(n)=x(n+1);
            x(n+1)=y;
            n=n-1;
         
        end
 
end
        x(1)=[];
       
        for n=1:s;
         
         
        while x(n)==x(n+1);
                x(n)=[];
                x
               
               
        end
       
            end
        end


Fehlermeldung:
Zitat:
Index exceeds matrix dimensions.

Error in Neuexercise (line 25)
while x(n)==x(n+1);


Danke für Euere Unterstützung
Grüße
Roland

Zuletzt bearbeitet von rolaend am 07.12.2015, 20:20, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.12.2015, 20:14     Titel:
  Antworten mit Zitat      
Zitat:
Allerdings kommt immer noch ein Fehlerkomentar beim Ausführen der function.

wenn fehlermeldungen kommen diese immer mit angeben. es ist weitauseinfacher wenn du das postest was du vor dir auf dem bildschirm hast als wenn wir raten müssen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2015, 11:59     Titel:
  Antworten mit Zitat      
Hallo rolaend,
Code:
function out = Neuexercise(x)

s = length(x);
x(s+1) = -99;  % Wozu dient dies, wenn es 3 Zeilen später überschrieben wird?
c = x(1);
x(1) = -99;
x(s+1) = c;

for n=1:s
   while x(n)>x(n+1);
       y=x(n);
       x(n)=x(n+1);
       x(n+1)=y;
       n=n-1;  % Das funktioniert zwar, es ist aber nicht hübsch, den FOR-Schleifen-
       % Zähler innerhalb der Schleife zu ändern.
   end
end


Hier tritt nun ein Fehler auf:
Code:
x(1) = [];
for n=1:s
  while x(n)==x(n+1);
  x(n)=[];

Wenn x innerhalb der Schleife verkleinert wird, kann man an ein n kommen, dass größer ist als die Länge des Vektors.
Wie wäre es, stattdessen den Befehl unique zu verwenden? Oder:
Code:
x(diff(x) == 0) = [];

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
rolaend
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 16:04     Titel: gelöst!
  Antworten mit Zitat      
Danke Leute, für eurer Hilfe habe jetzt das Problem lösen können:
Kurz und Knapp!
Code:
function[out]=exercise9G(x)
a=length(x);
out=[];
while a~=0;
    m=min(x);
    out=[out,m];
    i=x==m;
    x(i)=[];
    a=length(x);

end

end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.