Forum: PC-Programmierung C Programmierung ppm Ausgabe Hilfe


von vanessa (Gast)


Angehängte Dateien:

Lesenswert?

Liebe Leute,
ich wäre total froh, wenn ihr mir helft.

Ich muss eine Notenverwaltungssoftware in der Programmiersprache c 
schreiben und habe keine Ahnung wie man ein ppm ausgibt. Könnt ihr für 
mich den Code korrigieren (unten). Das wäre super nett.

Aufgabenstellung:

Es soll dem Anwender möglich sein eine Prüfung zu erfassen, die als 
Dateiname abgelegt wird.Nachdem dies vorgenommen wurde kann die 
Lehrkraft zu einem beliebigen Zeitpunkt, eine beliebige Anzahl Noten in 
diese Prüfung eintragen.

Nachdem mehr als 2 Prüfungen eingetragen wurden, hat die Lehrkraft die 
möglichkeit ein Diagramm im Dateiformat ppm generieren
  zu lassen. Um dies bewerkstelligen zu können müssen Sie das einfache 
Ascii BildFormat studieren.
  https://de.wikipedia.org/wiki/Portable_Anymap ,heisst es in der 
Aufgabenstellung.

 irgend so ein Diagramm ausgeben für die Noten.
  000000
  111100  Note 4
  000000
  111110  Note 5

  etc.

Vielen Dank Vanessa






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

struct {
   char vorname[20];
   char nachname[30];
   char note1[80];
   char note2[80];
   char note3[80];

} adressen;

void speichern(void) {
   FILE *save = fopen("adressen.dat","r+b");
   if( NULL == save ) {
      save = fopen("adressen.dat","w+b");
      if( NULL == save ) {
         fprintf(stderr,"Kann \"adressen.dat\" nicht öffnen!\n");
         return;
      }
   }
   /* FILE-Zeiger save auf das Ende der Datei setzen */
   fseek(save, 0, SEEK_END);

   /* Wir schreiben eine Adresse ans Ende von "adressen.dat". */
   if(fwrite(&adressen, sizeof(adressen), 1, save) != 1) {
      fprintf(stderr, "Fehler bei fwrite...!!!\n");
      return;
   }
   /* Wir geben unseren FILE-Zeiger wieder frei. */
   fclose(save);
}

void ausgabe(void) {
   FILE *output = fopen("adressen.dat","r+b");
   if( NULL == output ) {
      fprintf(stderr,"Kann \"adressen.dat\" nicht öffnen!\n");
      return;
   }
   /* Wir lesen alle Adressen aus "adressen.dat". */
   while(fread(&adressen, sizeof(adressen), 1, output) == 1) {
      printf("Vorname Schueler1. %s",adressen.vorname);
      printf("Nachname......... %s",adressen.nachname);
      printf("note1...........   %s",adressen.note1);
      printf("\n");
      printf("Vorname.Schueler2. %s",adressen.vorname);
      printf("Nachname......... %s",adressen.nachname);
      printf("note............. %s",adressen.note2);
      printf("\n\n");
      printf("Vorname.Schueler3. %s",adressen.vorname);
      printf("Nachname......... %s",adressen.nachname);
      printf("note............. %s",adressen.note3);
      printf("\n\n");
      printf("Vorname.......... %s",adressen.vorname);
      printf("Nachname..........%s",adressen.nachname);
      printf("note............. %s",adressen.note1);
      printf("\n\n");
       printf("Vorname..........%s",adressen.vorname);
      printf("Nachname..........%s",adressen.nachname);
      printf("note..............%s",adressen.note2);
      printf("\n\n");
     /*WIE GIBT MAN BILD AUS IN KONSOLE??? */
    /* Wir lesen alle Adressen aus "adressen.dat". */
   }
   fclose(output);
}
void eingabe(void) {
   printf("Vorname Schueler1....");
   fgets(adressen.vorname, sizeof(adressen.vorname), stdin);
   printf("Nachname....");
   fgets(adressen.nachname, sizeof(adressen.nachname),stdin);
   printf("note  1:....");
   fgets(adressen.note1, sizeof(adressen.note1), stdin);
    printf("note 2:....");
   fgets(adressen.note2, sizeof(adressen.note2), stdin);
    printf("note 3:....");
   fgets(adressen.note3, sizeof(adressen.note3), stdin);
   printf("Vorname Schueler2....");
   fgets(adressen.vorname, sizeof(adressen.vorname), stdin);
   printf("Nachname....:");
   fgets(adressen.nachname, sizeof(adressen.nachname),stdin);
   printf("note  1....:");
   fgets(adressen.note1, sizeof(adressen.note1), stdin);
   printf("note 2....:");
   fgets(adressen.note2, sizeof(adressen.note2), stdin);
    printf("note 3:....");
   fgets(adressen.note3, sizeof(adressen.note3), stdin);
   printf("Vorname Schueler3....");
   fgets(adressen.vorname, sizeof(adressen.vorname), stdin);
   printf("Nachname:....");
   fgets(adressen.nachname, sizeof(adressen.nachname),stdin);
    printf("note  1:....");
   fgets(adressen.note1, sizeof(adressen.note1), stdin);
     printf("note 2:....");
   fgets(adressen.note2, sizeof(adressen.note2), stdin);
     printf("note 3:....");
   fgets(adressen.note3, sizeof(adressen.note3), stdin);
   speichern();
}

int main(void) {
   int wahl;

   do {
      printf("Was wollen Sie machen\n");
      printf("-1- Neuen Note erfassen\n");
      printf("-2- Alle Datensaetze ausgeben\n");
      printf("-3- Programm beenden\n\n");
      printf("Ihre Auswahl : ");
      do {
         scanf("%d",&wahl);
      } while(getchar() != '\n');
      switch(wahl) {
         case 1 : eingabe();        break;
         case 2 : ausgabe();        break;
         case 3 : printf("...Programm wird beendet\n");
                  break;
         default: printf(">>%d<< ???\n",wahl);
      }
   } while(wahl != 3);

return;
   }

: Verschoben durch User
von Kollege von oben (Gast)


Lesenswert?

Zu allererst: was passiert denn wenn du dein Programm ausführst? Was 
möchtest du denn genau wissen?

von Nop (Gast)


Lesenswert?

vanessa schrieb:
> Ich muss eine Notenverwaltungssoftware in der Programmiersprache c
> schreiben und habe keine Ahnung wie man ein ppm ausgibt.

Dazu liest Du Dir erstmal die Hausaufgabe gründlich durch. Der Hinweis, 
wie PPM funktioniert, steht da schon drin.

Daß man dazu Datei-Operationen braucht, ist klar. Diese hattest Du in 
der Vorlesung, sonst hättest Du nicht so eine Hausaufgabe bekommen.

Dann liest Du Dir hier vor dem Posten auch durch, wie man Code einfügt. 
Steht bei "Formatierung", wenn Du ein Posting verfaßt. Tip: Man kotzt 
COde nicht einfach als Text rein.

von physiker (Gast)


Lesenswert?

Das ist hier kein "Mach meine Hausaufgaben für mich"-Service (Bitte an 
die Mitlesenden: Die Aufgabe nicht einfach lösen!). Lies Dir den 
verlinkten Wikipediaartikel durch ( iwS "studiere das Dateiformat"; 
studieren: "gründlich untersuchen, erforschen aus lat. studere „sich um 
etwas bemühen, etwas eifrig betreiben, sich wissenschafllich [sic!] 
beschäftigen“, Zitat wissen.de), überleg Dir wie Dein Diagramm aussehen 
sollte, versuche ein Beispiel ggf. per Hexeditor zu erstellen wenn Du 
Dir unsicher bist und schau dann wie Du es in die Fileausgabe packst. 
Ansonsten lernst Du nichts (und bist übrigens auch in der 
Prüfung/Klausur aufgeschmissen).

von Blubb (Gast)


Lesenswert?

Danke :)

Kannte dieses tolle PPM-Format noch gar nicht :D

Hab mir das gerade mal angeschaut (dein verlinkter Wiki-Artikel)

Die Note "4" würde man mit folgenden Code darstellen:
1
P1
2
# Beispiel für das Bild der Zahl "4"
3
6 9
4
0 0 0 0 0 0
5
0 1 0 0 1 0
6
0 1 0 0 1 0
7
0 1 0 0 1 0
8
0 1 1 1 1 0
9
0 0 0 0 1 0
10
0 0 0 0 1 0
11
0 0 0 0 1 0
12
0 0 0 0 0 0

Einfach in einen Editor kopieren,
Datei als "blubb.ppm" speichern und
sich freuen :p

von Blubb (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mal das (vergrößerte) Ergebnis des Beispielcodes angehangen.

von Mark B. (markbrandis)


Lesenswert?

Blubb schrieb:
> Ich hab mal das (vergrößerte) Ergebnis des Beispielcodes angehangen.

Und warum ist das jetzt PNG und nicht PPM ;-)

von Blubb (Gast)


Lesenswert?

Mark B. schrieb:
> Und warum ist das jetzt PNG und nicht PPM ;-)

Ich hatte die Befürchtung das Mikrocontroller.net ppm nicht erlaubt und 
nicht darstellen kann ;-)

von Dennis S. (eltio)


Lesenswert?

Blubb schrieb:
> Ich hatte die Befürchtung das Mikrocontroller.net ppm nicht erlaubt und
> nicht darstellen kann ;-)

Kann es irgendein Windows-Boardmittel-Programm? "Paint" nicht, 
"Fotoanzeige" nicht, "IE" nicht, ....

von Diek (Gast)


Lesenswert?

Ich schätze am einfachsten wäre ein Balkendiagramm mit fixer Breite und 
Höhe. Hätte ja jetzt irgendwie auch Bock das mal auszuprobieren ?

von Blubb (Gast)


Lesenswert?

Dennis S. schrieb:
> Windows-Boardmittel

Weiß ich nicht. Hab das mit Linux geöffnet. Das klappte einmal mit dem 
Bildbetrachter ristretto(Bildbetrachter von XFCE) und ebenfalls mit 
gimp. Das gibt es ja sogar als portable Version für Windows. der 
Screenshot ist aus gimp heraus

von Blubb (Gast)


Lesenswert?

Zur Not muss man mal Google anwerfen. Suche nach "ppm viewer", erster 
link

http://openseeit.sourceforge.net/

Sieht vielversprechend aus :)

von Dennis S. (eltio)


Lesenswert?

Blubb schrieb:
> Zur Not muss man mal Google anwerfen. Suche nach "ppm viewer",
> erster
> link
>
> http://openseeit.sourceforge.net/
>
> Sieht vielversprechend aus :)

In welcher Windows-Version ist das dabei...?

von Mark B. (markbrandis)


Lesenswert?

Unter Windows nimmt man gerne IrfanView. Das kann alles darstellen.

http://www.irfanview.com/

von Blubb (Gast)


Lesenswert?

Dennis S. schrieb:
> In welcher Windows-Version ist das dabei...?

Im standard bei keiner. Das habe ich aber auch nie behauptet ;)

Mark B. schrieb:
> IrfanView

Das wäre wirklich die sinnvollere SW :)

von Dennis S. (eltio)


Lesenswert?

Blubb schrieb:
> Im standard bei keiner. Das habe ich aber auch nie behauptet ;)
Naja, meine Frage war ja explizit nach Windows-Boardmitteln und ich 
hatte vermutet, dass du dich auf meine Frage bezogen hast.

von Blubb (Gast)


Lesenswert?

Dennis S. schrieb:
> dass du dich auf meine Frage bezogen hast

Okay.. Ne, so meinte ich das nicht. Hab quasi eine alternative zu den 
Boardmitteln genannt. Hab das gerade auch nochmal getestet. IrfanView, 
sowie LibreOffice Draw öffnen dieses Format ebenfalls prächtig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.