Aufgabe für Schleifen in C |
Butterblume
Grünschnabel
Dabei seit: 19.04.2020
Beiträge: 7
![](images/spacer.gif) |
|
Aufgabe für Schleifen in C |
![Zum Anfang der Seite springen Zum Anfang der Seite springen](images/goup.gif) |
a-Die Aufgabenstellung ist: Man soll den Benutzer 10 ganze Zahlen eingeben lassen.
b-Direkt danach sollen die eingegebenen Zahlen (quasi als Kontrollausgabe) wieder ausgegeben werden.
c-Es soll sowohl das Maximum als auch das Minimum ermittelt werden.
Dieses soll dann bei der Kontrollausgabe kenntlich gemacht werden.
d-Danach soll die Summe der Zahlen ermittelt werden.
e-Zum Schluss soll der Durchschnitt ausgegeben werden.
z.B. so:
Bitte geben Sie 10 ganze Zahlen ein.
Die 1. Zahl ist: 3
Die 2. Zahl ist: 5
Die 3. Zahl ist: -4
....
....
Die 10. Zahl ist: 12
Die 1. Zahl war 3
Die 2. Zahl war 5
Die 3. Zahl war -4 <---ist das Minimum
.....
Die 10. Zahl war 12<---ist das Maximum
Die Summe der Zahlen ist 21
Der Durchschnitt ist 2.1
Jeder Teil ist für sich genommen nicht so schwer - nur alles zusammen zu bringen,
macht mich ratlos.
Also einen Teil kann ich problemlos lösen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
#include <stdio.h>
int ()
{
double schnitt = 0;
int max = 0, min = 0, summe = 0, i = 0, zahl = 0;
printf("Bitte geben Sie eine ganze Zahl ein\n");
for(i = 1; i < 11; i = i + 1)
{
printf("Die %d. Zahl: ", i);
scanf("%d", &zahl);
summe = summe + zahl;
}
schnitt = (summe*1.) /10;
printf("Die Summe der Zahlen ist %d\n", summe);
printf("Der Durchschnitt lautet %.1f\n", schnitt);
return 0;
} |
|
Damit habe ich
a-
d-
und e-
gelöst.
Nur wie kann ich die Kontrollausgabe lösen??
Denn ich müsste ja irgendwo
jede Eingabe des Nutzer speichern
Und - wie gesagt - ich darf nur Schleifen und if/else benutzen.
Ich wäre für einen Lösungsansatz oder eine Idee sehr dankbar!
|
|
27.05.2020 20:50 |
|
|
as_string
Haudegen
![](images/star2.gif) ![](images/star2.gif) ![](images/star2.gif)
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
![](images/spacer.gif) |
|
Du kannst ein Array verwenden und darin die Zahlen zwischenspeichern.
Um das Minimum und Maximum zu bestimmen, initialisiere bei Eingabe der ersten Zahl beide Variablen mit der ersten Zahl. Danach aktualisiere das Minimum nur, wenn eine kleinere Zahl als das bisherige Minimum kommt, das Maximum nur, wenn eine größere Zahl kommt.
Alternativ kannst Du auch vor der Schleife das Maximum auf den kleinstmöglichen Wert für eine Integer-Zahl setzen (da gibt es normalerweise ein Macro INT_MIN dafür) und das Minimum auf den größtmöglichen Wert (INT_MAX). Dafür brauchst Du aber die Header-Datei limits.h
Kannst Du das mal probieren?
Noch ein paar Anmerkungen: Es ist zwar nicht falsch, aber in c lässt man Schleifen-Indizes häufig von 0 los laufen. Das liegt daran, dass die Array-Indizes auch bei 0 anfangen.
Außerdem kann man i = i + 1 in C mit i++ abkürzen, was auch häufig verwendet wird.
Man würde also eher
php: |
1:
2:
3:
4:
|
for (i = 0; i < 10; i++) {
printf("Die %d. Zahl: ", i+1);
...;
} |
|
schreiben. Da i jetzt von 0 bis 9 läuft, brauchst Du für die Anzeige dieses "+1". Aber wenn Du ein Array verwenden musst, dann wird das wieder einfacher.
Gruß
Marco
|
|
27.05.2020 22:07 |
|
|
Butterblume
Grünschnabel
Dabei seit: 19.04.2020
Beiträge: 7
![](images/spacer.gif) |
|
vielen Dank für deine Hinweise.
Nur leider darf ich keine anderen Anweisungen verwenden als for, while , do-while. bzw if/ else.
Deswegen darf ich keine arrays verwenden.
|
|
27.05.2020 23:01 |
|
|
as_string
Haudegen
![](images/star2.gif) ![](images/star2.gif) ![](images/star2.gif)
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
![](images/spacer.gif) |
|
Arrays sind doch keine "Anweisungen". Du darfst ja auch Variablen verwenden. Wieso dann keine Arrays?
Wenn Du keine Arrays hast, kannst Du das nicht wieder ausgeben. Du schreibst ja schon richtig, dass Du die Werte irgendwo speichern müsstest.
Gruß
Marco
|
|
27.05.2020 23:32 |
|
|
Butterblume
Grünschnabel
Dabei seit: 19.04.2020
Beiträge: 7
![](images/spacer.gif) |
|
Wir haben Arrays noch nicht besprochen. Ich bin noch ziemlich am Anfang des Studiums.
Ja.."Anweisungen" ist nicht passend.
Ich soll die Aufgabe nur mit Schleifen oder Kontrollstrukturen lösen.
Ich dachte schon, einfach zusätzlich 10 Variable zu deklarieren, um bei jedem Durchlauf dann eine zu benutzen...ob das sinnvoll ist, weiß ich nicht.
|
|
28.05.2020 00:57 |
|
|
as_string
Haudegen
![](images/star2.gif) ![](images/star2.gif) ![](images/star2.gif)
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
![](images/spacer.gif) |
|
Bist Du sicher, dass das irgendeinen Sinn macht? Dann brauchst Du auch erst gar keine Schleife machen, sondern kannst gleich das printf/scanf schreiben mit zahl1, dann mit zahl2, etc. Dann sparst Du wenigstens diese riesigen if-else if-else if-else if-else if-etc. Blöcke.
Ich hatte gestern das mal selbst (mit Array) programmiert. Allerdings komme ich leider gerade nicht dran, ist auf dem anderen Rechner. Da habe ich mir bei der Eingabe nicht nur die Maximum und Minimum-Werte gemerkt, sondern auch gleich noch den Index, wo ich den gefunden habe. Dann habe ich bei der Ausgabe kein Newline (also "\n") angehängt erstmal, sondern erst mit if geschaut, ob es Maximum und/oder Minimum ist (es könnte beides sein, wenn alle Eingabewerte gleich sind). Dementsprechend hab ich dann die Ausgabe für Min/Max gemacht, die dann ja in derselben Zeile erscheint. Danach erst habe ich nur ein printf("\n"); gemacht.
Die Frage ist jedoch, ob das mit dem Index-merken überhaupt nötig ist. Wenn Du das Minimum/Maximum kennst, kannst Du ja auch direkt die Zahl damit vergleichen. Angenommen jemand gibt nur Einsen ein, dann wären ja alle Eingabewerte sowohl Minimum als auch Maximum. Bei mir würde nur der erste Wert als Min/Max benannt werden, weil ich mir nur einen Index merke.
Gruß
Marco
|
|
28.05.2020 14:01 |
|
|
Butterblume
Grünschnabel
Dabei seit: 19.04.2020
Beiträge: 7
![](images/spacer.gif) |
|
Das ist der "PÄDAGOGISCHE" Ansatz meines Dozenten. Wir hatten davor auch eine Aufgabenstellung, die man normalerweise mit Schleifen lösen müsste. Und wir mussten es mit if/else lösen, was zu einem monströsen grauenvollen Apparat geführt hat...ich war da schon am verzweifeln.
Ja er will das so....vielleicht dient es auch nur zur Abschreckung, keine Ahnung.
Es ist unsinnig, denn wenn man 100 Zahlen eingeben sollte, müsste man dann 100 Variablen definieren???
Er will eben haben, dass man mit unzureichenden Mitteln irgendwie diese Aufgabenstellung löst.
LEIDER
ps
Man sollte dort jemanden Auffordern eine Zahl einzugeben, die entweder eine ganze oder eine Kommazahl sein sollte. Dann sollte man die Zahl wieder ausgeben....aber eben mit der genauen Nachkommastelle!!!!
Erlaubt war nur IF !
Programmier das mal, das ist schlimm. Einzig, dass man bei 4 Nachkommastellen runden durfte (also nicht noch weitere Nachkommastellen ausgeben musste) Musterlösungen gibt s nicht...die findet er doof.
Wer also nicht auf die Lösung kommt, kann es sonstwo suchen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Butterblume: 28.05.2020 15:07.
|
|
28.05.2020 15:02 |
|
|
as_string
Haudegen
![](images/star2.gif) ![](images/star2.gif) ![](images/star2.gif)
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
![](images/spacer.gif) |
|
Ich hab mal hier meinen Vorschlag (mit Array und Schleife...)
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
|
#include <stdio.h>
#include <limits.h>
int main() {
double schnitt = 0;
int max = INT_MIN, min = INT_MAX, summe = 0, i = 0;
int zahlen[10];
printf("Bitte geben Sie eine ganze Zahl ein\n");
for(i = 0; i < 10; i++) {
printf("Die %d. Zahl: ", i+1);
scanf("%d", &zahlen[i]);
summe = summe + zahlen[i];
if (zahlen[i] > max) {
max = zahlen[i];
}
if (zahlen[i] < min) {
min = zahlen[i];
}
}
for (i = 0; i < 10; i++) {
printf("Die %d. Zahl ist: %d", i+1, zahlen[i]);
if (zahlen[i] == min)
printf(" <--- Minimum");
if (zahlen[i] == max)
printf(" <--- Maximum");
printf("\n");
}
schnitt = (summe*1.) /10.;
printf("Die Summe der Zahlen ist %d\n", summe);
printf("Der Durchschnitt lautet %.1f\n", schnitt);
printf("Das Minimum ist %d und das Maximum %d\n", min, max);
return 0;
} |
|
Gruß
Marco
|
|
28.05.2020 19:31 |
|
|
|