Inhalte zur Vorlesungswoche #5, Informatik 1 im Wintersemester 2024/25
(EN google-translate)
(PL google-translate)
Themen
|
1 Umsetzung zu Berechnung und Ausgabe der Zweierpotenzen 2^0 bis 2^7 (Aufgabe 2 29.10.)
#include <iostream>
using namespace std;
int main(void)
{
int x = 1;
for(int i=0;i<8;i++)
{
cout<<"2^"<<i<<"="<<x<<endl;
x=x*2;
}
return 0;
}
Code 0-1: Zeierpotenzen, beispielhafte Umsetzung als Algorithmus.
2 Aufsummieren der Folge ganzer Zahlen mit Schleife und mit der Gausformel (Aufgabe 2 vom 07.11.)
$ \sum 1..n= \frac {n \cdot \left(n+1\right)}{2} $
Formel 0-1: Gausssche Summenformel.
#include <iostream>
using namespace std;
int main(void)
{
int n;
cout<<"Geben Sie an, wieviele Zahlen addiert werden sollen:";
cin>>n;
int y=0;
int z=0;
for(int i=1;i<=n;i++)
{
y=y+i;
}
z = n*(n+1)/2;
cout<<"Ergebnis algorithmisch: "<<y<<" Erg. nach Gaussformel: "<<z<<endl;
return 0;
}
Code 0-2: Umsetzung mit C/C++.
#include <iostream>
using namespace std;
int summe1(int n)
{
int a=0;
for(int i=1;i<=n;i++)
{
a=a+i;
}
return a;
}
int summe2(int n)
{
return n*(n+1)/2;
}
int main(void)
{
int n;
cout<<"Geben Sie an, wieviele Zahlen addiert werden sollen:";
cin>>n;
int y=0;
int z=0;
y = summe1(n);
z = summe2(n);
cout<<"Ergebnis algorithmisch: "<<y<<" Erg. nach Gaussformel: "<<z<<endl;
return 0;
}
Code 0-3: Arbeiten mit Funktionen.
3 Einführung von Funktionen am Beispiel der Gaussformel
#include <iostream>
using namespace std;
int f(int x)
{
return x*x;
}
int main(void)
{
cout<<"f(3)="<<f(3)<<endl;
int z=7;
int u=f(z);
cout<<"f("<<z<<")="<<u<<endl;
return 0;
}
Code 0-4: Vorstufe: Parabel.
|
4 Einführung von Algorithmen am Beispiel des Siebs des Eratosthenes
10_Informatik1/05_Softwareentwicklung/02_Algorithmen
#include <iostream>
using namespace std;
int main(void)
{
int n;
//1. Intervall 2..n als Array:
cout<<"Bis zu welcher Zahl sollen die Primzahlen gesucht werden?:"<<endl;
cin>>n;
int intervall[n-1];
for(int i=0;i<n-1;i++)
{
intervall[i] = i+2;
}
//2. Algorithmus
for(int i=0;i<n-1;i++)
{
if(intervall[i]!=0) //...dann ist es die nächste Primzahl
{
cout<<intervall[i]<<" ";
//alle Zahlen dahinter durchgehen und ganzzahlige Vielfache durchstreichen:
for(int k=i+1;k<n-1;k++)
{
if(intervall[k]%intervall[i]==0)
{
intervall[k]=0;
}
}
}
}
return 0;
}
Code 0-5: Umsetzung.
Umsetzung mit Funktiuon mit Call by Reference
#include <iostream>
using namespace std;
void sieb(int intervall[], int n)
{
for(int i=0;i<n-1;i++)
{
intervall[i] = i+2;
}
//2. Algorithmus
for(int i=0;i<n-1;i++)
{
if(intervall[i]!=0) //...dann ist es die nächste Primzahl
{
// cout<<intervall[i]<<" ";
//alle Zahlen dahinter durchgehen und ganzzahlige Vielfache durchstreichen:
for(int k=i+1;k<n-1;k++)
{
if(intervall[k]%intervall[i]==0)
{
intervall[k]=0;
}
}
}
}
}
int main(void)
{
int n;
//1. Intervall 2..n als Array:
cout<<"Bis zu welcher Zahl sollen die Primzahlen gesucht werden?:"<<endl;
cin>>n;
int intervall[n-1];
sieb(intervall,n);
for(int i=0;i<n-1;i++)
{
if(intervall[i]>0)
{
cout<<intervall[i]<<" ";
}
}
return 0;
}
Code 0-6: Umsetzung mit Funktiuon mit Call by Reference.
ÜBUNG 14.11.2024, siehe Moodle!
Umgang mit chatGPT: Aufgabe 1 in mehreren Schritten mit Hilfe von chatGPT gelöst:
|
Hallo chatGPT.
Hier ist ein Hello World Programm in C++:
#include <iostream>
using namespace std;
int main(void)
{
cout<<endl<<"Hello world!"<<endl<<endl;
return 0;
}
Ergänze bitte, dass eine ganze Zahl x eingegeben werden kann und dann wieder ausgegeben wird.
Prima! Kannst Du das bitte so mit Einrückungen immer formatieren:
#include <iostream>
using namespace std;
int main(void)
{
cout << endl << "Hello world!" << endl << endl;
int x; // Deklaration der Variablen x
cout << "Bitte geben Sie eine ganze Zahl ein: "; // Aufforderung zur Eingabe
cin >> x; // Eingabe der Zahl
cout << "Sie haben die Zahl " << x << " eingegeben." << endl; // Ausgabe der Zahl
return 0;
}
Kannst Du das Programm nun so ändern, dass solange Zahlen eingegeben werden können,
bis die Zahl 0 eingegeben wird.
Außerdem soll am Ende ohne Verwendung besonderer Funktionen der Mittelwert der eingegebenen Zahlen berechnet werden.
Prima! Kannst Du mir Dein Programm aber so formatieren, dass immer nur
eine geschweifte Klammer allein ein einer Zeile stehht und
alles innerhalb einer geschweiften Klammer um vier Leerzeichen eingerückt wird?
#include <iostream>
using namespace std;
int main(void)
{
cout << endl << "Hello world!" << endl << endl;
int x; // Deklaration der Variablen x
int sum = 0; // Variable zur Speicherung der Summe
int count = 0; // Zähler für die Anzahl der eingegebenen Zahlen
cout << "Bitte geben Sie eine ganze Zahl ein (0 zum Beenden): "; // Aufforderung zur Eingabe
cin >> x; // Eingabe der Zahl
while (x != 0) // Solange die Zahl nicht 0 ist
{
sum += x; // Zur Summe hinzufügen
count++; // Zähler erhöhen
cout << "Sie haben die Zahl " << x << " eingegeben." << endl; // Ausgabe der Zahl
cout << "Bitte geben Sie eine ganze Zahl ein (0 zum Beenden): "; // Aufforderung zur nächsten Eingabe
cin >> x; // Eingabe der nächsten Zahl
}
if (count > 0) // Überprüfen, ob mindestens eine Zahl eingegeben wurde
{
double average = static_cast<double>(sum) / count; // Berechnung des Mittelwerts
cout << "Der Mittelwert der eingegebenen Zahlen ist: " << average << endl; // Ausgabe des Mittelwerts
}
else
{
cout << "Es wurden keine Zahlen eingegeben." << endl; // Hinweis, wenn keine Zahlen eingegeben wurden
}
return 0;
}
Code 0-7: Dialog mit chatGPT
Besondere studentische Lösung zu Aufgabe 1:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> zahlenReihe;
int zahl;
int summe = 0;
int anzahl = 0;
int durchschnitt;
cout << "Geben Sie ganze Zahlen ein. Geben Sie einen Buchstaben ein, um zu beenden." << endl;
while (cout << "Zahl eingeben: " && cin >> zahl)
{
summe = summe + zahl;
anzahl += 1;
}
cout << "summe: " << summe << endl;
durchschnitt = summe / anzahl;
cout << "durchschnitt: " << durchschnitt << endl;
}
Code 0-8: Besondere studentische Lösung zu Aufgabe 1.
Musterlösung zu Aufgabe 1
#include <iostream>
using namespace std;
int main()
{
int zahl;
int summe = 0;
int anzahl = 0;
double durchschnitt;
cout << "Geben Sie ganze Zahlen ein. Geben Sie Null ein, um zu beenden." << endl;
do
{
cin>>zahl;
summe = summe + zahl;
anzahl += 1;
} while(zahl>0);
anzahl--; //weil die Null mitgezählt wurde.
cout << "summe: " << summe << endl;
durchschnitt = (double)summe / (double)anzahl;
cout << "durchschnitt: " << durchschnitt << endl;
}
Code 0-9: Musterlösung Aufgabe 1.
Studentische Lösung zu Aufgabe 2 (Zahlenspiel)
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void Zahlenspiel()
{
int Zufall, Geraten, Versuche=3;
char Wiederholen;
srand(static_cast<unsigned int>(time(0)));
Zufall = rand() %15+1;
cout <<"******* EIN ZAHLENSPIEL ********"<< endl;
cout <<"******* Zahl zwischen 1 und 15!"<<endl;
cout << "Sie haben "<<Versuche<< " Versuche!"<<endl;
for(int i=1; i<=Versuche; i++)
{
cout << i<< " .Versuch";
cin>> Geraten;
if(Geraten<Zufall)
{
cout<<"zu klein"<<endl;
}
else if(Geraten>Zufall)
{
cout<<"zu groß"<<endl;
}
else
{
cout<<"Gewonnen!!! Die gesuchte Zahl lautet: "<<Zufall<<endl;
break;
}
if(i==Versuche)
{
cout<<"Verloren! Die gesuchte Zahl war:" << Zufall<<endl;
}
}
cout << "Wiederholen ----> <j> Beenden ----> <n>"<< endl;
cin>> Wiederholen;
if(Wiederholen=='j' || Wiederholen=='J')
{
Zahlenspiel();
}
else
{
cout<<"Spiel beendet"<<endl;
}
}
int main()
{
Zahlenspiel();
return 0;
}
Code 0-10: Studentische Lösung zu Aufgabe 2 (Zahlenspiel)
Studentische Lösung zu Aufgabe 3 (Sternchenzeilen)
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "Bitte n eingeben : ";
cin >> n;
for (int i = 1; i <= n; i++)
{
// Innere Schleife: Drucken von '*' entsprechend dem aktuellen Wert von i
for (int a = 1; a <= i; a++)
{
cout << '*';
}
// Zeilenumbruch nach jeder Zeile
cout << endl;
}
return 0;
}
Code 0-11: Studentische Lösung zu Aufgabe 3 (Sternchenzeilen)