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.

  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:


#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:


#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:




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