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

Zuweisungsproblem bei der for-Schleife

 

Primo000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2010, 15:38     Titel: Zuweisungsproblem bei der for-Schleife
  Antworten mit Zitat      
Hallo Leute,

bin n Neuling in Sachen Programmierung.
Habe versucht die Zuweisungen in ner for-Schleife zu packen, jedoch komm ich nicht auf die richtige Lösung
Code:

     aRT1 = get(handles.edit1,'String');
     aRT2 = get(handles.edit2,'String');
     aRT3 = get(handles.edit3,'String');
     aRT4 = get(handles.edit4,'String');
     aRT5 = get(handles.edit5,'String');
     aRT6 = get(handles.edit6,'String');
     aRT7 = get(handles.edit7,'String');
     aRT8 = get(handles.edit8,'String');
     aRT9 = get(handles.edit9,'String');
     .....
     .....
     aRT126= get(handles.edit126,'String');
 

die for-Schleife für den get Befehl hab ich noch hinbekommen
Code:

for i=1:1:126
    str=['edit' num2str(i)];
    obj=findobj('tag',str);    
        get(obj, 'String', '0');
      end;
end
 

aber wie kann ich nun aRT1....aRT126 den jeweiligen get-Befehl zuweisen?


Edit by denny: Bitte die Code-Formatierung verwenden. Danke!


michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2010, 16:21     Titel:
  Antworten mit Zitat      
Du kannst die eval()-Funktion benutzen. Um mal deine for-Schleife zu erweitern:

Code:

for i=1:126
   eval(['aRT' num2str(i) ' = get(handles.edit' num2str(i) ', ''String'');']);
end
 


Übrigens:

Code:

ist das gleiche wie
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2010, 16:47     Titel:
  Antworten mit Zitat      
wow, danke für die schnelle Antwort ... funktioniert!

hab da aber jetzt noch n problem und zwar würde ich die set befehle auch gern in einer for-schleife schreiben. Gibt es hier vllt eine Möglichkeit dies umzusetzen?

Code:

set(handles.a1, 'String', 'a^126');
set(handles.a2, 'String', 'a^125');
set(handles.a3, 'String', 'a^124');
set(handles.a4, 'String', 'a^123');
set(handles.a5, 'String', 'a^122');
set(handles.a6, 'String', 'a^121');
set(handles.a7, 'String', 'a^120');
set(handles.a8, 'String', 'a^119');
set(handles.a9, 'String', 'a^118');
set(handles.a10, 'String', 'a^117');
set(handles.a11, 'String', 'a^116');
....
....
set(handles.a126,'String',a^1);
 



Edit by denny: Bitte die Code-Formatierung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.03.2010, 17:21     Titel:
  Antworten mit Zitat      
Hallo

so
Code:


durchlaeufe=126

for k=1:durchlaeufe
   set(handles.(sprintf('a%d',k)), 'String', sprintf( 'a^%d',durchlaeufe-k+1));
end
 


Zuletzt bearbeitet von denny am 01.03.2010, 18:19, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2010, 17:39     Titel:
  Antworten mit Zitat      
Hi funktioniert nicht,

bekomm diese Fehlermeldung

"Expression or statement is incorrect--possibly unbalanced (, {, or [."

trotzdem danke für die Antwort!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.03.2010, 18:20     Titel:
  Antworten mit Zitat      
Hallo

habe Klammer vergessen,

Code:

durchlaeufe=126

for k=1:durchlaeufe
   set(handles.(sprintf('a%d',k)), 'String', sprintf( 'a^%d',durchlaeufe-k+1));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Primo00
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 01.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2010, 18:34     Titel:
  Antworten mit Zitat      
Super, alles gut! Very Happy

Dank dir!
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 13:47     Titel:
  Antworten mit Zitat      
Hallo!
Ich habe im Moment ein ähnliches Problem:
Und zwar möchte ich gerne mit einer Schleife dynamisch Werte erstellen, und diese dann dem Workspace übergeben. Die Werte werden von einer GUI eingelesen ( EditTextBox)
Code:
for n=1:5
%     line(n).dia=0;
%     line(n).len=0;
    eval(['line' num2str(n) '.dia'  '=str2double(get(handles.dia_EditText' num2str(n) ',''String''));']);
    assignin ('base',['dia_' num2str(n)], line(n).dia);
    eval(['line' num2str(n) '.len' num2str(n) '=str2double (get(handles.len_EditText' num2str(n) ',''String''));']);
    assignin ('base',['len_' num2str(n)], line(n).len);
end

Lasse ich die beiden Codezeilen auskommentiert, bekomme ich einen Fehler: Not enough input arguments. Nutze ich die beiden Zeilen im Code, weden zwar meine Variablen in den Workspace geschrieben, doch alle mit dem Wert 0.
Wo mache ich den Fehler?

Vielen Dank schon mal
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 13:57     Titel:
  Antworten mit Zitat      
Hast du mal einen Breakpoint gesetzt und bist Schritt für Schritt durch den Code gegangen, um herauszufinden, in welcher Zeile genau der Fehler auftritt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 14:04     Titel:
  Antworten mit Zitat      
Habe ich gemacht, ja! Kann man ja auch in der Fehlerbeschreibung nachlesen: Der Fehler kommt beim ersten assignin. Habe ich vergessen zu schreiben...

Zuletzt bearbeitet von Labida am 24.08.2010, 14:05, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.08.2010, 14:05     Titel:
  Antworten mit Zitat      
Hallo

das ist ja klar du benutzt EVAL und dort erzeugst du Variablen line1...line5 Während bei ASSIGIN versuchst auf line als eine Struktur anzusprechen. line(n)
Da musst entscheiden was willst haben, eine Struktur line oder Variable line1 ... line5 und entsprechend nutzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Labida
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 14:11     Titel:
  Antworten mit Zitat      
Sorry, ich verstehe nicht was du meinst. In eval definiere ich doch beispielsweise line1.dia=...


In assignin will ich ja genau auf line1.dia zugreifen oder?
Wäre nett, wenn du mir das nochmal etwas ausführlicher erklären könntest. Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.08.2010, 14:15     Titel:
  Antworten mit Zitat      
Hallo
Besser wäre wahrscheinlich so:
Code:

linie =  struct('dia',[],'len',num2cell(1:5));
for n=1:5
    linie(n).dia = str2double(get(handles.(sprintf('dia_EditText%d',n)),'String'));
    linie(n).len = str2double(get(handles.(sprintf('len_EditText%d',n)),'String'));

    assignin('base',sprintf('dia_%d',n), linie(n).dia);
    assignin('base',sprintf('len_%d',n), linie(n).len);
end
 


PS: LINE ist ein reserviertes Wort, bitte anderen Namen für deine Variablen nutzen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.08.2010, 14:20     Titel:
  Antworten mit Zitat      
Labida hat Folgendes geschrieben:
Sorry, ich verstehe nicht was du meinst. In eval definiere ich doch beispielsweise line1.dia=...


In assignin will ich ja genau auf line1.dia zugreifen oder?
Wäre nett, wenn du mir das nochmal etwas ausführlicher erklären könntest. Smile


Na schaue doch genau hin, wie rufst LINE bei ASSIGIN auf? Nämlich mit Klammern LINE(1).DIA. Und bei EVAL hast du was erzeugt? LINE1.DIA Ohne Klammer! Also existiert LINE(1).DIA mit Klammern überhaupt nicht----deswegen kracht es bei ASSIGIN
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.