Problem bei Arrays
-
hallo erstmals,
ich habe ein problem, ich muss ein programm erstellen, welches von den zahlen 0 - 100 (integer ) die quadratzahlen berechnet sowie die wurzelwerte.
also insgesammt 300 zahlen auf den bildschirm bringt. (je 100)dargestellt sollte es etwa so aussehen:
quadratzahl zahl wurzel
1 1 1.00
4 2 1.41
9 3 1.73
......
......natürlich etwas schöner formatiert......
dazu sollte jeweils nach 10 zahlen das programm auf die tastatureingabe warten.so, hier habe ich deb code, welcher aber nicht ganz fertig ist. habe leider keine ahnung wie ich das ganze darstellen soll.
es holpert bei den arrays......
ausserdem ist die bildschirmausgabedarstellung (printf) extrem schlecht (mit tab's.....)vielleicht kann mir jemand einen tip geben wie ich das lösen kann, bin fast am verzweiflen........argh.
danke
EDIT: Neuer Code
#include <stdio.h> /*aufgabe1.c*/ #include <string.h> struct Personendaten { char Zahl[40]; char Quadrat[40]; char Wurzel[40]; int z; float y; }; int main() { int x; int c=100; int w=10; struct Personendaten rechnung, zahl[100][3]; strcpy(rechnung.Zahl,"Zahl"); strcpy(rechnung.Quadrat,"Quadrat"); strcpy(rechnung.Wurzel,"Wurzel"); printf("%s %s %s\n",rechnung.Quadrat, rechnung.Zahl,rechnung.Wurzel); for(x=0;x==c;x++) { zahl[x][0].z=1*1; zahl[x][1].z=1; zahl[x][2].y=sqrt(1); printf(" %i %i %fl \n",zahl[0][0].z,zahl[0][1].z,zahl[0][2].y); if(x==w) { getchar(); w=w+10; } } return 0; }
-
Wenn du die Werte in der Schleife berechnest und auch gleich ausgibst, brauchst du gar kein Array.
xarathus schrieb:
struct Personendaten zahl[99][2];
Das sind übrigens nur 99 x 2, und nicht, wie du zu glauben scheinst, 100 x 3.
-
zählt man nicht von 0-99 und 0-2? (0....99, 0,1,2)???
aber ich brauche doch arrays für die darstellung, sprich
0 1 2
0x x x
1y y y
2y y y
3y y y
-
[n] heist von 0..n-1
-
xarathus schrieb:
zählt man nicht von 0-99 und 0-2? (0....99, 0,1,2)???
nein!
array[100] => 0..99
array[2] => 0..1xarathus schrieb:
aber ich brauche doch arrays für die darstellung, sprich
0 1 2
0x x x
1y y y
2y y y
3y y ydann brauchst du [100][3]
-
okey danke, noch mein hauptproblem liegt darin, das die for schleiffe nicht funktioniert!
sobald ich sie raus nehme und x durch 0 ersetze, so ergiebt es 3 einträge.
wo liegt dort der fehler?
-
Erstens du denkst zu kompliziert ;). Wie bereits von MFK erwwähnt benötigst du entweder gar kein Array (bei direkter Berechnung und Ausgabe), oder aber nur ein eindemensionales Array.
Zweitens: Das ist C-Code.
So kannst du vorgehen bei Zwischenspeicherung (im Array) deiner Werte:
Wenn du eine struktur a la:
struct Data { int zahl; // char-Werte sind in diesem Fall imho unpassend int quadrat; double wurzel; };
hast, brauchst du kein mehrdemensionales Array, da du ja (dank der Struktur) in der Schleife folgendes schreiben kannst:
... Data foo[100]; // Array der struktur Data mit 100 Elementen erzeugen. ... for(unsigned int i = 0; i < 100; ++i) { foo[i].zahl = i; foo[i].quadrat = i * i; foo[i].wurzel = sqrt((double) i); }
//Edit^n: Fehler über Fehler;
//2*Edit^n: Und just by the way: Eine Struktur mit Namen 'Personendaten' ist vielleicht ein wenig unpassend, wenn sie zahlen etc. speichern soll, oder?Caipi
-
viel dank Caipi, du hast mir sehr geholfen!
das programm läuft nun, aber die Wurzelwerte stimmen nicht, ich kriege hin und wieder negative zahlen, oder riesengrosse werte.....
weiss aber nicht an was das liegt......#include <stdio.h> /*aufgabe1.c*/ #include <string.h> struct data { int zahl; int quadrat; double wurzel; char ausgabe[40]; char ausgabe1[40]; char ausgabe2[40]; }; int main() { struct data rechnung[100], rechen; int w=10; int i; strcpy(rechen.ausgabe,"Zahl"); strcpy(rechen.ausgabe1,"Quadrat"); strcpy(rechen.ausgabe2,"Wurzel"); printf("%s %s %s\n",rechen.ausgabe1, rechen.ausgabe,rechen.ausgabe2); for(i = 1; i < 101; ++i) { rechnung[i].zahl= i; rechnung[i].quadrat= i * i; rechnung[i].wurzel= sqrt((double)i); printf("%i %i %dl\n",rechnung[i].quadrat, rechnung[i].zahl,rechnung[i].wurzel); if(i==w) { getchar(); w=w+10; } } printf("%i %i %dl\n",rechnung[i].zahl, rechnung[i].quadrat,rechnung[i].wurzel); }
-
Mach mal aus %dl in printf %lf
also:
#include <stdio.h> /*aufgabe1.c*/ #include <string.h> struct data { int zahl; int quadrat; double wurzel; char ausgabe[40]; char ausgabe1[40]; char ausgabe2[40]; }; int main() { struct data rechnung[100], rechen; int w=10; int i; strcpy(rechen.ausgabe,"Zahl"); strcpy(rechen.ausgabe1,"Quadrat"); strcpy(rechen.ausgabe2,"Wurzel"); printf("%s %s %s\n",rechen.ausgabe1, rechen.ausgabe,rechen.ausgabe2); for(i = 1; i < 101; ++i) { rechnung[i].zahl= i; rechnung[i].quadrat= i * i; rechnung[i].wurzel= sqrt((double)i); printf("%i %i %lf\n",rechnung[i].quadrat, rechnung[i].zahl,rechnung[i].wurzel); if(i==w) { getchar(); w=w+10; } } printf("%i %i %lf\n",rechnung[i].zahl, rechnung[i].quadrat,rechnung[i].wurzel); }
//EDIT:
Oder noch besser nimm cout
-
yo, danke dir, das problem ist nun gelöst!
-
Ist dir klar, dass du da 300 jeweils 40 Zeichen große char-Arrays hast, die du nicht brauchst (und auch nicht benutzt)?
-
Und um das ganze abzurunden versuche ich es auch nochmal mit den Arrays
Da ich aus xarathus vorletztem Post schließe, dass er es noch nicht ganz verstanden hat.@xarathus:
Die Zählweise von Arrays beginnt bei 0. Folgende Regel:
Ein Array mit 10 Elementen geht von Index 0 bis 9. D.h. du sprichst es an über array_var[0] bis array_var[9]. Allgemeiner ausgedrückt ein Array mit n Elementen geht von Index 0 bis Index n-1 (D.h. array_var[0] bis array_var[n-1]).Bei deinem Code übergehst du das erste Element (Index 0) einfach; Dafür liest/schreibst du aber über die Grenzen des Arrays hinaus. (Du liest/schreibst auf das Element n).
Also:
for(unsigned int i = 0; i < 100; ++i) // Hier das, was in der Schleife gemacht werden soll :-)
Caipi