Felderverwendung !

murdi

Erfahrenes Mitglied
Hi ho , ich hab die aufgabe bekommen die Fakultaet


1 * 2 * 3 = 6

1 * 2 = 2

usw. auszugeben !!
Die berechnung ist kein problem nur bei der ausgabe hab ich immer einen speicherplatzfehler !

#include <stdio.h>

main()
{

char felder[2];

felder[0] = (" 1 * 2 = 2 ");
felder[1] = ("%s * 3 = 6 ",felder[0]);
printf("%s\n",felder[0]);
printf("%s\n",felder[1]);

system("PAUSE");
}

Ist das falsch ???
würde mich über eine schnelle antwort freuen.
tschau
 
Zuletzt bearbeitet:
wenn du felder[2] machst heisst das, dass du nur 2 buchstaben abspeichern kannst!!

du muesstest schon felder[2][100] machen, so dass du fuer beide felder jeweils 100 buchstaben speichern kannst, probier das mal.

wenns nich klappt, müssen wir das anders machen!
 
mhhh, nun kommt scho mal kein fehler mehr nur kann er den inhalt der felder nicht richtig auslesen ( kleine smilies etc ).

Gibt es vielleicht nicht noch einen anderen weg diese rechenschritte auszugeben ?
 
Wenn Du die Aufgabe iterativ lösen darfst bietet es sich an, jede Iteration einen Teilstring ausgeben zu lassen und beim Erreichen von *1 ein newline rauszuschicken.

Ansonsten - prüf mal den Inhalt der Strings, die Du da generierst.
Sind die auch passend terminiert?

Wenn Du dich schon mit den alten Sachen beschäftigen musst schau Dir mal die Funktion sprintf() an - die funktioniert wie printf(), gibt aber nicht nach stdout aus sondern gibt einen c_string zurück.
 
int fak(int n);

main()

{
int n;
print("n: ");
scanf("%i",&n)
print("%i ! = %i",n, fak(n) );
}
int fak(int n)
{
int erg=1;
if(n>1)
{
erg = n*fak(n-1);
}
else
{
erg = 1;
}

so wird ich die berechnung der fakultaet mit rekursionrealisieren.
nur wie erhalte ich jetzte jeden eizenlen rechenschritt ?
 
z.B. so:

#include <iostream> //für cout
using namespace std;

int fak(int wert)
{
int ausgabe;
if(wert>1)
{
ausgabe=wert*fak(wert-1);
cout<<" * "<<ausgabe;
return ausgabe;
}

cout<<" * "<<1<<" -> fertig"<<endl;
return 1;
}
 
hi !
Ich hab mal dein Source-Code etwas umgeschreiben, so dass er jetzt die Rechenschritte ausgibt, hab jedoch eine Schleife benuzt, da ich das komfortabler finde.
Gruß, Christian.

Hier ist der Source:
(Müßte eigentlich stimmen :) )
----------------------------------------------------------------

#include <stdio.h>

int fak(int n);

void main()
{
int n;
printf("n: ");
scanf("%i",&n);
printf("\n%i ! = %i",n, fak(n) );

}

int fak(int n)
{
int erg = 1;
for(int i=1;i<=n;i++)
{
printf(" * %i",i);
erg=erg*i;
}
return erg;
}
 
hab es nochmal bissel überarbeitet !!!!

gibt nun
1 * 2 * 3 * 4 * 5 = 120
1 * 2 * 3 usw.... aus :

/************************************** Fakultaetsprogramm Version 1.0 *********************/
/* Datum : 23.01.2001 */
/* Autor : Erik Maennel */
/* Name : Fakultaetsprogramm */
/* Version : 1.0 */
/*********************************************************************************************/

#include <stdio.h>

int fak(int n); /* Aufruf von Funktion Fak ( erhält einen int und gibt einen zurück ) da vor main gilt für gesamtes main() */

void main()
{
int n;

printf(" Zahl < ");
scanf("%i",&n);

while( n != 0 ) /* Inhalt der whileschleife wird solange wiederholt bis eingegebene Zahl 0 ist , n wird negativiert */
{
printf(" = %i\n\n", fak(n) );
n--;
}
system("PAUSE");
}

int fak(int n) /* Funktion fak */
{

int fak_gesamt = 1;
int i;

if( n == 0 ) /* wenn n == 0 ist , wird 0 zurück gegeben */
return 1;

else if( n <= 34 && n >= 1) /* Berechnung wird nur durchgeführt solange n größer als 0 und kleiner als 35 ist */
{
for( i = 1 ; i <=n ; i++ )
{
printf(" %i ",i);

if( i <= (n-1) ) /* Solange wie i kleiner gleich n-1 ist wird das * zeichen ausgegeben */
printf(" * ");
else
printf(" ");

fak_gesamt = fak_gesamt * i; /* Berechnung der Fakultaet */
}
return fak_gesamt; /* Rückgabe der fakultaet gesamt */
}

else
return 0; /* wenn n weder 0 noch grösser als null und kleiner wie 35 ist wird null zurück gegeben */

}
 

Neue Beiträge

Zurück