größte Zahlen aus einer Tabelle herausfiltern
-
hallo,
kann mir jemand verraten, wie ich bei einer Tabelle mit 8 Zeilen und 3 Spalten die 10 größten Zahlen bestimmen und am Bildschirm ausgeben kann?
Allerdings ohne Arrays zu verwenden und dazu innerhalb einer for-Schleife die von 1-8 durchläuft.
Danke für jede Hilfe!
-
was ist für dich eine Tabelle und wie hast du sie in deinem Programm abgebildet?
-
Es geht um das d'Hondtsche Höchstzahlverfahren:
Partei A Partei B Partei C
100000 80000 200001 100000 80000 20000
2 50000 40000 10000
3 33333 26666 6666
. . . .
. . . .
8 12500 10000 2500Aus dieser Tabelle sollen die n größten(z.b.10) Ergebnisse ausgewählt werden.
Ich brauche nur einen kleinen Ansatz wie ich die Zahlen untereinander der Größe nach vergleichen kann.
Im Code hab ich es einstweilen so dargestellt:
max_A=0; max_B=0; max_C=0; for(i=1;i<=8;i++) { printf("%4d", i); zahl_A=Stimmen_A/i; zahl_B=Stimmen_B/i; zahl_C=Stimmen_C/i; if(zahl_A>max_A) max_A=zahl_A; if(zahl_B>max_B) max_B=zahl_B; if(zahl_C>max_C) max_C=zahl_C; if((max_A>zahl_B) && (max_A>zahl_C)) { max_A=zahl_A; printf("%19d", max_A); } if((max_B>zahl_C) && (max_B>zahl_A)) { max_B=zahl_B; printf("%15d", max_B); } if((max_C>zahl_A) && (max_C>zahl_B)) { max_C=zahl_C; printf("%16d", max_C); } printf("\n"); }
[/code][/cpp]
-
wie kommen denn die zahlen in die variablen Stimmen_A, Stimmen_B, Stimmen_C rein
-
Zur Durchführung des Verfahrens werden die Stimmergebnisse der Parteien fortlaufend durch die Zahlen 1,2,3,4... dividiert. Sind n Sitze im zu vergeben, so werden die n größten Divisionsergebisse ausgewählt und die zugehörigen Parteien erhalten für jede ausgewählte Zahl einen Sitz.
Ich fürchte der Fehler liegt beim Größenvergleich der Zahlen.
Ich brauche nur einen kleinen Ansatz damit ich weiß wo der Fehler liegt.
so sieht der bisher von mir erstellte Code aus:
#include "stdafx.h" #include "stdio.h" #include "stdlib.h" main() { int i,max_A,max_B,max_C,Sitze,Stimmen_A,Stimmen_B,Stimmen_C; int zahl_A,zahl_B,zahl_C,sitze_A,sitze_B,sitze_C,summe; printf("Sitze:"); scanf("%d", &Sitze); printf("Stimmen Partei A:"); scanf("%d", &Stimmen_A); printf("Stimmen Partei B:"); scanf("%d", &Stimmen_B); printf("Stimmen Partei C:"); scanf("%d", &Stimmen_C); printf("\n"); printf(" Partei A Partei B Partei C\n"); printf("Stimmen %d %d %d", Stimmen_A, Stimmen_B, Stimmen_C); printf("\n"); printf("\n"); fflush(stdout); max_A=0; max_B=0; max_C=0; sitze_A=0; sitze_B=0; sitze_C=0; for(i=1;i<=8;i++) { printf("%4d", i); zahl_A=Stimmen_A/i; // printf("%19d", zahl_A); zahl_B=Stimmen_B/i; // printf("%15d", zahl_B); zahl_C=Stimmen_C/i; // printf("%16d", zahl_C); if(zahl_A>max_A) max_A=zahl_A; if(zahl_B>max_B) max_B=zahl_B; if(zahl_C>max_C) max_C=zahl_C; if((max_A>zahl_B) && (max_A>zahl_C)) { max_A=zahl_A; sitze_A=sitze_A+1; printf("%19d", max_A); } if((max_B>zahl_C) && (max_B>zahl_A)) { max_B=zahl_B; sitze_B=sitze_B+1; printf("%15d", max_B); } if((max_C>zahl_A) && (max_C>zahl_B)) { max_C=zahl_C; sitze_C=sitze_C+1; printf("%16d", max_C); } summe=sitze_A+sitze_B+sitze_C; if(summe>=Sitze) break; printf("\n"); } printf("\n"); printf("\n"); printf("Sitze %d %d %d\n", sitze_A, sitze_B, sitze_C); printf("\n"); printf("\n"); return 0; }
-
paddypatrick schrieb:
hallo,
kann mir jemand verraten, wie ich bei einer Tabelle mit 8 Zeilen und 3 Spalten die 10 größten Zahlen bestimmen und am Bildschirm ausgeben kann?
Allerdings ohne Arrays zu verwenden und dazu innerhalb einer for-Schleife die von 1-8 durchläuft.
Danke für jede Hilfe!
wieso ohne arrays zu verwenden? wie willst du sonst die zwischenergebnisse speichern? das ergebnis ist doch erst dann eindeutig, wenn die z.b. 10 größten zahlen feststehen. darum musst du die werte puffern.
ich würde mir dafür eine struktur anlegen:
typedef struct { char partei; unsigned zahl; }Hoechstzahl;
und dann ein array dieser strukturen anlegen.
Hoechstzahl hoechstzahlen[10] = {0};
da kannst du die werte der größe nach einsortieren.
-
ich bin noch ein Programmieranfänger, in meinem C/C++ Buch ist dieses Beispiel noch weit von Arrays entfernt, deswegen muss es eine andere Möglichkeit geben, diese z.b. 10 größten Divisionsergebnisse auszuwählen
-
ohne arrays ist das ganz schön kagge, wa.
main() { int i; int A = 416, B = 338, C = 246; int a = 0, b = 0, c = 0; int ca = A, cb = B, cc = C; int as = 0, bs = 0, cs = 0; int an = 0, bn = 0, cn = 0; for (i=1; i<=10000; i++ ) { a = ca; b = cb; c = cc; if ( a == 0 && b == 0 && c == 0 ) break; ca = A/(i+1); cb = B/(i+1); cc = C/(i+1); as = bs = cs = 0; an++; bn++; cn++; if (ca > b) { bn--; b = ca; as = 1; } if ( (an + bn + cn) >= 10 ) break; if (!as && ca > c) { cn--; c = ca; } if ( (an + bn + cn) >= 10 ) break; if (cb > a) { an--; a = cb; bs = 1; } if ( (an + bn + cn) >= 10 ) break; if (!bs && cb > c) { cn--; c = cb; bs = 1; } if ( (an + bn + cn) >= 10 ) break; if (cc > a) { an--; a = cc; cs = 1; } if ( (an + bn + cn) >= 10 ) break; if (!cs && cc > b) { bn--; b = cc; } if ( (an + bn + cn) >= 10 ) break; } printf ("A %d\n B %d\n C %d\n", an, bn, cn ); return 0; }
jetzt stell dir mal den code bei 5 parteien vor, ätzend. mit nem array sind das nur ein paar zeilen.
gruß,
a.n.
-
Danke für die Hilfe!