PRG01 - Hausarbeit

Algorithmus, Baumdurchlauf, Compiler, Interpreter...; Cobol, Pascal, C/C++, Java & Co.
alexandra09
Mitglied
Mitglied
Beiträge: 16
Registriert: 16.07.07 19:40

Hallo,

ich sitze schon seit längerem an der Hausarbeit zu PRG01 und bin am verzweifeln! Bei den Lösungen, die ich habe, bin ich total unsicher.
Insbesondere mit der Aufgabe 2 - Einkommenssteuerberechnung/ Horner-Schema. Ich hab das Horner-Schema nicht wirklich verstanden; mit meiner Lösung hat es gar nichts zu tun.
Könnte mir jemand seine Hausarbeit zum Abgleich zukommen lassen und/ oder das mit dem Horner-Schema erklären?

Vielen Dank schonmal!

Alexandra
Benutzeravatar
robina_1966
Forums-Scout
Forums-Scout
Beiträge: 559
Registriert: 23.07.04 09:18
Wohnort: von der sonne verwöhnt

..
Zuletzt geändert von robina_1966 am 23.10.09 09:46, insgesamt 4-mal geändert.
Micha
Mitglied
Mitglied
Beiträge: 20
Registriert: 10.04.02 16:17

Hallo zusammen,

also, ich zerbrech mir jetzt auch schon seit Tagen den Kopp zu den Aufgaben 1 (Geldwechselmaschine) und 2 (Einkommensteuer) von Prg101.

Legt man bei der Geldwechselmaschine ein 1- oder 2-dimensionales Array an? Bin außerdem irritiert, dass lt. Aufgabenstellung a1, a2 usw. bereits mit 0 initialisiert wurde (ist meines Erachtens gar nicht notwendig?!)?

Bei der Aufgabe zur Einkommensteuer kapier ich nicht, was nun der grundlegende Unterschied von 1990 (und die Lösung steht ja in Kontrollaufgabe 3) zu 1981 (für die Einsendeaufgabe) sein soll.

Könnt Ihr mir auf die Sprünge helfen???
Ich glaub, ich seh den Wald vor lauter Bäumen nicht javascript:emoticon(':(')
Sad

Danke!
Micha
soenke
Forums-Profi
Forums-Profi
Beiträge: 80
Registriert: 05.12.04 22:22
Wohnort: Hamburg

Habe es damals as C-Programm entworfen (finde pseudo.code bescheuert, weil man es nicht testen kann):

Code: Alles auswählen

int beispielwert = 83; // ggf. Eingabe

int einheiten[6] = {50, 20, 10, 5, 2, 1 };
int aufteilung[6];

int main() {

  int i, rest, rest_temp;

  rest = beispielwert
  for (i = 0; i < 6; i++) {
    rest_temp = rest % einheiten[i];   
    aufteilung[i] = (rest - rest_temp) / einheiten[i];
    printf("%d passt %d mal in %d, Rest: %d\n", einheiten[i], aufteilung[i], rest, rest_temp);
    rest = rest_temp;
    if (rest == 0) {
      break;
    }
  }
Prinzipiell also die Münzen von gross nach klein durch iterieren, Modulo-Division machen (dann hat man den rest) und den rest für den nächsten durchlauf speichern.

Steuerprogramm (kann man kompilieren und ausführen):

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

double est, e = 0;
int zve;

int main(int argc, char * argv[]) {
  zve = atoi(argv[1]);
  zve = zve - (zve % 54); // auf einen durch 54 teilbaren Betrag abrunden

  if (zve >= 4212 && zve <= 18000) {
    est = 0.22 * zve - 926;
  } else if (zve > 18000 && zve <= 60000) {
    e = (zve - 18000) * 0.0001;
    est = (((3.05 * e - 73.76) * e + 695) * e + 2200) * e + 3034;
  } else if (zve >= 60000 && zve < 130000) {
    e = (zve - 60000) * 0.0001;
    est = (((0.09 * e - 5.45) * e + 88.13) * e + 5040) * e + 20018;
  } else if (zve >= 130000) {
    est = 0.56 * zve - 14837;
  }

  printf("Zu versteuerndes Einkommen: %d\n", zve);
  printf("Einkommensteuer: %f\n", est);
  return 0;
}
Hope that helps.
Micha
Mitglied
Mitglied
Beiträge: 20
Registriert: 10.04.02 16:17

Hallo Sönke,

vielen Dank, das werd ich mir heute Abend mal zu Gemüte ziehen!

Viele Grüße
Micha
Mark1972
Neues Mitglied
Neues Mitglied
Beiträge: 1
Registriert: 19.03.08 22:41
Wohnort: München

Hallo,

hat jemand auch einen Lösungvorschlag in Pseudo-Code? C ist momentan noch Neuland für mich.

Für Hilfe wäre ich sehr dankbar. Falls mir jemand seine Einsendeaufgabe mailen könnte, wäre das auch ne sehr coole Sache :D.

Vielen Dank im Voraus!

Viele Grüße,
Mark1972
aswod_83
Neues Mitglied
Neues Mitglied
Beiträge: 6
Registriert: 19.11.07 15:37
Wohnort: Bamberg

Hallo zusammen,

ich arbeite derzeit auch an der Hausarbeit für prg01. Mich beschäftigt momentan die Aufgabe 1 mit der Entwicklung des Pseudocodes.
Leider kann man bzgl. Pseudocode nur wenig mit unseren Lernunterlagen anfangen.

Eine sehr gute Hilfe könnte deswegen folgender Link sein:

http://www.cs.princeton.edu/courses/arc ... erence.pdf

bzw. das Stichwort "Preudocode Reference"

Für eine korrekte Hausarbeit wäre ich dennoch dankbar.
mailto: sam@sam4fun.de

Gruß André
Benutzeravatar
loopy
Mitglied
Mitglied
Beiträge: 17
Registriert: 13.08.08 01:06

Möchte den Thread nochmals öffnen...

Wer will mit mir die Hausaufgaben austauschen? Werde versuchen, die morgen zu machen :?
while (!asleep()) sheep++;
AlexB
Mitglied
Mitglied
Beiträge: 10
Registriert: 08.05.07 19:19

Hallo zusammen!

Gibt es hier jemanden der seine Hausaufgaben einmal mit mir tauschen möchte? Bin absolut unsicher was meine Lösungen betrifft. Insbesondere Aufgabe 2 ist mir ein absolutes Rätsel. Wird denn anstatt Pseudocode auch C akzeptiert als Lösung?

Vielen Dank schonmal im Voraus!!

Gruß,
AB
RoiDanton
Forums-Profi
Forums-Profi
Beiträge: 66
Registriert: 28.03.09 19:51

Ich wäre dankbar, wenn mir jemand die HA von PRG01 zur Kontrolle zusenden könnte.

RoiDanton75 at gmx "Puntk" de

Danke und Gruß
Roi
Zuletzt geändert von RoiDanton am 07.05.10 07:45, insgesamt 1-mal geändert.
Tengu
Neues Mitglied
Neues Mitglied
Beiträge: 2
Registriert: 23.07.08 19:58
Wohnort: Simmern

Hallo,

ich wäre sehr dankbar, wenn jemand mir die HA von PRG01 zur Kontrolle zusenden könnte.

Kann auch tauschen :-)

tinkerbell_74@web.de

Vielen Dank!
Benutzeravatar
Linda84
Mitglied
Mitglied
Beiträge: 14
Registriert: 15.09.07 20:35

Hallo,

kann mir jemand die Einsendeaufgabe für PRG01 zusenden? Das wäre super, komm nicht so richtig weiter und bräuchte da eine Hilfestellung.


Viiiiiieeeeeeelen vieeeeeelen Dank!

Gruß Linda

Und nochmal daaaaaaanke!
Zuletzt geändert von Linda84 am 26.05.10 11:26, insgesamt 1-mal geändert.
Benutzeravatar
TheArchitect
Neues Mitglied
Neues Mitglied
Beiträge: 8
Registriert: 15.11.09 13:35
Wohnort: NRW (Germany)

Nachfolgend die optimale(n) Lösung(en) zu der Einsendeaufgabe 1 in Form eines C++ - Quellcodes.

Meines Erachtens reichen hier zwei einfache Schleifen sowie eine simple Subtraktion aus. Eine Modulo-Operation würde ich in so einem einfachen Fall nicht vorziehen, zumal die Lösung mit der Subtraktion für Anfänger leichter zu verstehen ist ...

Programmcode ohne „echte“ Wechselfunktion :

Code: Alles auswählen

#include <iostream>
#include <iomanip>
using namespace std;

int anzahl[6];   	// Global deklariert, damit Compiler eine automatische
	                // Initialisierung aller Werte mit 0 vornimmt

int main()
{ 
  int betrag = 89; 	// Testwert - Bei der Endversion sollte
                                // eine Eingabe möglich sein -

  int stueckelung[] = {50, 20, 10, 5, 2, 1 }; 

  for( int i = 0; i < 6; i++ )
  {
    while( betrag >= stueckelung[i] )
    {
       anzahl[i]++;			    // anzahl[i] = anzahl[i] + 1;
       betrag -= stueckelung[i];	    // betrag = betrag - stueckelung[i]
    }

    // Bildschirmausgabe der Stückelungen
    cout << setw(10) << stueckelung[i] << setw(10) << anzahl[i]
         << setw(10) << betrag << endl;
  } 
  cin.get();
  return 0;
}
Programmcode mit „echter“ Wechselfunktion. Ein Wechseln findet auch dann statt, wenn der Betrag der Stückelung entspricht, also 50,20,10,5,2 oder 1 ist :

Code: Alles auswählen

#include <iostream>
#include <iomanip>
using namespace std;

int anzahl[6];   	// Global deklariert, damit Compiler eine automatische
	                // Initialisierung aller Werte mit 0 vornimmt

int main()
{ 
  int betrag = 89; 	// Testwert - Bei der Endversion sollte
                                // eine Eingabe möglich sein -

  int stueckelung[] = { 50, 20, 10, 5, 2, 1 }; 
  bool glatterBetrag = true;

  for( int i = 0; i < 6; i++ )
  {
    while( betrag >= stueckelung[i] )
    {
       if( betrag == stueckelung[i] && glatterBetrag && betrag != 1 )
          break;
       anzahl[i]++;			    // anzahl[i] = anzahl[i] + 1;
       betrag -= stueckelung[i];	    // betrag = betrag - stueckelung[i]
       glatterBetrag = false;
    }
    // Bildschirmausgabe der Stückelungen
    cout << setw(10) << stueckelung[i] << setw(10) << anzahl[i]
         << setw(10) << betrag << endl;
  } 
  cin.get();
  return 0;
}
Die erste Lösung ohne "echte" Wechselfunktion reicht m.E. aus, da die Aufgabenstellung nicht eindeutig ist.

PS : Bei allen Textelementen nach dem Doppelschrägstrich "//" handelt es sich um Kommentare, welche zum besseren Verständnis beitragen sollen.
In function 'main()' : your code is suboptimal !
line1 : try the following operation: brain++
Benutzeravatar
mcneuhaus
Forums-Scout
Forums-Scout
Beiträge: 377
Registriert: 26.10.09 13:12
Wohnort: bei Mainz

Nur als Tipp:

Wechselautomat ohne "echte" Wechselfunktion reicht nicht aus. Hatte eine Lösung eingereicht, die die 50, 20, usw. Werte nicht wechselt und dafür Punktabzug bekommen. Korrektorin lies auch nicht mit sich darüber diskutieren.

Gruß Marc
Benutzeravatar
TheArchitect
Neues Mitglied
Neues Mitglied
Beiträge: 8
Registriert: 15.11.09 13:35
Wohnort: NRW (Germany)

Hallo Marc,

ich hätte die Korrektorin dann mal auf folgenden Beitrag im AKAD-Forum hingewiesen :

– Kommentar: Wechseln oder nicht Ernst Günther Hoffmann (Dozent) 26.02.2009 21:38

Hallo Herr ...,

...

Hier folgt jetzt mein Vorschlag zu Ihrer Vorgehensweise:

Sie geben bitte nur EINEN Betrag ein. Dieser soll dann in möglichst
wenigen, möglichst großen Scheinen/Münzen ausgegeben werden.
Das ist dann KEIN Geldwechselautomat.

Bei der Korrektur der Einsendeaufgabe wird diese Lösung akzeptiert werden.


Mit freundlichen Grüßen,
Ernst-Günter Hoffmann


Ich habe leider auch schon oft erlebt, dass die Korrektoren sich nicht an die Ausführungen der AKAD Lerneinheiten halten und ihre eigene Sichtweise haben.

Eine ausführliche Stellungnahme meinerseits, konnte jedoch in allen Fällen zu einer berichtigten Korrektur führen.

Gruß
TheArchitect
In function 'main()' : your code is suboptimal !
line1 : try the following operation: brain++
Antworten