Mal wieder eine Aufgabe



  • Rumraten nützt da nichts.

    Schau dir mal die Zeile 19 an.
    Was steht ganz vorne in der Zeile?
    Und was steht zwischen den Klammern?



  • DirkB schrieb:

    Rumraten nützt da nichts.

    Schau dir mal die Zeile 19 an.
    Was steht ganz vorne in der Zeile?
    Und was steht zwischen den Klammern?

    Ja double und in der Klammer char.
    Ich steh mal wieder aufm Schlauch hab ichs Gefühl..



  • Die Funktion gibt ein double-Wert zurück. Den kannst du z.B. einer Variablen zuweisen.
    Wie weist du einer Variablen einen Wert zu?

    Die Funktion erwartet als ersten (und einzigen) Parameter ein char. Das ist der Wert zwischen den Klammern.
    Ein char (i.A 8-Bit mit Vorzeichen) kann Werte zweischen -127 und +127 aufnehemn.
    Dazu gehören auch Zeichen wie z.B. 'x' oder '@' oder ...



  • int main(double equivRes) { 
        float v = berechnen(equivRes); 
    
    printf ("\n\nDer Ersatzwiderstand ist: %.2f\n", v); 
    return 0; 
    
    system("PAUSE");
    }
    

    ??

    EDIT:
    Funktioniert! Vielen vielen Dank.



  • Nun gibts noch ne b.)
    Die lautet:

    Ich soll meine Funktionen so abwandeln, dass ich beliebig viele Widerstände berechnen kann.
    Das Hauptprogramm soll ich so ändern, dass ich über eine Eingabe abfragen kann, wie viele Widerstände ich berechnen will.

    Ich versuch mich mal dran.
    MfG



  • Hast du den Code auch editiert?

    Der ist Müll: http://www.c-plusplus.net/forum/p284489#284489

    Zudem ist ein double kein char.

    Der Compiler übersetzt das. Er gibt aber auch ein paar Warnungen (wenn du sie eingeschaltet hast - Was du unbedingt tun solltest).



  • Benjoo #1 schrieb:

    Das Hauptprogramm soll ich so ändern, dass ich über eine Eingabe abfragen kann, wie viele Widerstände ich berechnen will.

    Den Wert musst du dann ja an die Funktion übergeben. 😮



  • Ich hab return 0; rauseditiert.
    Mehr nicht, ja hab meine Warnungen an, da kommt keine?!



  • Sorry

    int main(char equivRes) { 
       double v = berechnen(equivRes); 
    
    printf ("\n\nDer Ersatzwiderstand ist: %.2f\n", v); 
    //return 0; 
    
    system("PAUSE");
    }
    


  • Auch Müll.
    Die Paramter von main dienen zur Übergabe von Kommandozeilenparamteren.

    Ist bei dir aber auch egal, da du den Paramter eh nicht auswertest.



  • Alles klar, also das einlesen hab ich schonmal:

    void einlesen(float widerstaende[]) { 
    
    	int anzahl, i;
    
    	printf("Wie viele Widerstaende moechten Sie berechnen? ");
    	scanf("%i", &anzahl);  
    
        printf("Bitte geben Sie fuer die Widerstaende positive Zahlen groesser als 0 ein.\n\n"); 
    
    	for (i=0;i<anzahl;i++)
    		{
    			printf("Bitte geben Sie den %i. Widerstand in Ohm ein: ", i+1); 
    			scanf("%f", &widerstaende[i]); 
    		}
    }
    


  • Ohje, viele Probleme auf einmal 😃
    Da ich ja nun kein festes Array mehr mit 3 Elementen hab muss ich ja ziemlich vieles ändern.

    parallelschaltung = 1/(1/widerstaende[0] + 1/widerstaende[1] + 1/widerstaende[2]);
    	reihenschaltung = widerstaende[0] + widerstaende[1] + widerstaende[2];
    

    Wie änder ich denn die Formeln um?!
    Und wie übergebe ich das Array mit meinem 'i'?
    MfG



  • Bisschen merkwürdig finde ich das ja schon.
    Beim einlesen kommst du ja auch ohne feste Indizes aus.
    Tipp:
    Eine Schleife.



  • Benjoo #1 schrieb:

    Und wie übergebe ich das Array mit meinem 'i'?

    Zwei Parameter: Einmal das Array, einmal die Anzahl.

    Was hast du denn bis jetzt im Unterricht/Vorlesung gemacht?



  • Ich glaub heut wir das nichts mehr, muss erstmal meinen Kopf frei kriegen..
    Melde mich morgen nochmal.
    MfG



  • Tut mir leid, ich habe den Eindrucke dein Kopf ist, was C betrifft, schon leer.

    Fang nochmal von vorne an. Programmiere die Beispiele nach und spiele mit denen.
    Verändere sie und schau was sich anders verhält.



  • So, in neuer frische, so sollte es ja passen:

    parallel = 0;
    for (j=0;j<anzahl;j++)
    {
    	parallel = parallel + 1/widerstaende[j];
    }
    parallelschaltung = 1/parallel;
    

    und die Reihenschaltung:

    reihe = 0;
    for (k=0;k<anzahl;k++)
    {
    	reihe = reihe + widerstaende[k];
    }
    


  • Geht doch. 👍



  • Der Vollständigkeit halber mal der gesamte Code bis jetzt:

    #include <stdio.h> 
    #include <Windows.h>
    
    int einlesen(float widerstaende[]) { 
    
    	int anzahl=0, i;
    
    	printf("Wie viele Widerstaende moechten Sie berechnen? ");
    	scanf("%i", &anzahl);  
    
        printf("Bitte geben Sie fuer die Widerstaende positive Zahlen groesser als 0 ein.\n\n"); 
    
    	for (i=0;i<anzahl;i++)
    		{
    			printf("Bitte geben Sie den %i. Widerstand in Ohm ein: ", i+1); 
    			scanf("%f", &widerstaende[i]); 
    		}
    	return anzahl;
    } 
    
    double berechnen(char circuit) { 
    	double reihenschaltung, parallelschaltung, parallel=0, reihe=0;
    	int j, k;
            float widerstaende[3]; 	
        double equivRes = 0; 
        circuit ='x'; 
        einlesen(widerstaende);
    
        printf("\nBitte waehlen Sie 'p' fuer Parallelschaltung und 'r' fuer Reihenschaltung: "); 
    
        scanf(" %c", &circuit); 
    
    	for (j=0;j<anzahl;j++) 
    	{ 
    	   parallel = parallel + 1/widerstaende[j]; 
    	} 
    	parallelschaltung = 1/parallel;
    
    	for (k=0;k<anzahl;k++) 
    	{ 
    	   reihe = reihe + widerstaende[k]; 
    	}
    
        switch (circuit) 
        { 
            case 'p': 
            case 'P': 
                        equivRes = parallelschaltung; // Parallelschaltung 
            break; 
            case 'r': 
            case 'R': 
                        equivRes = reihenschaltung; // Reihenschaltung 
            break; 
            default: 
                        printf("\nKein Schaltungstyp gewaehlt."); 
                        equivRes = 0; 
        } 
        return equivRes; 
    } 
    
    void main(char equivRes) { 
        double v = berechnen(equivRes); 
    
    printf ("\n\nDer Ersatzwiderstand ist: %.2f\n", v); 
    //return 0; 
    
    system("PAUSE");
    }
    

    Jetzt muss "anzahl" noch übergeben werden sowie das array "widerstaende" muss dynamisch angelegt werden, hoffe das ist die richtige Bezeichnung.



  • Da musst du dir wohl nochmal im Ablauf vom Programm etwas einfallen lassen.
    Das Array wird in berechnen angelegt.
    Die Größe wird aber erst in einlesen bestimmt. Da ist es bereits zu spät.

    Dein main ist immer noch Müll.

    Schon mal an folgenden Ablauf gedacht:
    Ermitteln der Größe in main .
    Array anlegen (in main )
    Übergabe des Array und Größe an einlesen .
    - im Array stehen jetzt die Werte

    Abfrage des Ersatztyps in main
    Übergabe von Array, Größe und Ersatztyp an berechnen .
    - Rückgabe vom Ersatzwert

    Ausgabe vom Erstzwert in main


Anmelden zum Antworten