5.2.20
01/25/20

Diff for AlgoDat_LA2 between 4 and 5

+ 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:
<geshi<code type="text">  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
</geshi></code>


++ Erarbeitete Lösung des Tutoriums SS 13

<geshi<code type="c">#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;
}
</geshi></code>



 _

++ Musterlösung (Tasin) 

Nassi-Shneiderman-Diagramm:

[[image A2_1.png]]

Quellcode:
<geshi<code type="c">#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;
}
</geshi></code>

 _

++++ 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.


<geshi<code type="c">#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;
}

</geshi></code>

 _

Alternative nach der Bewertung:

<geshi<code type="c">#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;
}

</geshi></code>
 
 _

Weitere Alternative nach der Bewertung:

<geshi<code type="c">#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;
}

</geshi></code>

++++ 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.

<geshi<code type="c">#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;
}

</geshi></code>
 
 _

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

[[image A2_4.png]]

Quellcode:
<geshi<code type="c">#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;
}

</geshi></code>

 
----
++ Links
((AlgoDat_Uebungen|Uebungen Algorithmen und Datenstrukturen))
((AlgoDat_Unterlagen|Unterlagen Algorithmen und Datenstrukturen))
((AlgoDat_Praktikum|Praktikum Algorithmen und Datenstrukturen))
((WikiHome|Zur((Wiki/Home|Zur Hauptseite))