Eine Programmieraufgabe lösen (nicht auf hohem Niveau), kann mir einer helfen?

... komplette Frage anzeigen

3 Antworten

Die erste Sprache die ich gelernt habe war ebenfalls C und ich muss ehrlich zugeben das ich ziemliche Probleme mit Form und Syntax hatte. Ich habe auch Beispielcodes gebraucht um ein Gefühl für die Codierung zu bekommen.


int main ()
{
int eingabe; // Wenn Eingabe den Typ 'Integer' hat werden nur ganze Zahlen eingelesen, auch wenn eine Kommazahl eingegeben wird.

float summe = 0;
float mittelwert;
int i;
float min;
float wert;
float max;
int positiv = 0;
int negativ = 0;
/*******************************/
//Ich habe die Abfrage nun in einer Do-While-Schleife gesteckt.
//Für die Abfrage gab es 3 Anforderungen:
do{
printf("\\n\\nBitte geben Sie die Anzahl der Messwerte ein: ");
scanf("%i", &eingabe); //1. Anforderung, Nur ganze Zahlen als Eingabe. Bei der Eingabe 2.4 würde nur 2 eingelesen werden.
fflush(stdin); //2. Anforderung, Nur eine Zahl soll eingegeben werden. Wenn du eine Zahl eingibst, dann Leerzeichen und dann eine 2. Zahl eingibst passiert folgendes:
//Die 1. Zahl wird erfasst und den Wert 'eingabe' zugewiesen. Die 2. Zahl nach dem Leerzeichen bleibt im Speicher der Tastatur.
//Wenn nun der 1. Messwert abgefragt wird, wird noch vor deiner Abfrage der Tasterturspeicher ausgeleert und mit den ersten Messwert zugewiesen.
//Der Befehl fflush() leert ein Speicher, der zugewiesene Wert 'stdin' verweist auf die Standarteingabe, also die Tastertur

if(eingabe < 1){
printf("\\nFEHLER! Als Eingabe werden nur positive Zahlen akzeptiert.");
}
}while(eingabe < 1);// 3. Anforderung, Nur Eingaben die größer als 0 sind werden angenommen, andernfalls wird die ganze Abfrage von neuen gestartet.
/*****************************/

for (i=1; i<=eingabe; i++) //Ich hab deine while-schleife wieder herausgenommen, da ich die Aufgabe so verstanden hab das hier auch negative Zahlen akzeptiert werden.
{
printf("Bitte geben sie den %d. Wert ein\\n",i);
scanf("%f",&wert);
if(i == 1)
{
min = wert;
max = wert;
mittelwert = wert;
}
summe = summe + wert;
mittelwert = summe / i;
if (wert >= max) max = wert;
else if (wert <= min) min = wert;
if(wert < 0) negativ++;
else positiv++;
printf("Der groeste Wert ist %.1f\\n",max);
printf("der kleinste Wert ist %.1f\\n",min);
printf("Der Mittelwert ist %.1f\\n", mittelwert);
printf("Anzahl positiver Eingaben: %d\\n", positiv);
printf("Anzahl negativer Eingaben: %d\\n\\n", negativ);
}
}


Ich habe versucht die wichtigen Änderungen abzugrenzen. Du machst es dir sehr viel einfacher wenn du dir das Codebeispiel herauskopierst und in deine Entwicklungsumgebung einfügst.  Dann erkennst du auch was nur Komentare sind und was zum eigentlichen Programm gehört.

Ich benutze übrigens gerne Dev-C++ Version 5.1.

Ich habe einige Fehler durchprobiert und bin recht zufrieden mit den Programm. Außerdem achte auf Rechtschreibung, das ist nämlich nicht meine Stärke... :P

Ich habe in letzter Zeit Kopfschmerzen und bin mir nicht sicher ob sich vieleicht Fehler eingeschlichen haben, bzw. hab ich es nicht so intensiv überprüft. So weit so gut erstmal.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von JuicyLuisian
05.12.2015, 18:47

Ich habe keine Ahnung wie du deinen Code so gut formatiert hast, bei mir funzt das vorne und hinten nicht. Kein tabulator etc. ...

1

Die Thematik mit den Niveau deute ich in etwa so das du auch verstehen musst was da am Ende steht. Andernfalls kann ich mir überhaupt nicht vorstellen weshalb man sich beklagt auf zu hohen Niveau zu arbeiten... :D

Die sichere Eingabe realisiert man meist gerne mit einer do-while-Schleife. Das ist im Prinzip wie eine normale While-Schleife nur das sie zuerst etwas ausführt und dann erst überprüft ob die Schleife weiter laufen soll oder abbricht.


do
{
//deine normale Abfrage nach der Messwertenanzahl

}while(eingabe<=0);

Deine Abfrage nach den Messwerten wird jetzt solange abgefragt bis eine Zahl eingegeben wird die nicht kleiner gleich 0 ist. Du solltest auch die Variable "eingabe" als integer einbinden, nicht als float. Damit werden nur ganze Zahlen eingelesen.

Kommst du mit Struktorgrammen zurecht? Weißt du wie das aussehen soll?

Negative und positive Werte mitzählen sollte ja kein problem sein. Binde 2 neue Variablen ein. Einmal positivZähler und einmal negativ, Name ist natürlich dir überlassen und prüfe mit zusätzlichen if-Anweisungen ob sie negativ oder positiv ist und zähle dann einfach aufwerts.

Bei der Bestimmung des Maximums und Minimums werden Fehler beim Minimum auftreten. Du must noch überprüfen ob Wert auch größer als min ist. Ansonsten wird jeder Wert der kleiner ist als Max als kleinster Wert zugewiesen.

Soll eigentlich bei jeden Durchlauf der for-Schleife alle Werte ausgegeben werden? Würde für mich etwas komisch aussehen, aber nicht schlimm.


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Angrodo
03.12.2015, 03:54

,,Die sichere Eingabe realisiert man meist gerne mit einer do-while-Schleife.''

Bei der ersten Aufgabe hatte ich auch eine do while Schleife und das war dann falsch. Kann man denn die Erweiterte Aufgabe auch so lösen, wie ich die 1. Aufgabe habe, nur mit paar kleinen Veränderungen?

Oder, wenn es mit einer do while schleife sein soll, kannst du mir vorziegen, wie das geht, damit ich das dann weiter studieren kann?

------------------------

,,Du solltest auch die Variable "eingabe" als integer einbinden, nicht als float''

Bezeihst du dich auf die Aufgabe 1 oder die Erweiterte Aufgabe?

Denn die 1. Aufgabe ist 100  %  korrekt, volle Punktzahl und es muss nichts dort geändert werden.

---------------------------------------

Ich weiß jetzt nicht , was du meinst, beziehst du dich jetzt auf die fertige Aufgabe, oder meinst du die Aufgabe 2 , also die Erweiterte?

0

Es heißt oben am Anfang # include  stdio.h und #include stdlib.h

wenn ich < > drum rum mache dann verschwindet der Ausdruck, komisch

     

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Angrodo
01.12.2015, 17:36

,,Die sichere Eingabe realisiert man meist gerne mit einer do-while-Schleife.''

Bei der ersten Aufgabe hatte ich auch eine do while Schleife und das war dann falsch. Kann man denn die Erweiterte Aufgabe auch so lösen, wie ich die 1. Aufgabe habe, nur mit paar kleinen Veränderungen?

Oder, wenn es mit einer do while schleife sein soll, kannst du mir vorziegen, wie das geht, damit ich das dann weiter studieren kann?

------------------------

,,Du solltest auch die Variable "eingabe" als integer einbinden, nicht als float''

Bezeihst du dich auf die Aufgabe 1 oder die Erweiterte Aufgabe?

Denn die 1. Aufgabe ist 100  %  korrekt, volle Punktzahl und es muss nichts dort geändert werden.

---------------------------------------

Ich weiß jetzt nicht , was du meinst, beziehst du dich jetzt auf die fertige Aufgabe, oder meinst du die Aufgabe 2 , also die Erweiterte?

0

Was möchtest Du wissen?