Ein Histogramm in C erstellen

cwriter

Erfahrenes Mitglied
So bis hier her erstmal weiter komme ich nicht .
Ist deine maximale Konzentrationszeit sehr kurz oder warum kommst du nicht weiter?
Schau dir doch den Code an: So, wie du die Ausgabe machst, ist elcount immer 0, wenn du die Ausgabe machst. Und die Sternchen können ja gar nicht ausgegeben werden, wenn du die Ausgabe davon gelöschst hast.

Entweder ist dein Lehrer absolut unbrauchbar oder du bist nicht gerade der Flessigste... Programmieren kann man nicht auswendiglernen. Man muss in Code denken. Lies den Code und verstehe ihn zuerst.

cwriter
 

cwriter

Erfahrenes Mitglied
Ich habe verstanden das es 0 ausgibt wie kann ich es ändern das er die Zahlen aus der Datei einliest.
Es geht an diesem Punkt nicht mehr um das Auslesen der Datei, sondern um die Verarbeitung der Werte. Und die findet ja schon statt, nur die Ausgabe nicht.

Überlege dir folgendes:
1) An welcher Stelle im Code beinhaltet elcount die Anzahl Elemente der Klasse?
2) Wie kannst du elcount Sternchen ausgeben?
3) Wann kannst du das printf-Statement ausführen?

cwriter
 

cwriter

Erfahrenes Mitglied
Ich brauche ein Tipp ! Ich komme wirklich nicht mehr weiter :(
Sorry, aber wenn du jetzt, selbst mit der Schritt-für-Schritt-Anleitung nicht mehr weiterkommst, kann ich nicht mehr helfen. Die nächste Stufe wäre ja, dir direkt den Code zu geben, dann hätte ich dir die Aufgaben gemacht und du hättest nichts gelernt.

Du weisst aber schon, wie man Code liest? In erster Linie einfach Zeile für Zeile. Wenn du auf Loops triffst, kannst du entweder für jede Eingabe jeden Loopdurchgang durchgehen oder du machst es schlauer und überlegst dir einfach, was der Loop als Block macht.

Ich kann dir nur noch als Tipp geben, dass du den ganzen Code in etwa 5 Minuten fertigstellen kannst (ohne die Analyse, aber die sollte auch nicht so lange gehen).

Wenn wir ehrlich zueinander sind, wissen wir doch beide, dass du dich nur dummstellst, um nicht selbst überlegen zu müssen. Was bringt dir das? Du hast schon recht viel Zeit dafür aufgebracht, auf meine Antworten zu warten. In dieser Zeit hättest du locker die Möglichkeiten durchgehen können. Und vor allem hättest du es selbst gelernt, statt nur abzuschreiben.

Wenn hier jemand im Forum anderer Meinung ist, kann dieser/diese dir gerne noch mehr helfen, aber von mir bekommst du keine Komplettlösung mehr, nur noch Anleitungen und Erklärungen.

cwriter
 

BasicC

Erfahrenes Mitglied
Code:
#include <stdio.h>

#include <stdlib.h>

#include <math.h>



int main() {

   

    int array[10000];

    int counter[25] = {0};

    int i=0, z=0, n=0;

    int idx;

   

    double avg=0,zahl;

   

    int minimum,maximum;

   

    FILE *fp;

   

    if((fp=fopen("/Users/********/Desktop/INF 1/A4-2_Beispieldaten/random_normal.dat", "r"))==NULL) {

       

        fprintf(stderr, "Konnte Datei nicht finden\n");

        return 1;

    }

   

    while(fscanf(fp, "%d",&array[i])==1) {

       

        if ( array[i] < 0 || array[i]  > 9999 ) {

           

            printf("ERROR\n");

           

            return 1;

        }

       

        z+=array[i];

       

        i++;

       

        n++;

    }

   

    avg=(double)z/n;

   

    minimum=maximum=array[0];

   

    for (i=0;i<n;i++) {

       

        zahl=array[i];

       

        if (zahl<minimum) {

            minimum=zahl;

        }

       

        if(zahl>maximum){

            maximum=zahl;

        }

        idx= (array[i]-1)/40;

        counter[idx]++;

    }

   

    double oben=pow(array[i]-avg,2);

   

    double summe=0;

   

    for(i=0;i<n;i++) {

       

        summe+=sqrt(oben/n);

       

    }

   int k = ceil((float)(maximum - minimum) / 25.f);

   

    printf("Es wurden 10000 Zahlen eingelesen.\n");

    printf("Histogramm - Anzahl Werte je Intervall\n");

    printf("---------------------------------------\n");

    printf("---------------------------------------\n");

    printf("Intervallgroesse ist %d\n", k);

    printf("Nr.(von-bis) Anzahl:\n");

    printf("----------------------\n");

   

   

   

        for(size_t j = 0; j < 25; j++)

        {

       

           

        int classmin = j * k;

           

        int classmax = (j+1) * k;

           

      printf("%4zu. (%3d - %4d): %d \n", j,classmin+1,classmax,counter[j]);

           

            for()

        }

    }

So ,wenn du mir nur noch helfen würdest wie ich die For schleife bearbeite wäre das lieb.
Mein Gehirn brennt schon.
 

BasicC

Erfahrenes Mitglied
Was bedeutet dieses size_t?

die For schleife habe ich auch hinbekommen die Sternchen kommen aber vor den Klammern nicht danach.