Fakultät; Zahlen nach Text & ggT und kgV

unistar

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein paar Fragen zu einigen Aufgaben die ich mich beschäftigen muss. Leider freunde ich mich sehr schwer mit C++ an aber muss studientechnisch ein paar Basics haben.

Die erste Aufgabe habe ich noch (mit Hilfe) hinbekommen. Die lautete

1. Schreiben sie ein Programm, das mit einer for Schleife für die Zahlen 0 ... 50 die Fakultät berechnet und zeilenweise in der Form:

n : n!

ausgibt.


Ich hab das so gelöst:

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

int main ( int argc, char *argv[])
{

double n;

for( int i=0; i<=50; i++ )
{
n=1;
for ( int j=1; j<=i; j++ ) n = n * j;
printf (" %d : %lf \n", i, n);

}

return 0;
}

Ich versteh das alles nicht so richtig was die einzelen Befehle heissen, aber beim Ausführen klappt das :-)


Danach sollte ich ein Programm schreiben, welches die identische Funktionalität hat wie das erste aber diesmal mit einer while Schleife. Das hab ich auch versucht aber das funktioniert nicht.

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

int main ( int argc, char *argv[]) {

double n=1;

int i = 0;
while ( i<=50 ) {

int j = 1;
while ( j<=i ) {
n = n * j;
j++;
}
printf (" %d : %lf \n", i, n);
i++;
}

return 0;
}


Kann mir einer sagen, wo der Fehler hier im Programm ist ?

Bei den letzten beiden Aufgaben (3 und 4) hab ich gar keine Peilung.

Bei 3 muss ich auch ein Programm schreiben, das eine integer Zahl einliest und diese mit einer Scheife und einer switch Anweisung im Wortlaut ausgibt. Bespiel für die Zahl 347:

Drei Vier Sieben

Und bei der Aufgabe 4 (ggT und kg) muss das Programm zwei integer Zahlen einlesen und dazu den größten gemeinsamen Teiler (ggT) und das kleinste gemeinsame Vielfache (kgV) berechnet. Die Aussage soll wie folgt sein (Bespiel für 6 und 26):

ggT (6,26) = 2
kgV (6,26 = 78



Ich hoffe ihr könnt mir irgendwie weiterhelfen weil ich das einfach nicht kann bwz. verstehe.

DANKESCHÖN

gruß

unistar
 
Hi.
unistar hat gesagt.:
Code:
#include <stdlib.h>
#include <stdio.h>

int main ( int argc, char *argv[]) {

    double n=1;

    int i = 0;
    while ( i<=50 ) {
   
        int j = 1;
        while ( j<=i ) {
            n = n * j;
            j++;
        }
        printf (" %d : %lf \n", i, n);
        i++;
    }

    return 0;
}
Warum hast du denn jetzt die Deklaration und Initialisierung der Variable "n" außerhalb der Schleife?
unistar hat gesagt.:
Bei den letzten beiden Aufgaben (3 und 4) hab ich gar keine Peilung.

Bei 3 muss ich auch ein Programm schreiben, das eine integer Zahl einliest und diese mit einer Scheife und einer switch Anweisung im Wortlaut ausgibt. Bespiel für die Zahl 347:

Drei Vier Sieben
Tip: Einlesen geht mit scanf - genauer bei einem int so:
Code:
int i;
scanf ("%d", &i);

Wie eine switch Anweisung auszusehen hat, kannste ja z.B. mit Google rausfinden.

Dann würde ich die Zahl erstmal umdrehen (Modulo 10 gibt dir die kleinste Stelle, Integer-Division durch 10 schneidet die kleinste Stelle der Zahl ab) und in eine andere Variable speichern.

Danach einfach nur noch jeweils Stelle für Stelle ausgeben.
unistar hat gesagt.:
Und bei der Aufgabe 4 (ggT und kg) muss das Programm zwei integer Zahlen einlesen und dazu den größten gemeinsamen Teiler (ggT) und das kleinste gemeinsame Vielfache (kgV) berechnet. Die Aussage soll wie folgt sein (Bespiel für 6 und 26):

ggT (6,26) = 2
kgV (6,26 = 78
Wie man ggT und kgV berechnet sollte dir evtl. noch aus der Schule bekannt sein. Wenn nicht lassen sich sicherlich hier oder mit Google ein paar Lösungen finden.

Gruß
 
Nur ein leiner Fehler, aber große Wirkung :-):
Du mußt in jedem Durchlauf der äußeren Schleife n=1 setzen. Sonst fängst du ja schon mit dem Ergebnis des letzten Durchlaufes als Startwert an. Also auf Deine Weise mußt Du noch eine Zeile
Code:
n = 1;
nach der Initialisierung von j einfügen, dann geht es.
Du könntest natürlich auch diesen Effekt zur Optimierung verwenden, da z.B. gilt: 3! = 2! + 3. Du kannst also das Ergebnis des vorherigen Durchlaufes nutzen und mußt nicht immer wieder die innere schleife ausführen.
Den Code dafür schreibe ich hier nicht hin, versuche erstmal, das alleine hinzukriegen.
 
Alternativvorschlag für das Ausgeben der Zahlen in Worten: Du liest die Zahl als Integer ein und wandelst sie dann mit sprintf(...) in einen String um. Den gehst Du dann Zeichen für Zeichen durch und gibst die entsprechenden Worte aus:
Code:
switch(zeichen)
{
    case '1': printf("eins "); break;
    case '2': printf("zwei "); break;
    case '3': printf("drei "); break;
    .
    .
    .
}
 
Hi und vielen Dank für die vielen Antworten. Ich hab das mit der while Schleife nu auch hinbekommen aber bei der Aufgabe 3 und 4 komm ich nicht weiter - ich hab Programmierung erst seit kurzem und deshalb bin ich da noch nicht so gewandt. Wenn sonst jemand noch tipps parat hat, dann wäre ich sehr dankbar.

DANKE

unistar
 
Also, füe die Aufgabe 3 hast Du hier schon 2 Vorschläge, bei denen eigentlich nicht mehr viel fehlt, außer etwas Nachdenken.
Zu ggT und kgV gibt's ne ganze Menge im Internet.
 
also als tipp
kauf dir nen buch.

außerdem würde ich anstatt printf() lieber cout und zum einlesen cin verwenden.
dafür musste iostream.h einbinen ( oder auch nur ciostream)
macht das programm ein bischen leichter verständlich ( bzw c++ )

um zu überprüfen was and em prog net geht , kannst acuh auch in deine schleife ne ausgabe bauen:
also etwa so
....
while(1)
{
n= j+j;
cout << n;
}
....

aber ein bcuh ist immer gut oder lad dir ein tutorial aus dem inet.
 
Zurück