Informatik -- Lehrveranstaltung vom 24.04.2024
(EN google-translate)
(PL google-translate)
Themen
|
1. Arraytypen: int, double, char, char-Ketten
2. Bestimmung der Größe von Arrays
3. Übergabe von Arrays an Funktionen
4. Beispiel Mittelwertbildung
5. Beispiel Farbwörter merken und verwenden
|
Beispiel orientierte Darstellung zum Umgang mit Arrays in C:

#include <iostream> using namespace std; int main(void) { int arr[3]; arr[0]=7; arr[1]=6; arr[2]=5; cout<<"arr[0]="<<arr[0]<<endl; cout<<"arr[1]="<<arr[1]<<endl; cout<<"arr[2]="<<arr[2]<<endl; return 0; } array1.cpp -- Deklaration, Initialisierung und Verwendung eines Integer-Arrays. #include <iostream> using namespace std; int main(void) { int arr[] = {1,2,3}; int anzahl = sizeof(arr)/sizeof(int); for(int i=0;i<anzahl;i++) cout<<"arr["<<i<<"]="<<arr[i]<<endl; return 0; }
Code 0-1: array2.cpp -- Definition (keine Angabe der Größe in eckigen Klammern nötig), Verwendung von sizeof.
|
#include <iostream> using namespace std; double berechneMittelwert(double x[],int anz) { double y = 0.0; for(int i=0;i<anz;i++) y+=x[i]; y/=(double)anz; return y; } void showArray(double x[], int anz) { cout<<"{"; for(int i=0;i<anz;i++) { cout<<x[i]; if(i<anz-1) cout<<","; } cout<<"}"; } int main(void) { double arr[] = {10.0,20.0,30.0,40.0}; int anzahl = sizeof(arr)/sizeof(double); cout<<"arr[]="; showArray(arr,anzahl); cout<<endl<<"Mittelwert="<<berechneMittelwert(arr,anzahl)<<endl; return 0; }
Code 0-2: array3.cpp -- Verwendung von Funktionen und Arrays: Mittelwertbildung / Ausgabe eines Arrays.
#include <iostream> #include <string.h> using namespace std; #define ANZAHLFARBEN 4 #define MAXZEICHEN 20 int main(void) { char farbe[ANZAHLFARBEN][MAXZEICHEN] = {"schwarz","braun","rot","orange"}; char wort[] = "Hallo"; int anz = sizeof(wort); for(int i=0;i<anz;i++) cout<<"wort["<<i<<"]="<<wort[i]<<" (int)wort["<<i<<"]="<<(int)wort[i]<<endl; for(int i=0;i<ANZAHLFARBEN;i++) { for(int k=0;k<MAXZEICHEN;k++) { if(farbe[i][k]==' ') break; cout<<farbe[i][k]; } if(strcmp(farbe[i],"rot")==0) cout<<" ROT GEFUNDEN! "; cout<<"."<<endl; } return 0; }
Code 0-3: array4.cpp
linux@Xubuntu2004:~/PLANUNG_YSOSE2024/INFORMATIK1/Arrays$ g++ -o array4 array4.cpp linux@Xubuntu2004:~/PLANUNG_YSOSE2024/INFORMATIK1/Arrays$ ./array4 wort[0]=H (int)wort[0]=72 wort[1]=a (int)wort[1]=97 wort[2]=l (int)wort[2]=108 wort[3]=l (int)wort[3]=108 wort[4]=o (int)wort[4]=111 wort[5]= (int)wort[5]=0 schwarz. braun. rot ROT GEFUNDEN! . orange. linux@Xubuntu2004:~/PLANUNG_YSOSE2024/INFORMATIK1/Arrays$
Code 0-4: Terminalausgabe zu array4.cpp
Anmerkungen zu array4.cpp:
|
6. Java und C++


7. Java / Processing: Widerstandwert aus Widerstandscode

Bild 0-1: Screenshot zum Processing-Sketch "Widerstandswert"
int[][] farbe = { {0,0,0}, //0 schwarz {188,96,0}, //1 braun {255,0,0}, //2 rot {255,165,0}, //3 orange {255,255,0}, //4 gelb {0,255,0}, //5 grün {0,0,255}, //6 blau {238,130,238}, //7 violett {127,127,127}, //8 grau {255,255,255} //9 weiss }; public void setup() { size(640,480); frameRate(30); } int INDEX=0; int[] CODE = new int[3]; int WERT=0; public void draw() { background(255); float dx = width/(float)farbe.length; noStroke(); for(int i=0;i<farbe.length;i++) { fill(farbe[i][0],farbe[i][1],farbe[i][2]); rect(dx*(float)i,0,dx,height/2); } textSize(30); textAlign(CENTER); if(INDEX==3) { fill(0); text(WERT+"Ohm",width/2,height/2+height/4); for(int i=0;i<CODE.length;i++) { fill(farbe[CODE[i]][0],farbe[CODE[i]][1],farbe[CODE[i]][2]); rect(i*(width/3),height-height/8,width/3,height/8); } } else { for(int i=0;i<INDEX;i++) { fill(farbe[CODE[i]][0],farbe[CODE[i]][1],farbe[CODE[i]][2]); rect(i*(width/3),height-height/8,width/3,height/8); } } } public void mouseClicked() { if(INDEX>2) INDEX=0; float dx = width/(float)farbe.length; if(mouseY<height/2) { CODE[INDEX] = (int)(mouseX/dx); } if(INDEX==2) { WERT = (CODE[0]*10 + CODE[1]); for(int i=0;i<CODE[2];i++) WERT*=10; } INDEX++; }
Code 0-5: Processing-Sketch "Widerstandswert".
8. Java und Objektorientierte Programmierung
|
9. Übungsaufgaben 5
Kleine Aufgaben zu Arrays und Schleifen in C
Aufgabe 5.1
Kompilieren und testen Sie folgenden Quelltext:
#include <iostream> using namespace std; int main(void) { int x[10]; for(int i=0;i<10;i++) cout<<x[i]<<endl; return 0; }
Code 0-6: ue1.cpp
|
Aufgabe 5.2
Kompilieren und testen Sie folgenden Quelltext:
#include <iostream> using namespace std; int main(void) { double messwerte[]={1.0,2.4,3.8,4.0}; double mittelwert = 0.0; for(int i=0;i<4;i++) mittelwert=mittelwert+messwerte[i]; mittelwert=mittelwert/4.0; cout<<"mittelwert="<<mittelwert<<endl; return 0; }
Code 0-7: ue2.cpp
|
Aufgabe 5.3
|
Analysieren, kompilieren und testen Sie folgenden Quelltext:
#include <iostream> using namespace std; double bestimmeHaeufigkeitE(char satz[]) { int anzahlE=0; char c; int index=0; do { c=satz[index++]; if(c=='e') anzahlE++; else if(c=='E') anzahlE++; } while(c!=' '); return anzahlE; } int main(void) { char texte[][100] = { "Das ist ein Satz.", "Das ist ein weiterer Satz.", "Dieser Satz ist relativ lang." }; int anzahlTexte = sizeof(texte)/sizeof(texte[0]); for(int i=0;i<anzahlTexte;i++) cout<<texte[i]<<" ... hat "<<bestimmeHaeufigkeitE(texte[i])<<" E(s)."<<endl; return 0; }
Code 0-8: ue3.cpp
|
Musterlösung zu Aufgabe 5.3:
#include <iostream> using namespace std; double bestimmeHaeufigkeitEinProzent(char satz[]) { int anzahlE=0; char c; int index=0; int anzahlLeerzeichen=0; do { c=satz[index++]; if(c==' ') anzahlLeerzeichen++; if(c=='e') anzahlE++; else if(c=='E') anzahlE++; } while(c!=0); //cout<<"Index hat den Wert: "<<index<<endl; //TESTAUSGABE double prozent = 100.0*(double)anzahlE/(double)(index-1-anzahlLeerzeichen); return prozent; } int main(void) { char texte[][100] = { "Das ist ein Satz.", "Das ist ein weiterer Satz.", "Dieser Satz ist relativ lang." }; int anzahlTexte = sizeof(texte)/sizeof(texte[0]); for(int i=0;i<anzahlTexte;i++) { double p = bestimmeHaeufigkeitEinProzent(texte[i]); cout<<texte[i]<<" ... hat anteilig "<<p<<"% E(s)."<<endl; } return 0; }
Code 0-9: Musterlösung zu Aufgabe 5.3.
Musterlösung zu Aufgabe 5.3b -- Programm, das nach verschiedenen Buchstaben suchen kann.
#include <iostream> using namespace std; double bestimmeHaeufigkeit(char satz[], char suchbuchstabe) { int anzahl=0; char c; int index=0; do { c=satz[index++]; if(c==suchbuchstabe) anzahl++; } while(c!=0); return anzahl; } int main(void) { char texte[][100] = { "Das ist ein Satz.", "Das ist ein weiterer Satz.", "Dieser Satz ist relativ lang." }; int anzahlTexte = sizeof(texte)/sizeof(texte[0]); for(int i=0;i<anzahlTexte;i++) { cout<<texte[i]<<" ... hat "<<bestimmeHaeufigkeit(texte[i],'e')<<" e(s)."<<endl; cout<<texte[i]<<" ... hat "<<bestimmeHaeufigkeit(texte[i],'i')<<" i(s)."<<endl; } return 0; }
Code 0-10: Musterlösung zu Aufgabe 5.3b -- Programm, das nach verschiedenen Buchstaben suchen kann.
Aufgabe 5.4
|
#include <iostream> using namespace std; int main(void) { int a=0; int b=0; int c=0; int d=0; cout<<"der erste Ring: braun=1; rot=2; orange=3; gelb=4; grün=5; blau=6; violett=7; grau=8; weiß=9"<<endl; cin>>a; cout<<"der 2. Ring: schwarz=0; braun=1; rot=2; orange=3; gelb=4; grün=5; blau=6; violett=7; grau=8; weiß=9"<<endl; cin>>b; cout<<"der 3. Ring: schwarz= *1; braun= *10; rot= *100; orange= *1000; gelb= *10000; grün= *100000; blau= *1000000; violett"<<endl; cin>>c; d=a*10 + b; int potenz = 1; for(int i=0;i<c;i++) potenz*=10; d = d*potenz; cout<<"der Widerstand ist: "<<d<<endl; return 0; }
Code 0-11: Vorläufige Lösung mit der Eingabe der Farben als Code.
Aufgabe 5.5
|
Aufgabe 5.6: Einführende Übung zu Processing
public void setup() { size(200,100); frameRate(60); } int x=0; public void draw() { background(0,0,255); fill(255,0,0); noStroke(); ellipse(x,height/2,50,50); x++; x%=(int)width; }
Code 0-12: Processing Sketch ue6
|