Program bei Hausaufgabe [Zeile DinTabelle][struct]



  • Gute Abend,

    ich habe ein Problem und hoffe, dass Ihr mir helfen könnt.
    Ich habe die Aufgabe, ein Programm zu schreiben, was folgende DIN Tabelle abruft.

    Was habe ich falsch gemacht? Der sagt mir immer Variable nicht deklariert (ist!).

    Wie könnte ich mein Programm verbessern?
    VIELEN DANK!

    Durchmesser d1 Länge l1 Länge l2 Innengewinde d2
    20 22 5,0 M6
    25 24 6,0 M8
    30 36 7,5 M10
    40 54 9,5 M12
    50 54 12,0 M16
    60 70 15,0 M20
    70 70 18,0 M24
    80 90 22,0 M30
    90 90 22,0 M30

    geschrieben habe ich folgendes

    #include<stdio.h>
    void main()
    {
    	// Definition der verwendeten Variablen mit Datentyp
    	int i,z=0,d;
    
    	// Deklaration des structs zeile DIN1449
    
    	typedef struct
    	{
    		int durchmesser, l1;
    		float l2;
    		char innengewinde[3];
    	} zeileDIN1449;
    
    	// Definition und Initialisierung der tabelle DIN1449
    
    	zeileDIN1449 tabelleDIN1449[9]
    	={
    		{20,22, 5.0,"M6"},
    		{25,24, 6.0,"M8"},
    		{30,36, 7.5,"M10"},
    		{40,54, 9.5,"M12"},
    		{50,54, 12.0,"M16"},
    		{60,70, 15.0,"M20"},
    		{70,70, 18.0,"M24"},
    		{80,90, 22.0,"M30"},
    		{90,90, 22.0,"M30"},
    	};
    
    	do
    	{
    		// Benutzereingabe: Durchmesser
    		printf("Bitte Durchmesser im Bereich > 20 bis 90 eingeben");
    		scanf("%i",&durchmesser);
    	} while(durchmesser < 20||durchmesser > 90);
    
    	// Lineares Suchen
    	if (durchmesser==90)
    	z=8;
    
    	for(i=0;i<8;i++)
    	{
    		if(tabelleDIN1449[i].durchmesser<=durchmesser && durchmesser <tabelleDIN1449[i+1].durchmesser)
    		{
    			z=i;
    			break; //Eintrag gefunden, beenden der Schleife
    		}
    	}
    		// Ausgabe
    
    printf("\nFuer das Wellenende mit dem\n Durchmesser d1=%i:\n",durchmesser);
    printf("Laenge: l1=%i\n Laenge l2=%i\n Innengewinde d2=%s\n\n", tabelleDIN1449[z].l1, tabelleDIN1449[z].l2, tabelleDIN1449[z].innengewinde);
    }
    


  • Ich habe gerade gesehen, dass oben

    "{
    int durchmesser, l1;
    float l2;
    char innengewinde[3];
    }
    " steht. Habe die Laenge 2 schon in die zweite Zeite gesetzt mit nem int vor, ändert aber nichts an der Fehlermeldung



  • "M10" passt nicht in ein char innengewinde[3] , das müsste mindestens ein char innengewinde[4] sein.
    Du willst in Zeile 35 nach durchmesser einlesen, das Ding gibt es aber nicht. Musst du vorher noch deklarieren.
    Und zum Ausgeben von float's solltest du %f statt %i nehmen.
    🙂



  • Hallo,

    ich habe ein bisschen schränk gedacht 😞

    Hier mein Programm neu, aber es stürzt jetzt nach der Eingabe ab..

    #include<stdio.h>
    void main()
    {
    	// Definition der verwendeten Variablen mit Datentyp
    	int i, z=0, deingabe;
    
    	// Deklaration des structs zeile DIN1449
    	typedef struct
    	{
    		int durchmesser;
    		int laenge1;
    		float laenge2;
    		char innengewinde[4];
    	} zeileDIN1449;
    
    	// Definition und Initialisierung der tabelle DIN1449
    	zeileDIN1449 tabelleDIN1449[9]
    	={
    		{20,22,5.0,"M6"},
    		{25,24,6.0,"M8"},
    		{30,36,7.5,"M10"},
    		{40,54,9.5,"M12"},
    		{50,54,12.0,"M16"},
    		{60,70,15.0,"M20"},
    		{70,70,18.0,"M24"},
    		{80,90,22.0,"M30"},
    		{90,90,22.0,"M30"},
    	};
    
    	do
    	{
    		// Benutzereingabe: Durchmesser
    		printf("Bitte Durchmesser im Bereich > 20 bis 90 eingeben: ");
    		scanf("%i",&deingabe);
    	} while(deingabe < 20 || deingabe > 90);
    
    	// Lineares Suchen
    	//if (deingabe==90)
    	//z=8;
    
    	for(i=0;i<9;i++)
    	{
    		if(tabelleDIN1449[i].durchmesser<= deingabe && deingabe <tabelleDIN1449[i+1].durchmesser)
    		{
    			z=i;
    			break; //Eintrag gefunden, beenden der Schleife
    		}
    	}
    	// Ausgabe
    printf("\nDurchmesser d1=%i\nLaenge: l1=%i\n Laenge l2=%i\n Innengewinde d2=%s\n\n", deingabe, tabelleDIN1449[z].laenge1, tabelleDIN1449[z].laenge2, tabelleDIN1449[z].innengewinde);
    }
    


  • blabla shit. %f und schon gehts. DANKE!


Anmelden zum Antworten