Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht
 
	#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
    
    int array[10000];
    
    int i=0, z=0, n=0;
    
    double avg=0,zahl;
    
    int minimum,maximum;
    
    FILE *fp;
    
    if((fp=fopen("/Users/**********/Desktop/INF 1/A4-2_Beispieldaten/random_uniform.txt", "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;
        }
    }
    
    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");
    
    int elcount[1000];
    
        for(size_t j = 0; j < 25; j++)
        {
        int elcount = 0;
            
        int classmin = j * k;
            
        int classmax = (j+1) * k;
            
       printf("%4zu. (%3d - %4d): %d \n", j,classmin+1,classmax,elcount);
            
            for(size_t elcount = 0; elcount < n; elcount++)
            {
                
                if(array[elcount] > classmin && array[elcount] > classmax)
                    
                    ++elcount;
            }
        }
    }

Schreiben Sie das Programm aus der o. g. 2. Aufgabe so um, dass ein Histogramm der eingelesenen Zahlen ausgegeben wird. Klassifizieren sie die eingelesenen Werte dazu in z. B. 25 gleich große Intervalle und geben Sie die Anzahl der in jedem Intervall gelege- nen Eingabewerte aus. Visualisieren Sie die Anzahlen zusätzlich durch '*'-Reihen pro- portionaler Länge, so dass Sie in etwa folgende Ausgabe erzeugen:

    Es wurden 10000 Zahlen eingelesen.
    Histogramm - Anzahl Werte je Intervall
    ======================================
    Intervallgroesse = 40
     Nr.(von - bis):  Anzahl
    ------------------------

0.     (.        0 - 40) : 2 *
1.    ( 41 - 80): 3 *

12.( 481- 520): 1295
13.( 521- 560): 1272
14.( 561- 600): 1022
 :
23.( 921- 960): 1
24.( 961-1000): 1
Kontrollsumme:  10000

 

Ich kriege die Anzahl nicht hin und die Sternchen -.-

Bearbeitet von Tikorz

Hi, du hast ein paar Logikfehler drin:

in deiner Schleife mit der Ausgabe setzt du in jeder runde elcount=0 dann gibst du mit printf dein Ergebnis aus und führst dann deine Berechnung für elcount durch. Die Reihenfolge solltest du nochmal überarbeiten.

Dann setzt du in der einen Zeile 

int elcount[1000];

und später 

int elcount = 0;

Für eins musst du dich schon entscheiden, oder zumindest die variablen unterschiedlich benennen. 

Bearbeitet von Mttkrb

Hallo,

erst einmal solltest du die Aufgabenstellung verstehen und dir dann überlegen, wie das sinnvoll lösen kann und nicht einfach drauf los coden. Dein Coding sieht sehr zusammengewürfelt aus und du scheinst gar nicht zu verstehen, was du da genau machst. Das wird auch von dem, was man in deinem Thread, den @Mttkrb gepostet hat, lesen kann, deutlich.

Du hast eine Reihe an Zahlen, die in ein Array gelesen werden.

Daraus sollst du ein Histogramm erstellen. D.h. du sollst den Bereich, in dem sich die eingelesenen Zahlen befinden, in x Intervalle (hier ist als Beispiel 25 angegeben) unterteilen und schauen, wieviele deiner zuvor eingelesenen Werte in den jeweiligen Intervallen liegen.

Dann solltest du dir klar machen, was du brauchst und was du bereits hast.

Was du aktuell hast:

  • ein Array der Größe 10.000, in dem Zahlen stehen
  • Den kleinsten und größten Wert dieser Zahlen
  • die Anzahl der Intervalle, die du bilden sollst
  • die Intervallgröße, die du mit
vor 15 Stunden schrieb Tikorz:

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

berechnet hast.

Was gesucht wird:

  • Die Menge der Werte, die sich im jeweiligen Intervall befinden

Jetzt kommt die Denkarbeit!

Du musst also alle Werte des zuvor eingelesenen Arrays darauf prüfen, in welchem Intervall sie sich befinden (das klingt sehr nach einer Schleife) und für jeden Wert den "Counter" des entsprechenden Intervalls hochzählen (dazu bietet sich wohl ein Array an).

Deine Intervalle sollten übrigens so aussehen:

1. Intervall von Minimalwert bis Minimalwert + Intervallgröße

2. Intervall von (Minimalwert + Intervallgröße)+1 bis Minimalwert + 2 * Intervallgröße

3. Intervall von (Minimalwert + 2 * Intervallgröße)+1 bis Minimalwert + 3 * Intervallgröße

...

25. Intervall von (Minimalwert + 24 * Intervallgröße)+1 bis Maximalwert (= Minimalwert + 25 * Intervallgröße)

Hier sollte dir eine Regelmäßigkeit auffallen, die du nutzen kannst, um die Werte des eingelesenen Arrays den passenden Intervallen zuzuordnen (Tipp: ganzzahlige Division).

Die Ausgabe später sollte dann recht banal sein.

Bearbeitet von Rienne

Sorry.. für die späte Antwort.

ich muss zugeben ich habe nicht viel verstanden von der Aufgabe und zum letzten Teil habe ich mir von meinem Prof hilfe geholt. @Rienne hab ich es besser verstehen können danke nochmal.

Und ja ich hole mir gerne hilfe von zwei Seiten, weil es im Endeffekt zwei verschiedene Meinungen geben kann.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.