Wäre nett, wenn ihr mir helft ;)



  • supertux: ich hab mir dieses tutorial nicht genauer angesehen aber es ist wohl besser zu "versuchen" jemanden zu helfen als "von oben herab" zu argumentieren 🙂



  • um beliebig viele widerstände einzulesen brauchst du ein array, dh du benutzt anstelle der variablen r1 und r2 ein array, zb r[256].

    dann packst du den eingabebefehl in eine schleife, die so lange widerstände einliest, bis null als endebedingung eingegeben wird.

    danach berechnest du in einer schleife rr und rp aus den werten des arrays.



  • puh, von arrays hab ja mal gar keine ahnung .. aber mal sehen ob ich was finde & es hinbekomme



  • Array:

    statt:

    double r1,r2,r3,......;
    
    r1= a;
    r2= b;
    r3= c;
    .
    .
    .
    

    machst du:

    double rArray[500]; //Array mit 500 double werten (index 0-499)
    
    rArray[0]=a;
    rArray[1]=b;
    rArray[2]=c;
    .
    .
    .
    

    denke das ist selbsterklärend;)

    So aber nun musst du noch wissen was ne Schleife ist^^



  • @BorisDieKlinge: danke, kann ich den speicher auch über die array grenzen hinweg ansprechen? also könnte ich auch mit rArray[600] eine speicherzelle ansprechen, die 100*sizeof(double) bytes hinter dem rArray liegt? ist das möglich?



  • nein. Warum willst du das tun macht kein sinn oder? Du reservierst so statisch ein Array mit 500 werten. Wenn du mehr willst dann mach 600. Wenn du es dynamisch willst gehts es ganz anderes (aber das wäre zuviel für dich).

    Entscheide dich wieviel werte du max. berechnen lassen willst, und mach so graoß dein array.



  • sibbi schrieb:

    @BorisDieKlinge: danke, kann ich den speicher auch über die array grenzen hinweg ansprechen? also könnte ich auch mit rArray[600] eine speicherzelle ansprechen, die 100*sizeof(double) bytes hinter dem rArray liegt? ist das möglich?

    Klar, möglich ist das. Der C-Compiler wird Dir auch nicht sagen, dass Du auf das 601 Element von einem Array mit 600 Elementen zugreifst. Oftmals wird Dir auch das Laufzeitsystem nichts sagen.
    Das Programmverhalten ist nicht mehr definiert, und es kann alles mögliche passieren. Wenn Du Glück hast, schmiert das Programm gleich beim ersten Start ab. Wenn Du Pech hast, passiert sporadisch irgendwelcher Blödsinn, der sich nur schwer reproduzieren lässt und schwer aufzuspüren ist.



  • sibbi schrieb:

    @BorisDieKlinge: danke, kann ich den speicher auch über die array grenzen hinweg ansprechen? also könnte ich auch mit rArray[600] eine speicherzelle ansprechen, die 100*sizeof(double) bytes hinter dem rArray liegt? ist das möglich?

    das hab ich garnicht geschrieben. muss das irgentwie so hinkriegen, dass das programm fragt, wie viele widerstände ich eingeben möchte. angenommen ich gebe 6 ein. dann sollen ausgaben folgen wie: "Bitte geben Sie den 1. Widerstand ein:", "Bitte geben Sie den 2. Widerstand ein", und so weiter, bis (in diesen bsp jetzt) zum 6. widerstand. mittlerweile weiss ich, dass ich da mit arrays und schleifen arbeiten muss. nur bin da leider mit überfragt. hab mir auch schon das ein oder andere tutorial durchgelesen aber naja, wird irgentwie nie so wie ichs haben möchte bzw. haben muss



  • Du brauchst nicht zwingend ein Array für die letzte Aufgabe.

    unsigned int eingabe;
    unsigned int produkt = 1;
    unsigned int summe = 0;
    

    Jetzt brauchst du nur noch die Widerstände nacheinander einlesen, bis der Benutzer keine Lust mehr hat und jeweils zu produkt und summe hinzurechnen. Am Ende ist summe der Reihenwiderstand und produkt / summe (bei summe != 0) der Parallelwiderstand.

    Pass jedoch auf, daß produkt nicht überläuft. Eventuell vor dem Überlaufen entsprechend zu KOhm, MegOhm umwandeln. Ist aber vermutlich für die Aufgabe uninteressant.



  • BorisDieKlinge schrieb:

    nein. Warum willst du das tun macht kein sinn oder? Du reservierst so statisch ein Array mit 500 werten. Wenn du mehr willst dann mach 600. Wenn du es dynamisch willst gehts es ganz anderes (aber das wäre zuviel für dich).

    Entscheide dich wieviel werte du max. berechnen lassen willst, und mach so graoß dein array.

    Hi,
    für mich wäre jetzt interessant wie das ganze dynamisch aussieht.
    Könnte mir das einer and diesem simplen beispiel erklären?
    MfG Gustl



  • Gustl schrieb:

    BorisDieKlinge schrieb:

    nein. Warum willst du das tun macht kein sinn oder? Du reservierst so statisch ein Array mit 500 werten. Wenn du mehr willst dann mach 600. Wenn du es dynamisch willst gehts es ganz anderes (aber das wäre zuviel für dich).

    Entscheide dich wieviel werte du max. berechnen lassen willst, und mach so graoß dein array.

    Hi,
    für mich wäre jetzt interessant wie das ganze dynamisch aussieht.
    Könnte mir das einer and diesem simplen beispiel erklären?
    MfG Gustl

    int *Wiederstaende;
       int Anzahl;
       printf("Wie viele Werte benötigen Sie : ");
       scanf("%d", &Anzahl);
       Wiederstaende = (int *)malloc(Anzahl*sizeof(int));
    

    Ich hoffe das Beispiel hilft dir weiter. Mit malloc wird während der Laufzeit Speicherplatz reserviert.



  • Konfusius schrieb:

    um beliebig viele widerstände einzulesen brauchst du ein array, dh du benutzt anstelle der variablen r1 und r2 ein array, zb r[256].

    256 ist alles andere als 'beliebig'. aber davon mal abgesehen, man könnte ja auch jeden neuen wert mit dem vorherigen zwischenergebnis sofort verrechnen. dann braucht man kein array und kann trotzdem sehr viele werte verarbeiten.
    🙂



  • double *pArray;
    int iAnz;
    .
    .
    .
    //Dyn array erzeugen
    pArray= malloc(sizeof(*pArray)*iAnz);
    
    .
    .
    //BERECHNEN
    
    //Dyn array freigeben
    free(pArray);
    

Anmelden zum Antworten