Arbeiten mit Zeichen

Schnelle objektorientierte, kompilierende Programmiersprache.
schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Arbeiten mit Zeichen

Beitrag von schlafmütze » So Mär 29, 2009 2:52 pm

Code: Alles auswählen

#include<stdio.h>

int main()
{
  int i, j;
  char ch;
   for(i=0; i<16; i++)
   {
     for(j=0; j<8; j++)
     {
       ch = i + 16*j;
       if (ch >= 32 && ch <=126)
          printf(" %X %c", ch, ch);
       else
          printf(" %X %c", ch,' ');
     }
     printf("\n");
    }
    return 0;
}
Hallo Proggen.org

Ich komm leider bei einen Beispiel wieder nicht weiter , sicherlich wird das Programm einfach zu verstehen aber ein Neuling wie ich müsse ich wohl noch Erfahrung sammeln müssen.

Ich habe mit der Zeile

Code: Alles auswählen

ch = i + 16*j;
Probleme.
Wieso wird da gerade mit J multipliziert die Zeile könnte doch so aussehen

Code: Alles auswählen

ch = i + 16*j+8;
Es scheint aber irgendwie nicht zu funktionieren oder habe ich die Zeile völlig falsch verstanden ?
Wenn ja bitte ich sehr gerne um Erklärung.

mfg schlafmütze

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Arbeiten mit Zeichen

Beitrag von cloidnerux » So Mär 29, 2009 3:14 pm

Es wäre gut zu wissen aus welchem Tutorium dieses stück code stammt, da er offensichtlich nciht von dir stammt.
In der zeile:

Code: Alles auswählen

ch = i + 16*j;
Wird einfach nur ch der wert i + einem vielfachen von 16 zugewiesen und wenn das dann einem bestimmten bedinung entspricht ausgegeben um irgendwas zu zeigen.
Für mcih soll dieses beispiel einfach nur zeigen, das ein char auch nur ein Integer ist, der aber als zeichen behandelt werden kann.
Also das folgende zwei zuweisungen erlaubt wären:

Code: Alles auswählen

char c='A';
c=10;
Redundanz macht wiederholen unnötig.
quod erat expectandum

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Arbeiten mit Zeichen

Beitrag von schlafmütze » So Mär 29, 2009 3:19 pm

Das mit i+16 ist mir klar aber wieso gerade mit J multiplizieren wofür dient es.
Ich zerbreche mir die ganz Zeit nur wegen ein Buchstaben J den Kopf und man kann es bestimmt anders schreiben.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Arbeiten mit Zeichen

Beitrag von cloidnerux » So Mär 29, 2009 3:24 pm

Das mit i+16 ist mir klar aber wieso gerade mit J multiplizieren wofür dient es.
Ich zerbreche mir die ganz Zeit nur wegen ein Buchstaben J den Kopf und man kann es bestimmt anders schreiben.
Es wurde mit j multiplizioert weil dieser nach i kommt.
J ist eine Variable und kein Zeichen. hast du dein programm mal compiliert und getestet was dir angezeigt wird?
Warscheinlcih wurde einfach nur damit multipliziert um einen lustigen effekt zu erreichen
Und nochmal: Woher kommt der code und im wlechen zusammenahng steht er?
Redundanz macht wiederholen unnötig.
quod erat expectandum

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Arbeiten mit Zeichen

Beitrag von schlafmütze » So Mär 29, 2009 3:32 pm

Der Code stammt von das Buch Softwaretechnik in C und C++ - Das Kompendium: Modulare, objektorientierte und generische Programmierung.
Das Programm soll das Arbeiten mit Zeichen demonstrieren.

Das Programm soll die Tabelle der ASCII Zeichen erzeugen

Code: Alles auswählen

 0   10   20   30 0 40 @ 50 P 60 ` 70 p
 1   11   21 ! 31 1 41 A 51 Q 61 a 71 q
 2   12   22 " 32 2 42 B 52 R 62 b 72 r
 3   13   23 # 33 3 43 C 53 S 63 c 73 s
 4   14   24 $ 34 4 44 D 54 T 64 d 74 t
 5   15   25 % 35 5 45 E 55 U 65 e 75 u
 6   16   26 & 36 6 46 F 56 V 66 f 76 v
 7   17   27 ' 37 7 47 G 57 W 67 g 77 w
 8   18   28 ( 38 8 48 H 58 X 68 h 78 x
 9   19   29 ) 39 9 49 I 59 Y 69 i 79 y
 A   1A   2A * 3A : 4A J 5A Z 6A j 7A z
 B   1B   2B + 3B ; 4B K 5B [ 6B k 7B {
 C   1C   2C , 3C < 4C L 5C \ 6C l 7C |
 D   1D   2D - 3D = 4D M 5D ] 6D m 7D }
 E   1E   2E . 3E > 4E N 5E ^ 6E n 7E ~
 F   1F   2F / 3F ? 4F O 5F _ 6F o 7F  

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Arbeiten mit Zeichen

Beitrag von nufan » So Mär 29, 2009 3:54 pm

Das liegt daran, dass du 16 Zeilen hast. Du kannst nur von Links nach Rechts schreiben.
Also kommt nach dem 0. Zeichen das 0+16. Zeichen, sprich das erste Zeichen der zweiten Spalte.
Danach das 0+32 Zeichen, also das erste Zeichen der zweiten Spalte.
Wenn du die erste Zeile durch hast, wird i erhöht. also werden immer die zweiten Zeichen der jeweiligen Spalten ausgegeben.
i gibt die Zeile, j die Spalte an.
Verständlich?

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Arbeiten mit Zeichen

Beitrag von schlafmütze » So Mär 29, 2009 3:59 pm

irgendwie verstehe ich das immer noch nicht. :oops: :roll: :? :shock: :( :cry:

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: Arbeiten mit Zeichen

Beitrag von hackmack » So Mär 29, 2009 4:03 pm

Schreibst du:

Code: Alles auswählen

ch = i + 16*j+8;
wird da, wo eig. das 1. Zeichen ausgegeben werden sollte, dass 8 ausgegeben. Da der Algorithmus bis zum 128 Zeichen zählt (wo auch die ASCII Zeichentabelle zu Ende ist) und du addierst nochmal 8 Zeichen, zeigt du ein Zeichen an, welches nicht existiert und das geht schiff.


schlafmütze hat geschrieben: Das mit i+16 ist mir klar aber wieso gerade mit J multiplizieren wofür dient es.
Schau dir mal die Wikipedia-Tabelle an: http://de.wikipedia.org/wiki/ASCII#Zusammensetzung

Dein Code geht diese Wikipediatabelle von recht nach links durch, dein Code zeigt diese aber der Reihenfolge nach untereinander an (schreiben tut das Programm aber eigentlich "nebeneinander"). Um bei deiner Programm die erste Zeile anzuzeigen, müssen also zuerst das Zeichen mit dem Zeichencode 1 ausgegeben werden, danach 16, danach 32, usw. Die Zeile wird in der innersten Schleife ausgegeben, wobei immer nur j inkrementiert wird. Also wird zu der Anzahl der Spalte in der du dich gerade befindest, die Anzahl der Zeilen * 16 (da ja in jeder Zeile 16 Buchstaben sind) addiert. Somit erreicht du, dass wenn du j inkrementierst, dass um 16 höhere anzeigt. Um die nächste Zeile anzuzeigen, wird i um eins erhöht, und die j Schleife beginnt von vorne.

Code: Alles auswählen

i + 16*j
Hoffe es war verständlich.

Mfg.

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Arbeiten mit Zeichen

Beitrag von schlafmütze » So Mär 29, 2009 4:58 pm

Ich denke punkt vor strichrechnung.
Erst wird doch durchgeführt und nicht

Code: Alles auswählen

i + 16
oder :?: :?: :?:
Ich vermute die auch die Variable J verändert sich immer und durch die diese zeile

Code: Alles auswählen

if (ch >= 32 && ch <=126
)

darf es sich weniger als 32 und nicht mehr als 126 oder täusche ich mich ? :lol:

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Arbeiten mit Zeichen

Beitrag von cloidnerux » So Mär 29, 2009 5:07 pm

Code: Alles auswählen

    if (ch >= 32 && ch <=126

)
darf es sich weniger als 32 und nicht mehr als 126 oder täusche ich mich ? :lol:
mehr als 31(>=) und weniger asl 127(<=).
Und ja, Punkt vor strichrechnung, also steht j für die reihen.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten