- for, whie schleife,do while schleife Problem bitte um Hilfe



  • HI Leute 🙂 🙂
    **
    Ich hoffe das mir einer von euch bei dieser Aufgabe helfen kann.
    Ich muss ein C- Programm schreiben das den Inhalt eines Integer-Feldes
    int feld1[]={1,2,3,4,5,6,7,8,9,10}
    liest und nur die geraden Zahlen in umgekehrter Reihenfolge in ein zweites Feld feld2[]
    übernimmt. Ist die Zahl in feld1[] ungerade, so soll stett der ungerade Zahl eine 0 in feld2 []
    geschrieben werden.**

    Beispiel:

    feld1[]={1,2,3,4,5,6,7,8,9,10}
    feld2[]={10,0,8,0,6,0,4,0,2,0}

    Man muss 3 Programme schreiben und zwar jeweils mit einer
    - for- schleife
    - whie schleife
    - do while schleife
    Wie gehe ich an diese Aufgabe am bessten ran?

    Mine Versuche:

    for - Schleife:

    int i ;
    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    int feld2[10];
    for(i=0;i<=9;i+=2)
    {
    feld1[i]=0;
    printf("%i",feld1[i]);
    }
    for(i=9;i>=0;i--)
    {
    printf("%i",feld2[i]);
    }
    return 0 ;
    }
    
    while - Schleife:
    int i =0 ;
    int j;
    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    int feld2[10];
    while (9<=i)
    {
    feld1[i]= 0;
    i + = 2;
    printf("%i",feld1[i]);
    }
    while (9=>i)
    {
    feld2[j]= feld1[i];
    :open_mouth: ??
    

    do while -Schleife

    int i=0;
    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    int feld2[9];
    
    do{
    int feld1[i]=0;
    i+=2;
    printf("%i",feld1[i]);
    }
    while(i<feld1[9];
    do{
    

    😕
    }

    **
    Ich hoffe das wenigstens der Ansatz ungefehr richtig ist.

    Vielen Danke im voraus**



  • Wenn du vor den Code schreibst: [cpp] und danach: [/cpp], dann kann man ihn besser lesen.

    Was funktioniert denn nicht?
    🙂



  • mngbd schrieb:

    Wenn du vor den Code schreibst: [cpp] und danach: [/cpp], dann kann man ihn besser lesen.

    Was funktioniert denn nicht?
    🙂

    Ich muss feld1[] ins feld2[] kopieren und dabei alle ungerade Zahlen aus feld1 Null setzen und die dann in umgekehrter Reihenfolge mit feld2[] ausgeben.

    Habe das mit feld1[] geschafft, aber wie zum kuckuck kopiere ich feld1 in feld2
    wie gehe ich am besten an so eine Aufgabe heran wenn ich die schnellstmöglich lösen will?
    Und wie wurde das bei Zeichenketten aussehen?

    habe das bis jetzt jetzt geschaft:

    #include <stdio.h>

    int main() {

    int feld1[] ={1,2,3,4,5,6,7,8,9,10};

    int x;

    for(x=0;x<=9;x+=2)
    {
    feld1[x]=0;

    }
    for (x=9;x>=0;x-=1)
    {

    printf("%i\n",feld1[x]);

    }

    return 0;
    }

    Danke im voraus 🙂



  • Dann sage ich auchmal etwas dazu: Der Ansatz ist nicht richtig, da du nicht die Arrayeinträge mit den ungeraden Werten auf 0 setzt sondern die einen ungeraden Index haben. (Dein += 2 deutet darauf hin).

    for(i=9;i>=0;i--)
    {
      printf("%i",feld2[i]);
    }
    

    Gäbe das Richtige aus,wenn die Zahlen von feld1 in feld2 übertragt worden werden. Aber selbst wenn leigen die Daten liegen in Feld1 immer noch falsch herum (bzw. wurden noch nicht umgedreht).
    ~Außerdem würde ich den "%i" durch " %i" ersetzen. So kann man die einzelnen besser voneinander unterscheiden.~

    @patecevap, bitte ändere in deinen Eintrag die vorletzte Zeile [quote] in [/quote].



  • patecevap schrieb:

    [cpp]
    ...
    [\cpp]

    Das war der falsche schräge Strich.

    patecevap schrieb:

    Habe das mit feld1[] geschafft, aber wie zum kuckuck kopiere ich feld1 in feld2

    Du schreibst in deiner Schleife

    statt
    .

    Dann musst du noch irgendwie herausfinden, ob eine Zahl gerade ist. Versuch's so:

    int iseven(int n)
    {
        return n % 2 == 0;
    }
    
    int n = ...;
    if (iseven(n))
        puts("gerade");
    else
        puts("ungerade");
    

    🙂



  • So jetzt habe ich es geschafft 🙂 , das Programm läuft auch, aber man kann doch das noch viel einfacher machen oder 😕 ??
    Ich meine ohne diese vielen for schleifen.

    Wie kann ich die Felder vertauschen und gleich dabei die ungeraden zahlen in Feld 2 auf Null setzen?

    Beispiel nochmal:
    
    feld1[]=feld2[] // so das im feld2[] die ungeraden Zahlen null sind und in umgekehrter reihenfolge ausgegeben werden
    
    feld1[]={1,2,3,4,5,6,7,8,9,10}
    feld2[]={10,0,8,0,6,0,4,0,2,0}
    
    #include  <stdio.h>
    
    int   main()  {
    
    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    int feld2[10] ;
    int x,y=0; // die Initialisierung
    
    for(x=0;x<10;x++){
    
    feld2[y]=feld1[x]; // hier habe ich die felder 1 zu 2 vertauscht 
    
    y+=1;
    
    }
    
    for(x=0;x<=9;x+=2){
    
    feld2[x]=0; // hier habe ich die ungeraden zahlen von feld2 mit null vertauscht
    
    }
    
    for (x=9;x>=0;x--) // und hier jetzt die umgekehrte ausgabe 10 0 8 0 6 0 ...
    
    {
    
    	printf("%i\n",feld2[x]); // ausgabe auf dem bildschirm
    
    }
    
    return 0;
    }
    


  • patecevap schrieb:

    Wie kann ich die Felder vertauschen und gleich dabei die ungeraden zahlen in Feld 2 auf Null setzen?

    Kleiner Hinweis

    if( a % 2 == 1)
    {
      // a ist ungerade
    } 
    else
    {
      // a ist gerade
    }
    

    Außedem gitbst du immer noch die Zahlen umgehehrt aus. In feld2 liegen die aber genauso wie in Feld1.

    y=0; // die Initialisierung
    
    for(x=0;x<10;x++){
    feld2[y]=feld1[x]; // hier habe ich die felder 1 zu 2 vertauscht
    y+=1;
    }
    

    Richtiger Ansatz, aber so laufen beide in die gleiche "Richtung". Setz doch Y auf 10 und dekrementiere es am ende jeder scleife.

    Außerdem musst du dann die Ausgabe von 0 bis 10 zählen lassen



  • Das Vertauschen und Nullen kannst du eigentlich in eine Schleife mit einer Zeile packen:

    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    	int feld2[10];
    
    	for(int i=0;i<10;++i) {
    		feld2[10-1-i]=feld1[i]%2 ? 0 : feld1[i];
    	}
    


  • Danke für eure Hilfe 🙂
    werde das ganze gleich ausprobieren 😋



  • Habe es endlich geschafft.
    Danke für die Hilfe nochmal :).
    Ich habe hier noch eine Aufgabe von der ich gar keinen Plan habe wie ich zu der gefragten Lösung komme.

    Kann mir einer von euch dabei bittttttte Helfen 🙂 ?
    Es ist eine Struktur Aufgabe.

    PS:habe leider noch nicht sehr viel wissen vorzuweisen bei den Strukturaufgaben..

    :clown: 
    
    #include  <stdio.h>
    
    int   main()  {
    
    int feld1[]={1,2,3,4,5,6,7,8,9,10};
    int feld2[10] ;
    int x,y=9; 
    
    for(x=0;x<10;x++)
    {
    
    feld2[y]=feld1[x]; // initialisierung muss immer sein liks = rechts wie y = 5
    
    if (feld2[y]%2==1)
    {
    		feld2[y]=0;
    }
    
    y-=1;
    }
    
    for(x=0;x<10;x++)
    {
    
    	printf("%i\n",feld2[x]); 
    
    }
    
    return 0;
    }
    


  • **Es ist zu lösen:

    Vervollständigen Sie das folgende Programm, indem Sie die Funktion vertausche_reihenfolge() ergänzen und den Aufruf der Funktion vertausche_reihenfolge() einfügen.
    **

    😕

    Habe da leider keinen Ansatz 😞

    So das ist die Aufgabe:

    #include  <stdio.h>
    #include  <string.h>
    #define  ANZ_BUECHER 6
    
    struct buch {
    	int inv_nr;
    	char titel [31]:
    };
    void vertausche_reihenfolge(int*a,int *b,char *string1,char *string2);
    
    int   main()  {
    
    int flag,nummer=0;
    int i; 
    
    struct buch buecher[] = {599,"C-ganz einfach",
    						 123,"C-Uebungsbuch",
    						 178,"C-Programmieren in c",
    						 999,"C-Programmieren lernen mit c",
    						 456,"C-Programm von Anfag an",
    						 231,"C-ease"};
    do{
    	flag=0;
    	nummer++;
    
    	for (i=0;i< ANZ_BUECHER - nummer; i++){
    		if (buecher[i].inv_nr > buecher[i+1].inv_nr) {
    
    			// Aufruf vertausche_reihenfolge():
    
    			flag=1;
    		}
     }
    }while (flag==1);
    return 0;
    }
    


  • Ich schätze mal ganz grob, du sollst die Struktur sortieren. Der Name der Funktion verrät ja schon, was zu tun ist, nämlich den Inhalt der Variablen tauschen.

    Gruß,
    B.B.


Anmelden zum Antworten