Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

**HILFE!!**C Programmierung/ Klausuraufgabe

endruhnsche / 11 Antworten / Baumansicht Nickles

Hallo, ich brauche dringend Hilfe von erfahrenen Programmierern!


Ich bin Lebensmitteltechnologiestudentin und habe im Grundstudium Informatik. Ich verstehe nur wenig vom Programmieren und bin auf der Suche nach Jemanden, der mir beim Lösen einer alten Klausuraufgabe helfen kann. Ich habe keine Ahnung wie ich da am besten rangehe.


Die Aufgabe ist relativ lang. Ich könnte Sie einscannen, aber kann ich hier auch Datein zum Download anhängen?


 


Wir programmieren mit C in Microsoft Visual Studio C++

bei Antwort benachrichtigen
endruhnsche Nachtrag zu: „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Hab die Aufgabe abgeschrieben:

Bei einer chemischen Reaktion entstehen drei Produkte. In einer Versuchsreihe wird vom Start (Zeit = 0) im Abstand von 10 Minuten die Menge der entstandenen Produkte P1, P2 und P3 gemessen. Es soll der Zeitpunkt bestimmt werden, zu dem die Menge des entstandenen Produktes P2 am größten ist.

Die Dauer eines Versuchs beträgt maximal 300 Minuten. Er wird vorher abgebrochen, wenn die Produktmenge von P2 zu drei aufeinander folgenden Zeitpunkten nicht gestiegen ist.

Einzugeben sind die gemessenen Produktmengen für die Produkte P1, P2 und P3 zu den angegebenen Mess-Zeitpunkten.

Die Ergebnisse des Programms sollen in folgender Weise auf dem Bildschirm dargestellt werden:



Versuchsauswertung
-------------------------

Zeit Produkt P1 Produkt P2 Produkt P3
----------------------------------------------------------

999 999.99 999.99 999.99
999 999.99 999.99 999.99
999 999.99 999.99 999.99
... ... ... ...



maximale Menge P2: 999.99
nach 999 Minuten

Programmende


Ist für erfahrenen Programmierer sicher kein Problem, oder? Bitte helft mir!!!!!

bei Antwort benachrichtigen
europman endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Das zu programieren ist kein problem, nur verstehen die meisten hier nicht die Aufgabe!

Also musst du uns schon den Algorithmus deines Programs aufschreiben oder konkrete Fragen stellen, was dein Problem ist.

bei Antwort benachrichtigen
d-oli endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Hallo Lebensmitteltechnologiestudentin

Ich habe noch nie erlebt, dass bei Nickles eine fixfertige Lösung auf eine solche Anfrage folgte.

Nun ich denke das Programm zu schreiben ist meistens das kleinere Problem. Die ganze Aufgab sieht nach Verfahrenstechnik aus. Da müsstest Du doch eigentlich etwas voraus haben oder nicht?
Ich versuche es mal ...

1 a) Bei einer chemischen Reaktion entstehen drei Produkte. In einer Versuchsreihe wird vom Start (Zeit = 0) im Abstand von 10 Minuten die Menge der entstandenen Produkte P1, P2 und P3 gemessen ...

1b) Die Dauer eines Versuchs beträgt maximal 300 Minuten ...

-> daraus folgt Max. 300/10 = 30 Messungen pro Produkt.


2 a) Es soll der Zeitpunkt bestimmt werden, zu dem die Menge des entstandenen Produktes P2 am größten ist ...

2b) Beispiel der Ausgabe ...

-> daraus schliesse ich, dass die Messwerte nicht integriert werden müssen.


3 a) Einzugeben sind die gemessenen Produktmengen für die Produkte P1, P2 und P3 zu den angegebenen Mess-Zeitpunkten ...

3 b) Beispiel der Ausgabe ...

-> Annahme: Die Zeit muss ebenfalls eingegeben werden



Was wir also haben ist, das wir maximal 30 mal 4 Eingaben anfordern müssen, die wir speichern und am Ende prüfen, zu welchem Zeitpunkt P2 die maximale Menge erreichte. Nicht zu vergessen, dass das Programm abgebrochen werden muss, wenn P2 während drei Zyklen nicht ändert.


Und das geht so:

- Definiere ein zweidimensionales Array 30 mal 4 mit Integer Zahlen ( int data[30][4])
... so wär’s noch etwas eleganter struct product{ int time; int p1, int p2; int p3; } und dann -> product data[30]
- Definieren eine Integer Variable um zu zählen wie viel mal P2 nicht gestiegen ist. ( int count = 0 )
- Definieren eine Integer Variable um dir P2 max. zu merken (int p2max = 0)

- Mache eine z.B. do while Schleife die solange läuft bis P2 drei mal nicht gestiegen ist oder alle Daten eingegeben wurden. In der Schleife verlangst du die Eingaben Zeit, P1, P2 und P3

- Mache einen weitere Schleife (for empfohlen) in der du die gesammelten Daten auf der Konsole ausgeben tust und gleichzeitig p2max ermittelst for( count = 0; count p2max ) { ... }

- Gib p2max aus

... jetzt musst du nur noch die Syntax einfügen ...

Hilft das weiter?

Gruss, d-oli

PS: Sorry für mein schlechtes Deutsch. Deutsche Sprache, schwierige Sprache ...

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Looper endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Hi,

hast Du vielleicht schon mal über den Hintergrund dieser Aufgabe nachgedacht. Zu erst solltest Du wahrscheinlich eine oder mehrere Gleichung(en) aufstellen (rein mathematisches Problem; das kann Dir kein Programmierer, sondern ein Mathematiker lösen, oder Du selbst). Diese trägst Du in den Quellcode ein. Der Quellcode um die Gleichungen herum zu schreiben sollte doch kein Problem darstellen, wenn Du schon für die Klausur lernst. Ansonsten würde ich Dir empfehlen erst einmal einen Anfängerkurs bzw Einsteigerkurs zu belegen bevor Du die Klausur schreibst.

Grüße ... Looper ...

bei Antwort benachrichtigen
d-oli endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Formel? Welche Formel ...? Zugegeben mein älteres Posting enthält noch Fehler. So sollten die Messwerte nicht Ganzzahlen sondern Fliesskommazahlen sein und eine Variable habe ich auch noch vergessen. Aber wenn ich die Aufgabe richtig verstehe so müsste die Lösung ungefähr so aussehen:


struct product{
int t;
double p1;
double p2;
double p3;
};

#define LEN 30

int main(){
product data[ LEN ];
int p2max = 0, p2notbigger = 0, count;

for( count = 0; count < LEN; count ++ ){
// To do:
// Eingabe Zeit t
// Eingabe Produktmenge p1
// Eingabe Produktmenge p2
// Eingabe Produktmenge p3

// Inkrementieren, wenn p2 nicht gestiegen ist
if( count > 0 ){
if( data[ count ].p2 <= data[ count - 1 ].p2 ){
// To do:
// p2notbigger inkrementieren
}
}

// Abbrechen, wenn p2 drei mal nicht gestiegen
if( p2notbigger >= 3 ){
// To do:
// Programm abbrechen
}
}

for( count = 0; count < LEN; count ++ ){
// To do:
// Ausgabe Zeit t
// Ausgabe Produktmenge p1
// Ausgabe Produktmenge p2
// Ausgabe Produktmenge p3

// p2max ermitteln
if( data[ count ].p2 > p2max){
// To do:
// p2max speichern
}
}

// To do:
// Ausgabe p2max

// To do:
// Rückgabewert einfügen
}



... oder nicht ..?

Gruss, d-oli

PS: Ohne Gewähr, speziell was Syntaxfehler betrifft ...

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Hanswurscht1 endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Tag auch! Würde auch gerne ein bischen was vom Programmieren wissen. Woher habt ihr eure Kenntnisse?

bei Antwort benachrichtigen
loop1963 endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Musste auf der Akkamie oder Unität 6 Sylvester tudieren... mhmhm

bei Antwort benachrichtigen
d-oli endruhnsche „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Nachtrag:

Im Bezug auf ...
// To do:
// Ausgabe p2max

... wäre es besser, das ...
// p2max ermitteln
if( data[ count ].p2 > p2max ){
// To do:
// p2max speichern
}

... so zu machen ...
// p2max ermitteln
if( data[ count ].p2 > data[ p2max ].p2 ){
// To do:
// p2max speicher
}
... weil die Zeit ja auch noch ausgegeben werden soll.

Tipp: Achte auf die Ausgaben 999 und 999.99 (Drei Stellen bzw. zwei Kommastellen).

Und lass uns wissen ob es dir weitergeholfen hat.

mfg, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
endruhnsche Nachtrag zu: „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

Also erstmal großes DANKE an euch, für eure Hilfe! Das Problem ist, ich versteh die Aufgabe, aber das Umsetzen zum Programm klappt leider nicht wirklich. Könnte daran liegen, das wir das ganze Semester nur mit kleinen und relativ simplen Programmen geübt haben und jetzt auf einmal muss da sone (für uns) relativ komlexe Aufgabe in der Klausur gelöst werden. und das in 45 min? Ich weiß, dass wir so eine Ähnliche Aufgabe bekommen werden. Und das beunruhigt etwas.

Also d-oli, leider benutzt du Anweisungen, von denen ich noch nix gehört habe.

"int main(){
product data[ LEN ];
int p2max = 0, p2notbigger = 0, count;

for( count = 0; count

Habe noch nie ein programm in solch einer form gesehen.

Hier mal ein Bsp. für die uns beigebrachte Art zu programmieren:


#include

bei Antwort benachrichtigen
d-oli endruhnsche „Also erstmal großes DANKE an euch, für eure Hilfe! Das Problem ist, ich...“
Optionen

> Gibt es denn bei C so viele Unterschiede?

In der Tat die gibt es. Die Syntax bleibt zwar immer gleich, abhängig vom Programmierstil, von der Erfahrung und vom Können des Programmierers, kann das Programm gut oder halt schlechter lesbar sein. Im Weiteren gibt es neben ANSI C auch noch proprietäre Versionen von C die nicht ganz dem ANSI-Standard entsprechen. Wie z.B. von Microsoft natürlich.

> Oder liegt es nur daran, dass wir irgendwas Veraltetes beigebracht bekommen?

C ist eine relativ alte (Anfang/Mitte 70er) aber immer noch weit verbreitete Programmiersprache. Aber ich glaube du hast schon alles was du brauchst, um die Aufgabe zu komplettieren.


“ int main(){ “ ist das Gleiche wie “ void main(){ “ mit dem Unterschied das beim ersten Fall die Funktion Main über einen Rückgabewert verfügt. Einigen Compiler bereitet „void main(){„ Probleme.


“ product data[ LEN ];”: Hier definiere ich ein Array des Structs (könnte auch „benutzerdefinierter Datentyp“ genannt werden) “product”.


“ int p2max = 0, p2notbigger = 0, count; “ ist das Gleiche wie bei dir “int m,n,o;“ wäre, aber mit dem Unterschied, das meine Bezeichnung der Variablen etwas aussagt.


" for( count = 0; count

Wie gesagt hast du schon alles was du brauchst … eigentlich musst du mehr oder weniger nur noch printf’s’ scanf’s ein paar Zuweisungen und noch ein oder zwei return’s einfügen.


Tipp: Nimm ein C-Buch zur Hand und lies folgende Themen nach:

Variablen und Datentypen, Elementare Datentypen, Arrays, Strukturen, Funktionen (mit/ohne Rückgabewert, Parameter), die Main-Funktion, Schleifen (for, do while, while) und #define (symbolische Konstanten).

Buch-Tipp: C/C++ New Reference, Dirk Louis, ISBN 3-8272-6121-X


Viel Spass und Gruss, d-oli

Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
endruhnsche Nachtrag zu: „**HILFE!!**C Programmierung/ Klausuraufgabe“
Optionen

ok, das werd ich mir mal in der bibliothek suchen. Danke. Ich werd mich dann mal gleich nochmal ransetzen.

Vielen Dank,

Steffi!

bei Antwort benachrichtigen