ascii tabelle ausgeben
-
Hallo Zusammen,
Was das Programmieren angeht bin ich absoluter Neuling(2 Wochen Programmieren Vorlesung). Bis jetzt habe ich einfache Ein-Ausgabe Programme gesehen, und etwas von Schleifen und Arrays gehört. Bis Sonntag Mittag muss ich folgende Aufgabe lösen:
Ausgabe von ascii Charakter 32-127, in einer Tabelle mit 4 Spalten, also:32 SP 56 8 80 P 104 h
... ... ... ...
... ... ... ...Jetzt das Problem: Leider bin ich ab morgen Vormittag auf einer Pflicht-Veranstaltung(Seminar auf einer Hütte), die bis Sonntag Mittag geht. Dort habe ich kein Internetzugang und es sind keine "Informatiker" anwesend.
Bis jetzt habe ich folgendes geschrieben:
#include <stdio.h>int main(void) {
int i;
int j;
int tabelle[26][4];for(i=32; i<128; i++)
{
printf("%d %c", tabelle[i][i]);
}return 0;
}Leider hab ich noch kaum Ahnung was ich mache. Ist die Lösung relativ einfach, oder muss ich deutlich mehr als bei meinem Versuch schreiben?
Es wäre nett wenn mir jemand weiterhelfen kann.
-
Für 4 Spalten benötigst du 2 verschachtelte Schleifen (die äußere für die Zeilen, die innere für die Spalten).
Du mußt dir dann nur den passenden Index berechnen.Deine Ausgabe ist aber auch noch falsch - entweder du berechnest die Tabellenwerte vorher und gibst dann die Werte des Arrays aus oder aber du gibt gleich die ASCII-Werte aus (da du zwei Werte je ASCII-Zeichen ausgeben willst, benötigst du auch zwei Parameter - außer dem Formatstring - bei printf).
-
Danke für die Antwort, aber ich weiß leider nicht wie ich den passenden Index berechne: Wie schaff ich es, dass die Tabelle nach 26 Zeichen in der ersten Spalte in die nächste übergeht?
-
um nochmal mein problem klarzumachen, mich verwirrt die Tabelle mit Zeilen und Spalten. Bei einem Simplen Programm für einen Getränkeautomaten habe ich das Verschachtelungsprinzip verstanden.
-
Das geht nicht. Du musst jede Zeile gleich mit den erforderlichen vier Spalten ausgeben, weil Du nicht ohne weiteres wieder in eine weiter oben liegende Zeile schreiben kannst.
-
Also ungefähr so:
Anzahl auszugebender Zeichen: 127 - 32 + 1
Spaltenabstand: Anzahl / SpaltenzahlDann ausgeben:
32 32 + Spaltenabstand 32 + 2 * Spaltenabstand 32 + 3 * Spaltenabstand
33 33 + Spaltenabstand 33 + 2 * Spaltenabstand ...usw.
-
danke, das hat mir schon stark weitergeholfen.
Ich muss jetzt leider nochmal weg, aber ich mach mich nachher sofort ran und nerv euch nochmal.
-
Das mit dem Spaltenabstand habe ich noch nicht ganz verstanden, also wie man das ganze ausgibt. Geht es auch, dass man zuerst alle Werte berechnet in dem man mit der Bedingung j>104 jeweils in eine neue Zeile springt und dann alles ausgibt?
#include <stdio.h>
int main(void) {
int i;
int j;
int tabelle[24][4];for(j=32; j<128; j+24) {
for(i=1; j>104; i++) {
printf("%d %c", tabelle[i][j]);
}return 0;
}
-
fuer die maximale verwirrung eines anfängers - manchmal muss man auch
einfach ein klein wenig ums eck denkenfor(unsigned char c = 32; c < 127+1; ++c)
{
printf("%03d %c%s", c, c, ((c-32+1) % 4) ? " ":"\n");
}
-
einmalig fuer dich direkt EINE Lösung
for(int a = 0; a < 24; ++a)
{
for(int b = 0; b < 4; ++b)
{
char c = (a+b*24)+32;
printf("%03d %c%s", c, c, b < 4-1 ? " ":"\n");
}
}jetzt fehlt aber noch eine Lösung mit nur 1 for-Schleife
-
#include <stdio.h> int main(void) { int i; int j; int tabelle[24][4]; /* tabelle ist ein Array mit 24*4 (=96) Elementen. Die Bezeichnung geht von [tabelle[0][0] bis tabelle[23][3] */ for(j=32; j<128; j+24) { for(i=1; j>104; i++) { printf("%d %c", tabelle[i][j]); /* Und hier knallt es dann, weil das Element tabelle[1][32] gar nicht existiert und selbst wenn das Element existiert, der Wert darin undefiniert ist. Zudem gibst du bei printf zwei Formatspecifier an, übergibst aber nur einen Wert. */ } return 0; }
-
Danke nochmals für die Hilfe. Das mit einer Schleife ist nicht gefordert aber ich habe ja jetzt genug Zeit mir was zu überlegen und den Code zu verstehen.
-
Warum eigentlich immer so kompliziert?
#include <stdio.h> /*Was sind (128-32)/4?*/ #define TABLE_ROW_DIFF (24) #define MAKE_VALUE(x) x,x #define MAH_LINE ("|=======|=======|=======|=======|\n") int main(void) { char cur=0; /*Tabellenanfang*/ printf(MAH_LINE); /*Wir machen nur 24 Zeilen, mehr brauchen wir nicht.*/ while(cur<TABLE_ROW_DIFF) { /*Und jetzt einfach die 4 Buchstaben ausgeben und dann neue **Zeile.*/ printf("|%03d='%c'|%03d='%c'|%03d='%c'|%03d='%c'|\n", MAKE_VALUE(cur+32 ), MAKE_VALUE(cur+32+TABLE_ROW_DIFF ), MAKE_VALUE(cur+32+TABLE_ROW_DIFF*2), MAKE_VALUE(cur+32+TABLE_ROW_DIFF*3)); ++cur; } /*Tabellenende*/ printf(MAH_LINE); return 0; }
Ausgabe:
|=======|=======|=======|=======| |032=' '|056='8'|080='P'|104='h'| |033='!'|057='9'|081='Q'|105='i'| |034='"'|058=':'|082='R'|106='j'| |035='#'|059=';'|083='S'|107='k'| |036='$'|060='<'|084='T'|108='l'| |037='%'|061='='|085='U'|109='m'| |038='&'|062='>'|086='V'|110='n'| |039='''|063='?'|087='W'|111='o'| |040='('|064='@'|088='X'|112='p'| |041=')'|065='A'|089='Y'|113='q'| |042='*'|066='B'|090='Z'|114='r'| |043='+'|067='C'|091='['|115='s'| |044=','|068='D'|092='\'|116='t'| |045='-'|069='E'|093=']'|117='u'| |046='.'|070='F'|094='^'|118='v'| |047='/'|071='G'|095='_'|119='w'| |048='0'|072='H'|096='`'|120='x'| |049='1'|073='I'|097='a'|121='y'| |050='2'|074='J'|098='b'|122='z'| |051='3'|075='K'|099='c'|123='{'| |052='4'|076='L'|100='d'|124='|'| |053='5'|077='M'|101='e'|125='}'| |054='6'|078='N'|102='f'|126='~'| |055='7'|079='O'|103='g'|127=''| |=======|=======|=======|=======|
Und mach den Code noch ein bisschen kaputter, damit dein Prof auch ja denkt, dass du das warst. Und denk an mich, wenn du eine gute Note einheimst.
-
OK, habs ein wenig verhübst.
#include <stdio.h> #define TABLE_ROW_DIFF ((128-32)/3) #define MAKE_VALUE(x) x,x #define MAH_LINE ("|=======|=======|=======|\n") int main(void) { char cur=0; /*Tabellenanfang*/ printf(MAH_LINE); /*Wir machen 32 Zeilen denn weniger ist sehr häslich.*/ while(cur<TABLE_ROW_DIFF) { /*Und jetzt einfach die 3 Buchstaben ausgeben und dann neue **Zeile.*/ printf("|%03d='%c'|%03d='%c'|%03d='%c'|\n", MAKE_VALUE(cur+32 ), MAKE_VALUE(cur+32+TABLE_ROW_DIFF ), MAKE_VALUE(cur+32+TABLE_ROW_DIFF*2)); ++cur; } /*Tabellenende*/ printf(MAH_LINE); return 0; }
|=======|=======|=======| |032=' '|064='@'|096='`'| |033='!'|065='A'|097='a'| |034='"'|066='B'|098='b'| |035='#'|067='C'|099='c'| |036='$'|068='D'|100='d'| |037='%'|069='E'|101='e'| |038='&'|070='F'|102='f'| |039='''|071='G'|103='g'| |040='('|072='H'|104='h'| |041=')'|073='I'|105='i'| |042='*'|074='J'|106='j'| |043='+'|075='K'|107='k'| |044=','|076='L'|108='l'| |045='-'|077='M'|109='m'| |046='.'|078='N'|110='n'| |047='/'|079='O'|111='o'| |048='0'|080='P'|112='p'| |049='1'|081='Q'|113='q'| |050='2'|082='R'|114='r'| |051='3'|083='S'|115='s'| |052='4'|084='T'|116='t'| |053='5'|085='U'|117='u'| |054='6'|086='V'|118='v'| |055='7'|087='W'|119='w'| |056='8'|088='X'|120='x'| |057='9'|089='Y'|121='y'| |058=':'|090='Z'|122='z'| |059=';'|091='['|123='{'| |060='<'|092='\'|124='|'| |061='='|093=']'|125='}'| |062='>'|094='^'|126='~'| |063='?'|095='_'|127=''| |=======|=======|=======|
-
dachschaden schrieb:
Warum eigentlich immer so kompliziert?
Und denk an mich, wenn du eine gute Note einheimst.Mach ich auf jeden Fall. Danke nochmals an alle, bei der nächsten Übung komme ich hoffentlich mit etwas weniger Hilfe zurecht.