Struktogramm in Programm umwandeln[Arrays]



  • Ich habe mal eine Frage und zwar wäre es möglich, dass einer mir be dem Thema Array helfen kann.

    Folgendermaßen sieht das Struktogramm aus:

    http://i44.tinypic.com/1zewple.png

    Leider komme ich net drauf wie es funktionieren soll.

    Mit Freundlichen Grüßen



  • zeig doch mal deinen ansatz, also mit schleifen solltest dich schon auskennen.
    dann brauchst nur noch scanf() und printf() und ab geht die post;)

    lg lolo



  • Chibox schrieb:

    Ich habe mal eine Frage und zwar wäre es möglich, dass einer mir be dem Thema Array helfen kann.

    Ja.
    🙂



  • mngbd schrieb:

    Ja. 🙂

    ^^
    btw. ich liebe deine signatur, da freu ich mich jeden tag wieder aufs neue das zu lesen 😃

    lg lolo



  • noobLolo schrieb:

    btw. ich liebe deine signatur, da freu ich mich jeden tag wieder aufs neue das zu lesen 😃

    Und das beste ist: wenn's ohnehin schon so oft hier steht, muss er es nicht mehr dazusagen.
    🙂



  • rofl



  • falls du nicht weiter kommst. frag doch mal Samyboy

    lg lolo



  • Ich werde später meinen Quellcode posten, wie weit ich gekommen bin.
    Und Ich verzichte lieber auf die Sache mit Samboy, da ich leider was lernen will und dies geht am besten nur mit "lerning by doing".

    Nur leider verstehe ich dieses Strukogramm nur teilweise.

    Edit: Bin gerade hier(Also relativ noch am Anfang).

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int tag[365];  
      int i;
      float schnitt;
    
      for(i=0; i<29; i++]
      {
               printf("Bitte Geben Sie Die Temperatur für Tag x ein: ");
               scanf("%d",&i)
      }
    
      system("PAUSE");	
      return 0;
    }
    


  • Chibox schrieb:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int tag[365];  
      int i;
      float schnitt;
      
      for(i=0; i<=29; i++)
      {
               printf("Bitte Geben Sie Die Temperatur für Tag x ein: ");
               scanf("%d",&tag[i]);
      }
      
      
      
      system("PAUSE");	
      return 0;
    }
    

    bin leider auch nicht so der struktogram maler, machs lieber gleich in code form 😃



  • Ich soll ja von dem oberen Strukogramm in einem Programm zum laufen bekommen 😉



  • Chibox schrieb:

    Nur leider verstehe ich dieses Strukogramm nur teilweise.

    Macht nichts, ich auch.

    Ich hab das mal umgebaut, so dass es auch mit Fehleingaben zurecht kommt.

    #include <stdio.h>
    #include <stdarg.h>
    
    /* Zeilenpuffer leeren. */
    inline void cb(void)
    {
        int c;
        while ((c = getchar()) != '\n' && c != EOF)
            ;
    }
    
    /* Den 'prompt' formatieren und ausgeben.
       Dann Einlesen, bis eine Zahl kommt, die zu 'sfmt' passt, und nach *p
       schreiben.
       Nach Fehleingaben nochmals den 'prompt' anzeigen. */
    void readnumber(void *p, char *sfmt, char *prompt, ...)
    {
        int count;
        va_list args;
    
        va_start(args, prompt);
    
        do
        {
            vprintf(prompt, args);
            count = scanf(sfmt, p);
            cb();
        }
        while (count < 1);    /* wiederholen, solange weniger als eine Zahl eingegeben wurde */
    
        va_end(args);
    }
    
    int main(void)
    {
        double tag[30];    // in dem Struktoding kommen nur 30 Tage vor
    
        for (int i = 0; i < 30; i++)
            readnumber(&tag[i], "%lf", "Bitte Geben Sie Die Temperatur für Tag %d ein: ", i);
    
        return 0;
    }
    

    readnumber() schenk ich dir, macht die Eingabe vermutlich ein wenig angenehmer.
    🙂

    Nachtrag: Wahrscheinlich sollst du Fliesskommawerte für die Temperatur verwenden. Ich hab es nun so gemacht, dass readnumber() einen Formatstring für scanf() annimt und damit auf den Typ des erwarteten Wertes warten kann.



  • Die anderen Werte kannst du dann so einlesen:

    int main(void)
    {
        double tag[30];    // in dem Struktoding kommen nur 30 Tage vor
        int ugrenze, ogrenze;
    
        for (int i = 0; i < 30; i++)
            readnumber(&tag[i], "%lf", "Bitte Geben Sie Die Temperatur für Tag %d ein: ", i);
    
        do
            readnumber(&ugrenze, "%d", "Untere Grenze: ");
        while (ugrenze < 0 || ugrenze >= sizeof tag);   /* solange, bis ugrenze ein gültiger
                                                           Index fuer 'tag' ist. */
    
        /* usw. */
    
        return 0;
    }
    

    🙂



  • #include <stdio.h>
    #include <stdlib.h>
    
    #define DAYS_IN_MONTH 30
    
    typedef struct
    {
    	int min;
    	int max;
    } AverageData;
    
    void readMonth(double *days);
    void readDay(double *day);
    AverageData readAverageData();
    void calculateAverage(AverageData avgData, double *values);
    
    int main(void)
    {
    	double day[DAYS_IN_MONTH];
    
    	readMonth(day);
    
    	calculateAverage(readAverageData(), day);
    }
    
    void readMonth(double *days)
    {
    	int i;
    	for (i = 0; i < DAYS_IN_MONTH; ++i)
    	{
    		printf("--- Temperatur am Tag %i ---\n", i + 1);
    		readDay(&days[i]);
    	}
    }
    
    void readDay(double *day)
    {
    	printf("Temperatur: ");
    	scanf("%lf", day);
    	printf("\n");
    }
    
    AverageData readAverageData()
    {
    	AverageData data;
    
    	do
    	{
    		printf("Untere Grenze: ");
    		scanf("%i", &data.min);
    
    		printf("Obere Grenze: ");
    		scanf("%i", &data.max);
    	} while(!(data.min >= 0 && data.min < data.max && data.max > data.min && data.max <= DAYS_IN_MONTH));
    
    	return data;
    }
    
    void calculateAverage(AverageData avgData, double *values)
    {
    	int i;
    	int anzahlTage = avgData.max - avgData.min;
    	double summe = 0;
    
    	for (i = avgData.min; i < avgData.max; ++i)
    	{
    		printf("Tag %i: %lf\n", i + 1, values[i]);
    
    		summe += values[i];
    	}
    
    	printf("%i Tag(e), Mittelwert: %lf\n", anzahlTage, summe / anzahlTage);
    }
    

    Irgendwie sowas ist wohl verlangt.

    Wobei ich die Rechnung abgewandelt habe. Ich rechne nicht obereGrenze - untereGrenze + 1 sondern:

    int anzahlTage = avgData.max - avgData.min;
    


  • asdasjkdsd schrieb:

    void readDay(double *day)
    {
    	printf("Temperatur: ");
    	scanf("%lf", day);
    	printf("\n");
    }
    

    Was hast du gegen meine sorgfältig konstruierte read-Funktion?
    🙂



  • mngbd schrieb:

    asdasjkdsd schrieb:

    void readDay(double *day)
    {
    	printf("Temperatur: ");
    	scanf("%lf", day);
    	printf("\n");
    }
    

    Was hast du gegen meine sorgfältig konstruierte read-Funktion?
    🙂

    Ich empfind die Sache mit den dynamischen Parametern als etwas übertrieben ür eine solch kleine Sache. Die Fehlerüberprüfung ist zwar auch gut, aber wurde im Struktogramm ja nicht verlangt. Ich habe mich mehr oder weniger auf die Vorgabe beschränkt, wobe ich inzwischen vermute, dass meine Lösung weit über dem Erwatungshorizont liegt. Na ja, was solls 🤡


Anmelden zum Antworten