Problem mit for/if/else



  • HI

    Ich versuche ein Programm zu schreiben, das n viele Dreiecke einliest. (Seiten a,b und c)
    Jedes Dreieck soll auf Gleichseitig "anz2" und Gleichschenkligkeit "anz1" überprüft werden. Am Ende soll die jeweilige Anzahl ausgegeben werden.

    Das Programm läuft aber es wirft bei einigen Eingaben die falschen Werte raus. Nicht immer. Die Anzahl der Dreiecke, die 3 unterschiedlich lange Seiten haben, stimmt aber immer. Nur die beiden anderen bereiten mir Kopfzerbrechen.
    Meine Vermutung ist, dass die for/if/else Anweisungen anders funktionieren als ich mir das denke.
    Kann mir jemand helfen?

    #include <stdio.h>
    #include <stdlib.h>

    int n , i , anz1=0 , anz2=0 , m=0;

    int main()
    {
    printf("Wieviele Dreiecke sollen getestet werden? "); scanf("%i",&n);

    for (i=1;i<=n;i++)
    {
    int ai,bi,bi,ci; printf("\\n\\nGeben Sie Seite a vom Dreieck %i ein! ",i); scanf("%i",&ai);
    printf("Geben Sie Seite b vom Dreieck %i ein! ",i);
    scanf("%i",&bi); printf("Geben Sie Seite c vom Dreieck %i ein! ",i); scanf("%i",&ci);
    if (ai==bi==bi==ci)anz2++;elseif(ai) anz2++; else if (ai==biai || ai==cibi || bi==c$i)
    anz1++;
    else
    m++;
    }

    printf("\n\n\nSie haben %i Dreieck(e) eingegeben.\n",n);
    printf("%i davon war(en) gleichschenklig.\n",anz1);
    printf("%i davon war(en) gleichseitig.\n",anz2);
    printf("%i Dreieck(e) hatte(n) 3 unterschiedlich lange Seiten.\n\n",m);

    system("pause");
    return 0;
    }



  • Junge, bei dem Code hab' selbst ich noch was gelernt und ich progge C seit 1995.

    Dollarzeichen in Variablennamen... öfter mal was Neues... aber gut... der GCC frisst's tatsächlich.

    if (a$i==b$i==c$i)
    

    heißt: a == b => (true oder false), es folgt (true oder false) == c.
    Das wird true, wenn a == b und c den Wert 1 besitzt oder a != b und c den Wert 0 besitzt.

    Nehmen Sie diesen:

    if (a$i==b$i && b$i==c$i)
    


  • #include <iostream>
    
    int main()
    {
    	std::cout << "Dreieck Validator V0.1" << std::endl;
    	std::cout << "Wieviele Dreiecke sollen getestet werden? " << std::flush;
    	std::size_t triangle_count = 0;
    	std::cin >> triangle_count;
    
    	std::size_t isosceles_triangles = 0;
    	std::size_t equilateral_triangles = 0; 
    	for (std::size_t triangle = 0; triangle < triangle_count; ++triangle)
    	{
    		unsigned double sides[3] = {0, 0, 0};
    		std::cout << "a: " << std::flush;
    		std::cin >> sides[0];
    		std::cout << "b: " << std::flush;
    		std::cin >> sides[1];
    		std::cout << "c: " << std::flush;
    		std::cin >> sides[2];
    
    		if (sides[0] == sides[1] && sides[1] == sides[2])
    			++equilateral_triangles;
    		else if (sides[0] == sides[1] || sides[1] == sides[2] || sides[2] == sides[0])
    			++isosceles_triangles;
    	}
    	std::cout << equilateral_triangles << " Dreieck(e) war(en) gleichseitig" << std::endl;
    	std::cout << isosceles_triangles << " Dreieck(e) war(en) gleichschenklig" << std::endl;
    	std::cout << (triangle_count - equilateral_triangles - isosceles_triangles) " war(en) invalid" << std::endl;
    	return 0;
    }
    

    Wir sind hier im C++-Forum!



  • Xin schrieb:

    Junge, bei dem Code hab' selbst ich noch was gelernt und ich progge C seit 1995.

    Dollarzeichen in Variablennamen... öfter mal was Neues... aber gut... der GCC frisst's tatsächlich.

    Hatte ich irgendwann mal probiert als ich eine Geldsumme als Variable hatte.

    Man lernt nie aus. 💡

    So wie ich! Ich hatte mich so sehr auf die Schleife konzentriert, dass ich das total übersehen habe. Danke. Hat mir sehr geholfen. Geht jetzt super. 👍


Anmelden zum Antworten