Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Aufgabe für Schleifen in C » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Aufgabe für Schleifen in C
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Butterblume
Grünschnabel


Dabei seit: 19.04.2020
Beiträge: 7

Aufgabe für Schleifen in C Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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. geschockt
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 0min 0summe 00zahl 0;
      printf("Bitte geben Sie eine ganze Zahl ein\n");
      for(1111)
      {
            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?? unglücklich 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! Daumen hoch
27.05.2020 20:50 Butterblume ist offline Beiträge von Butterblume suchen Nehmen Sie Butterblume in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 (010i++) {
    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 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Butterblume
Grünschnabel


Dabei seit: 19.04.2020
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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. unglücklich
27.05.2020 23:01 Butterblume ist offline Beiträge von Butterblume suchen Nehmen Sie Butterblume in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Butterblume
Grünschnabel


Dabei seit: 19.04.2020
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Butterblume ist offline Beiträge von Butterblume suchen Nehmen Sie Butterblume in Ihre Freundesliste auf
Butterblume
Grünschnabel


Dabei seit: 19.04.2020
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also wenn man vor der Schleife
int zahl1, zahl2.....,zahl10; deklariert.

Und dann diese 10 Variablen in der Schleife auf folgende weise einbaut

for(i=1; i<11; i= i+1)
{
........

if(i==1){
zahl1 = zahl;
}else if(i==2{
zahl2 = zahl;
}.....usw
}
printf("Die 1. Zahl war %d\n", zahl1);
printf("Die 2. Zahl war %d\n", zahl2);
...

dann wird tatsächlich es so ausgegeben, wie von der Aufgabenstellung gefordert.

Nur das mit den Pfeilen beim Max und Min, da weiß ich einfach nicht wie ich das machen soll???

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Butterblume: 28.05.2020 08:44.

28.05.2020 08:42 Butterblume ist offline Beiträge von Butterblume suchen Nehmen Sie Butterblume in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Butterblume
Grünschnabel


Dabei seit: 19.04.2020
Beiträge: 7

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 traurig

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 Butterblume ist offline Beiträge von Butterblume suchen Nehmen Sie Butterblume in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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_MINmin INT_MAXsumme 00;
      int zahlen[10];
      printf("Bitte geben Sie eine ganze Zahl ein\n");
      for(010i++) {
            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 (010i++) {
          printf("Die %d. Zahl ist: %d"i+1zahlen[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"minmax);
      return 0;
}


Gruß
Marco
28.05.2020 19:31 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Aufgabe für Schleifen in C