1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ein Histogramm in C erstellen

Dieses Thema im Forum "C/C++" wurde erstellt von Tikorz, 29. November 2017.

  1. cwriter

    cwriter Erfahrenes Mitglied

    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
     
  2. Tikorz

    Tikorz Mitglied

    Ich habe verstanden das es 0 ausgibt wie kann ich es ändern das er die Zahlen aus der Datei einliest.
     
  3. cwriter

    cwriter Erfahrenes Mitglied

    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
     
  4. Tikorz

    Tikorz Mitglied

    Ich brauche ein Tipp ! Ich komme wirklich nicht mehr weiter :(
     
  5. cwriter

    cwriter Erfahrenes Mitglied

    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
     
    Technipion gefällt das.
  6. Tikorz

    Tikorz Mitglied

    Code (Text):
    1. #include <stdio.h>
    2.  
    3. #include <stdlib.h>
    4.  
    5. #include <math.h>
    6.  
    7.  
    8.  
    9. int main() {
    10.  
    11.    
    12.  
    13.     int array[10000];
    14.  
    15.     int counter[25] = {0};
    16.  
    17.     int i=0, z=0, n=0;
    18.  
    19.     int idx;
    20.  
    21.    
    22.  
    23.     double avg=0,zahl;
    24.  
    25.    
    26.  
    27.     int minimum,maximum;
    28.  
    29.    
    30.  
    31.     FILE *fp;
    32.  
    33.    
    34.  
    35.     if((fp=fopen("/Users/********/Desktop/INF 1/A4-2_Beispieldaten/random_normal.dat", "r"))==NULL) {
    36.  
    37.        
    38.  
    39.         fprintf(stderr, "Konnte Datei nicht finden\n");
    40.  
    41.         return 1;
    42.  
    43.     }
    44.  
    45.    
    46.  
    47.     while(fscanf(fp, "%d",&array[i])==1) {
    48.  
    49.        
    50.  
    51.         if ( array[i] < 0 || array[i]  > 9999 ) {
    52.  
    53.            
    54.  
    55.             printf("ERROR\n");
    56.  
    57.            
    58.  
    59.             return 1;
    60.  
    61.         }
    62.  
    63.        
    64.  
    65.         z+=array[i];
    66.  
    67.        
    68.  
    69.         i++;
    70.  
    71.        
    72.  
    73.         n++;
    74.  
    75.     }
    76.  
    77.    
    78.  
    79.     avg=(double)z/n;
    80.  
    81.    
    82.  
    83.     minimum=maximum=array[0];
    84.  
    85.    
    86.  
    87.     for (i=0;i<n;i++) {
    88.  
    89.        
    90.  
    91.         zahl=array[i];
    92.  
    93.        
    94.  
    95.         if (zahl<minimum) {
    96.  
    97.             minimum=zahl;
    98.  
    99.         }
    100.  
    101.        
    102.  
    103.         if(zahl>maximum){
    104.  
    105.             maximum=zahl;
    106.  
    107.         }
    108.  
    109.         idx= (array[i]-1)/40;
    110.  
    111.         counter[idx]++;
    112.  
    113.     }
    114.  
    115.    
    116.  
    117.     double oben=pow(array[i]-avg,2);
    118.  
    119.    
    120.  
    121.     double summe=0;
    122.  
    123.    
    124.  
    125.     for(i=0;i<n;i++) {
    126.  
    127.        
    128.  
    129.         summe+=sqrt(oben/n);
    130.  
    131.        
    132.  
    133.     }
    134.  
    135.    int k = ceil((float)(maximum - minimum) / 25.f);
    136.  
    137.    
    138.  
    139.     printf("Es wurden 10000 Zahlen eingelesen.\n");
    140.  
    141.     printf("Histogramm - Anzahl Werte je Intervall\n");
    142.  
    143.     printf("---------------------------------------\n");
    144.  
    145.     printf("---------------------------------------\n");
    146.  
    147.     printf("Intervallgroesse ist %d\n", k);
    148.  
    149.     printf("Nr.(von-bis) Anzahl:\n");
    150.  
    151.     printf("----------------------\n");
    152.  
    153.    
    154.  
    155.    
    156.  
    157.    
    158.  
    159.         for(size_t j = 0; j < 25; j++)
    160.  
    161.         {
    162.  
    163.        
    164.  
    165.            
    166.  
    167.         int classmin = j * k;
    168.  
    169.            
    170.  
    171.         int classmax = (j+1) * k;
    172.  
    173.            
    174.  
    175.       printf("%4zu. (%3d - %4d): %d \n", j,classmin+1,classmax,counter[j]);
    176.  
    177.            
    178.  
    179.             for()
    180.  
    181.         }
    182.  
    183.     }
    So ,wenn du mir nur noch helfen würdest wie ich die For schleife bearbeite wäre das lieb.
    Mein Gehirn brennt schon.
     
  7. Tikorz

    Tikorz Mitglied

    Was bedeutet dieses size_t?

    die For schleife habe ich auch hinbekommen die Sternchen kommen aber vor den Klammern nicht danach.
     
Die Seite wird geladen...
Ähnliche Themen - Histogramm erstellen
  1. Great200
    Antworten:
    7
    Aufrufe:
    943
  2. Krokodilklemme
    Antworten:
    12
    Aufrufe:
    2.479
  3. inedu
    Antworten:
    1
    Aufrufe:
    2.059
  4. milli2000
    Antworten:
    10
    Aufrufe:
    1.559
  5. Farid19
    Antworten:
    9
    Aufrufe:
    7.665