newbi frage :(
-
Na du nimmst dir eine neue Variable max mit dem Anfangswert 0.
Dann läufst du das ganze Array durch und wenn der Wert eines Feldes größer ist als max, dann setzt du max auf diesen Wert.
-
wenns dann keinen größeren wert als max gibt, dann kannste ja den eintrag anzeigen... musst aber die zahl des buch-arrays dann ins char casten... nun musst du nur überlegen, wie du verhinderst, dass nicht 2 mal dasselbe ausgegeben wird(tipp: veränder den wert des arrays dieser stelle)
-
SeppSchrot schrieb:
Na du nimmst dir eine neue Variable max mit dem Anfangswert 0.
Dann läufst du das ganze Array durch und wenn der Wert eines Feldes größer ist als max, dann setzt du max auf diesen Wert.na soll ich dann "i" überprüfen oder "buch[i]" ... ô.0
n quelltextbeispiel wäre hilfreich
-
da_ElViS schrieb:
SeppSchrot schrieb:
Na du nimmst dir eine neue Variable max mit dem Anfangswert 0.
Dann läufst du das ganze Array durch und wenn der Wert eines Feldes größer ist als max, dann setzt du max auf diesen Wert.na soll ich dann "i" überprüfen oder "buch[i]" ... ô.0
n quelltextbeispiel wäre hilfreichwenn du aber immer nur alles vorgesetzt bekommst, dann hilft dir das nicht wirklich weiter... überleg doch erst mal ne zeit... nicht nur eben mal ne min. wenn man selber drauf kommt, dann ist's einfach besser, auch wenn's länger dauert...
-
Hier ist der Quellcode für deine Lösung:
#include <iostream>
#include <iomanip.h>
#include <string.h>
#include <ctype.h>using namespace std;
void main()
{char line[81];
char let[4] = "aA ";
int flet[26] = {0};
unsigned len;
int i;cout << "\n"
"------- BUCHSTABENHŽUFIGKEITEN FESTSTELLEN ------"
"\n\nGeben Sie Zeichen ein "
"(max. 80, Ende mit <ENTER>):\n\n";cin.getline(line,81);
len = strlen(line);for (i = 0; i < len; i++)
{
if(islower(line[i]))
flet[line[i]-'a']++;
else if (isupper(line[i]))
flet[line[i]-'A']++;
}cout << "\n\n";
for (i = 0; i < 26; i++)
{
cout << let;
let[0]++;
let[1]++;
}cout << "\n";
for (i = 0; i < 26; i++)
cout << setw(2) << flet[i] << " ";
}
-
also nochmal allgemein
wegen den max wertint max = 0; for( int i = 0; i < len; i++) // len = laenge vom array; bsp arr[] { if( max < arr[i] ) { max++; // ja ich klammere auch bei einer anweisung ;) } } //am schluss jetzt ist max halt die groesste haeufigkeit
du solltest wirlich lernen wie man pseudocode in c++/c code umsetzen kann.
denn wie du siehst ist dieses beispiel wirklich trivial
-
upsala die müdigkeit hat mich!!!!!
.... // max++; <-------------- falsch! max = arr[i]; // <----- richtig!
-
ja danke für die hilfe, aber so weit hat ich es ja im prinzip schon, also jedenfalls hab ich das so versucht(4 zahlen absteigend auflisten):
int zahl[4]; int max; zahl[1]=7; zahl[2]=9; zahl[3]=2; zahl[4]=6; for (int i=1; i<4; i++) { if( max < arr[i] ) { max = arr[i]; printf("%d", max); }
aber da listet er nur die zur zeit höchste zahl aus.. also "7999" steht denn da.. aber wie mach ich dass, das dann halt "9762" da steht?
ich hab versucht da noch ne for schleife rumzulegen - aba dann hat garnix mehr funktioniert
-
Naja also wenn du richtig gelesen hättest meinen langen Beitrag, dann hättest du gewusst das du
Einmal eine Schleife brauchst um max zu bestimmen. Da steht EXTRA das da noch nichts ausgegeben wird.
du kannst es dir einfach machen ( um mal dein bsp zu nehmen )
int zahl[4]; int max; zahl[1]=7; zahl[2]=9; zahl[3]=2; zahl[4]=6; for (int i=1; i<4; i++) { if( max < zahl[i] ) max = zahl[i]; // printf("%d", max); <--- ich sagte in der schleife nichts ausgeben } // so jetzt ist max = 9, und das ist gut so int flag = 0 do { flag = 0; // für abruchbedingung ( gut bei grossen arrays ) for( int i = 0; i < 4 && flag == 0; i++) { if( zahl[i] == max ) { cout << zahl[i] << endl; flag = 1; } } max--; // der nächst kleinere möglichere wert }while( max > 0)
Wenn es jetzt eine zahl nicht geben sollte, wie z.b. die 8 in deinem Bsp. macht das nichts.
Ist jetzt mal auf die schnelle ein Algoritmus der tut. Maybe nicht der intelligenteste, aber bei heutigen PC kein grosser Akt.
Natürlich würde ich das nicht per Hand programmieren sondern entsprechende klassen benutzen, wo man dann die int's reinspeichert und dann gleich absteigend sorieren kann. die vector klasse müsste das können. Aber das ist ein anderes Kapitel. Kannst ja mal hier im Forum nach "vector" suchen.
falls der fehlerteufel drinnen sein sollte, bitte bescheid sagen.
-
achso falls du z.b. auch ne 0 hast im array dann muss es heissen
..... while ( max > -1)
wenn du jetzt auch negative zahlen hast, oder sonst was. dann musst die kleinste bestimmen in einer schleife. z.b. kommt dann -344 raus
dann heisst es dann
while( max > -345)
-
achso, falls es auch doppelte zahlen geben kann. z.b. 4mal die 9 oder so und du möchtest dann auch nciht einmal sondern 4mal die 9 ausgeben, dann lösche das mit dem flag bitte.
-
jo danke, das hab ich gesucht
aba hab jetzt mal versucht die beiden dinger zu verbinden (also das auslesen der anzahl von den eigegebenen zeichen, und das "sortieren" nach der anzahl) :
also das hier
int main() { int buch[128] = {0}; char *wort = "hallo"; for (int i=0;i<wort;i++) buch[wort[i]]++; for (int i=0;i<128;i++) if (buch[i]) printf("%c : %d\n", i, buch[i]); }
mit dem hier:
int zahl[4]; int max; zahl[1]=7; zahl[2]=9; zahl[3]=2; zahl[4]=6; for (int i=1; i<4; i++) { if( max < zahl[i] ) max = zahl[i]; } do { for( int i = 0; i < 4 ; i++) { if( zahl[i] == max ) { cout << zahl[i] << endl; } } max--; }while( max > 0)
also dass dann da steht (2:l, 1:a, 1:h, 1
aba ich habs wiedermal (-.-) nich hinbekommen ... ja.. ich weiss - ich muss das selber machen um es zu lernen .. aba ich bekomms halt nich hin - und was kann ich'n sonst machn ausser nach hilfe zu fragen wenn ich es par tout nich hinbekomm... - ich hab mir die vorherigen kapitel noch n parr mal durchgelesen, aba ich hab tortzdem kein durchblick für die aufgabe... könnta das vielleicht "verbinden" und kurz sagen wie ihr das gemacht habt? würde mir ja schon weiterhelfen wenn ich die lösung sehe und es dann nochmal selber versuche... pls
thx im voraus
-
rolf ey
denk mal selber darueber nachdein erster teil
üble bugs drinnen.
vom prinzip kann ich nur schätzen was du da machen willstne da helf ich jetzt nicht.
zahl[1]=7; hier z.b. ist mir vorher gar nciht aufgefallen
es fängt mir 0 an nicht mit 1also zahl[0]
d.h. schau nochmal nach wie arrays gehen!
was du ja im 2ten teil hast, ist ein array wo du nur die anzahl drinnen hast. du hast da nirgends die buchstaben drinnen.
du kannst es so machen wie die einen es gesagt haben, oder meine lange fassung mit struct.
Wobei beides gut istda
1. du Ascci gut lernen solltest. und wie man von ints so auf die buchstaben kommt
2. struct zu kennen NIE verkehrt ist, ganz im gegenteil.
// was soll das hier sein??? for (int i=0;i<128;i++) // 128 mal machst du es! if (buch[i]) printf("%c : %d\n", i, buch[i]); // if(buch[i]) ist ja immer true // bei einem if macht man i.d.r einen VERGLEICH. du vergleichst ja NICHTS. dann kannst es dir gleich sparen }
buch[wort[i]]++; <--- sehr "mutig", was wolltest du damit machen? erklärs mal in eigenen sätzen.
also FAZIT:
nochmal alle aufgaben, die vorher im buch gestellt waren NOCHMALS machen.
-
Sei doch mal ehrlich zu dir selbst!
wenn wir dir jetzt weiter auch noch das bissl Quelltext hier reinstellen kopierst du das auch 1:1 und damit ist das thema fuer dich dann gegessen.
Pustekuchen!hier wurde dir jetzt mehrmals gesagt du sollst den größten Wert im Array rausfinden und dann sehen wir weiter.
und nichtmal das kriegst du hin!also nimm dir jetzt ein geignetes Buch oder tutorial r>aus und versuch den aufbau eines Arrays und eine for schleife zu verstehen,
die richtige lösung steht hier im Thread versteckt sogar schon.
nichtmal den liest du dir durch, du schaust warscheinlich nur nach dem codefenster und kopierst den code 1:1 in deinenwo soll das denn hinfuehren
-
if(buch[i]) ist nicht immer true.... nur wenn buch[i] != 0 ist.... ansonsten ist es false und der inhalt wird nicht angezeigt....
-
newkid schrieb:
dein erster teil
üble bugs drinnen.
vom prinzip kann ich nur schätzen was du da machen willstEy Newkid,
damit meinst du hoffentlich nicht meinen geposteten Code
Der scheint nämlich so im Original belassen worden zu sein.Ich hab mir da schon was bei gedacht.
Wie leech schon sagt: Buchstaben die 0 mal vorkommen sollen ja nicht ausgegeben werden.buch[wort[i]]++; <--- sehr "mutig", was wolltest du damit machen? erklärs mal in eigenen sätzen.
Gerne: Das Feld wird an der Stelle, die dem Buchstaben des Wortes an der Stelle i entspricht, um 1 erhöht.
Was den Rest deines Comments angeht:
+ zustimm
-
SeppSchrot schrieb:
Gerne: Das Feld wird an der Stelle, die dem Buchstaben des Wortes an der Stelle i entspricht, um 1 erhöht.
Was den Rest deines Comments angeht:
+ zustimm
ups stimmt, jetzt wo du es sagst --->