5.2.20
12/07/19
Last Modified 06/30/19 by Walter Tasin
AlgoDat_LA2 Reload Page

Attachments

 A2_1.png
 A2_4.png

Algorithmen und Datenstrukturen

Übungen zu Tutorium 1

Pamela Bogner, W. Tasin, M.Sc.

Programmerstellung

Es soll ein Programm erstellt werden, dass eine Umrechnungstabelle Euro -> DM für die Ganzzahlenwerte 1 EUR bis 10 EUR zeilenweise darstellt.

  • Zeichnen Sie für dieses Problem ein Nassi-Shneiderman-Diagramm
  • Verwenden Sie den Umrechnungsfaktor 1.95583 zur Konvertierung von EUR -> DM
    • Der Quellcode soll in der Datei umrechnung.c erstellt werden.
    • Die Ausgabe soll wie folgt aussehen:

  1 --> 1.96
  2 --> 3.91
  3 --> 5.87
  4 --> 7.82
  5 --> 9.78
  6 --> 11.73
  7 --> 13.69
  8 --> 15.65
  9 --> 17.60
 10 --> 19.56

Erarbeitete Lösung des Tutoriums SS 13

#include <stdio.h>

int umrechnung_ed(void);
int umrechnung_ed_(void);
int umrechnung_de(void);

int main()
{
    char eingabe;

    printf("Geben Sie 1 ein, wenn Sie eine Umrechnung von Euro in DM wuenschen, ansonsten DM in Euro!\n");    
    eingabe = getchar();
    
    if(eingabe == '1')
        umrechnung_ed_();

    else
        umrechnung_de();
        
    return 0;
    
}

int umrechnung_ed(void)
{
    char i;
    float ausgabe;
    
    for (i = 1; i <=100; i++)
    {
        ausgabe = i * 1.95583;
        printf("%d --> %.2f\n", i, ausgabe);
        if(i >= 10)
            i += 9;
    }
    return 0;
}

int umrechnung_ed_(void)
{
    char i = 1;
    float ausgabe;
    
    while(i <=100)
    {
        ausgabe = i * 1.95583;
        printf("%d --> %.2f\n", i, ausgabe);
        
        if(i >= 10)
            i += 10;
        else
            i++;
    }
    return 0;
}

int umrechnung_de(void)
{
    char i;
    float ausgabe;
    
    for (i = 1; i <=10; i++)
    {
        ausgabe = i / 1.95583;
        printf("%d --> %.2f\n", i, ausgabe);
    }
    return 0;
}



Musterlösung (Tasin)

Nassi-Shneiderman-Diagramm:

A2_1.png

Quellcode:

#include <stdio.h>

int main()
{
    unsigned wert=1;
    float wertKonv=0.f;
    
    while (wert<=10)
    {
        wertKonv = wert * 1.95583f;   
        printf("%2u --> %.2f\n", wert, wertKonv);        
        wert=wert+1;
    }

    return 0;
}



Das Programm soll nun erweitert werden:

  • Das Programm soll zuerst mit der Funktion getchar() ein Zeichen einlesen, das festlegt
    ob 1 EUR bis 10 EUR in DM
    oder 1 DM bis 10 DM in Euro umgerechnet werden sollen.
  • Wird eine 1 (mit anschließendem <Enter>) eingeben, dann wird von EUR -> DM umgewandelt,
    andernfalls wird von DM -> EUR umgewandelt.
  • Der Abfrage soll ein geeigneter Text vorangestellt werden, der dem Anwender mitteilt, was zu tun ist.


  • Modifizieren Sie umrechnung.c entsprechend, erstellen Sie das Programm und testen Sie es.

#include <stdio.h>

int main()
{
    unsigned wert=1;
    float wertKonv=0.f;
    char richtung='\0';
    
    puts("Umrechnungstabelle");
    puts("\nWaehlen Sie aus:");
    puts("  (1) Euro -> DM");
    puts("  (2) DM   -> Euro");
    
    /* Hier wird printf() und nicht puts() verwendet, damit der Cursor in der 
       Zeile bleibt.
    */
    printf("Auswahl: ");
    richtung=getchar();
    
    /* Etwas Zeilenabstand zur Tabelle erzeugen */
    putchar('\n');
    while (wert<=10)
    {
        if (richtung=='1')
            wertKonv = wert * 1.95583f;   
        else
            wertKonv = wert / 1.95583f;   
            
        printf("%2u --> %.2f\n", wert, wertKonv);        
        wert=wert+1;
    }

    return 0;
}



Alternative nach der Bewertung:

#include <stdio.h>

/* Nun wird die Auswahl aus der Schleife entfernt
   --> Geschwindigkeit
 */
int main()
{
    unsigned wert=1;
    float wertKonv=0.f;
    float faktor=1.95583f;
    char richtung='\0';
    
    puts("Umrechnungstabelle");
    puts("\nWaehlen Sie aus:");
    puts("  (1) Euro -> DM");
    puts("  (2) DM   -> Euro");
    
    /* Hier wird printf() verwendet, damit der Cursor in der 
       Zeile bleibt.
    */
    printf("Auswahl: ");
    richtung=getchar();
    
    /* Da der Faktor fuer Auswahl '1' schon vordefiniert ist,
       muss dieser nur im anderen Fall korrigiert werden.
    */
    if (richtung!='1')
        faktor = 1 / 1.95583f;   

    /* Etwas Zeilenabstand zur Tabelle erzeugen */
    putchar('\n');
    
    while (wert<=10)
    {
        wertKonv = wert * faktor;   
            
        printf("%2u --> %.2f\n", wert, wertKonv);        
        wert=wert+1;
    }

    return 0;
}



Weitere Alternative nach der Bewertung:

#include <stdio.h>

/* Nun soll auf wertKonv verzichtet werden
   --> dies kann den Speicherbedarf senken
 */
int main()
{
    unsigned wert=1;
    float faktor=1.95583f;
    char richtung='\0';
    
    puts("Umrechnungstabelle");
    puts("\nWaehlen Sie aus:");
    puts("  (1) Euro -> DM");
    puts("  (2) DM   -> Euro");
    
    /* Hier wird printf() verwendet, damit der Cursor in der 
       Zeile bleibt.
    */
    printf("Auswahl: ");
    richtung=getchar();
    
    /* Da der Faktor fuer Auswahl '1' schon vordefiniert ist,
       muss dieser nur im anderen Fall korrigiert werden.
    */
    if (richtung!='1')
        faktor = 1 / 1.95583f;   

    /* Etwas Zeilenabstand zur Tabelle erzeugen */
    putchar('\n');
    
    while (wert<=10)
    {
        printf("%2u --> %.2f\n", wert, wert * faktor);        
        wert=wert+1;
    }

    return 0;
}

Das Programm soll nun nochmals erweitert werden:

  • Das Programm soll nach der Ausgabe der Umrechnungstabelle für 1 EUR/DM bis 10 EUR/DM auch die Werte von 20 EUR/DM bis 100 EUR/DM in Zehnerschritten ausgeben.
  • Dies soll zuerst mit einer weiteren Schleife realisiert werden, die von 20 bis 100 zählt und nach jedem Iterationsschritt den Zähler um 10 erhöht.


  • Modifizieren Sie umrechnung.c entsprechend, erstellen, bewerten und testen Sie das Programm.
#include <stdio.h>

/* Nun soll eine weitere Schleife hinzugefuegt werden,
   um die Tabelle von 20 - 100 in Zehnerschritten zu ergänzen.
 */
int main()
{
    unsigned wert=1;
    float faktor=1.95583f;
    char richtung='\0';
    
    puts("Umrechnungstabelle");
    puts("\nWaehlen Sie aus:");
    puts("  (1) Euro -> DM");
    puts("  (2) DM   -> Euro");
    
    /* Hier wird printf() verwendet, damit der Cursor in der 
       Zeile bleibt.
    */
    printf("Auswahl: ");
    richtung=getchar();
    
    /* Da der Faktor fuer Auswahl '1' schon vordefiniert ist,
       muss dieser nur im anderen Fall korrigiert werden.
    */
    if (richtung!='1')
        faktor = 1 / 1.95583f;   

    /* Etwas Zeilenabstand zur Tabelle erzeugen */
    putchar('\n');
    
    while (wert<=10)
    {
        /* Formatieranweisung wird korrigiert, weil 
           3-stellige Ausgaben erwartet werden -->
           6 Stellen insgesamt (inkl. Dezimalpunkt), davon
           2 Dezimalstellen
        */
        printf("%3u --> %6.2f\n", wert, wert * faktor);        
        wert=wert+1;
    }

    wert=20;
    while (wert<=100)
    {
        /* Formatieranweisung wird korrigiert, weil 
           3-stellige Ausgaben erwartet werden. 
           6 Stellen insgesamt (inkl. Dezimalpunkt), davon
           2 Dezimalstellen
        */
        printf("%3u --> %6.2f\n", wert, wert * faktor);        
        wert=wert+10;
    }

    return 0;
}



Das Programm soll nun verändert werden:

  • Als nächstes soll die Aufgabenstellung in einer Schleife realisiert werden.


  • Erstellen Sie zuerst ein Nassi-Shneiderman-Diagramm.
  • Modifizieren Sie umrechnung.c entsprechend, erstellen, bewerten und testen Sie das Programm.



Nassi-Shneiderman-Diagramm:

A2_4.png

Quellcode:

#include <stdio.h>

/* Nun soll die 2. Schleife in die erste integriert werden.
 */
int main()
{
    unsigned wert=1;
    float faktor=1.95583f;
    char richtung='\0';
    
    puts("Umrechnungstabelle");
    puts("\nWaehlen Sie aus:");
    puts("  (1) Euro -> DM");
    puts("  (2) DM   -> Euro");
    
    /* Hier wird printf() verwendet, damit der Cursor in der 
       Zeile bleibt.
    */
    printf("Auswahl: ");
    richtung=getchar();
    
    /* Da der Faktor fuer Auswahl '1' schon vordefiniert ist,
       muss dieser nur im anderen Fall korrigiert werden.
    */
    if (richtung!='1')
        faktor = 1 / 1.95583f;   

    /* Etwas Zeilenabstand zur Tabelle erzeugen */
    putchar('\n');
    
    while (wert<=100)
    {
        /* Formatieranweisung wird korrigiert, weil 
           3-stellige Ausgaben erwartet werden -->
           6 Stellen insgesamt (inkl. Dezimalpunkt), davon
           2 Dezimalstellen
        */
        printf("%3u --> %6.2f\n", wert, wert * faktor);        
        if (wert>=10)
            wert=wert+10;
        else
            wert=wert+1;
    }

    return 0;
}


Links

Uebungen Algorithmen und Datenstrukturen
Unterlagen Algorithmen und Datenstrukturen
Praktikum Algorithmen und Datenstrukturen
Zur Hauptseite