BearVsMan Posted November 5, 2009 Posted November 5, 2009 én azt gondoltam, hogy elõre meg kell adni. Akkor az csak én nem tudom, hogy kell Mondtak, hogy vektorosan is meg lehetne oldani a feladatot. De mivel azt még végképp nem tanultuk rögtön tudnák, hogy ki segített. Na meg így azért értem is, hogy mi miért van ott. Vektort meg ugye nem tanultunk A programozási tételek megfelelõ alkalmazását honnan tudnám a legkönnyebben megtanulni?
Pjotr Posted November 5, 2009 Posted November 5, 2009 Ismét a saját megoldásom, ami előzőleg fent volt, abban volt egy "apró" hiba, azt is javítottam (fájlolvashatóság vizsgálatánál). #include<iostream> #include<fstream> using namespace std; void novel(int *&t, int &n) { int *uj = new int [n+1]; for(int j=0;j<n;j++) { uj[j]=t[j]; } delete [] t; t=uj; n++; } int main() { int hiba=0,max=0,bal=1,jobb=-1,meret=1; //ezeket fogjuk használni: hiba jelzése; maximum index; bal és jobb koordináta(!) int *meresek = new int [meret]; //ide kerülnek a mérések char *ezt = new char [255]; //ide rakjuk, melyik fájlt szeretnénk do{ system("cls"); //tisztítás if(hiba==1) //ez majd csak hiba esetén íródik ki { cout<<"Fajlmegnyitasi hiba!\n"; } cout<<"Fajl neve? "; cin>>ezt; //olvassuk a fájlnevet ifstream olvas(ezt); //megnyitjuk if(!olvas) //sikeres volt-e? { hiba=1; } else { hiba=0; } olvas.close(); //itt becsukjuk }while(hiba==1); //hátultesztelés ifstream olvas(ezt); //újra megnyitjuk for(int i=0;!olvas.eof();i++) //adatok beolvasása { if(i==meret) { novel(meresek,meret); } olvas>>meresek[i]; if(meresek[i]>meresek[max]) //egyből nézzük is a maximumot { max=i; //az indexet mentjük, nem a konkrét értéket } } olvas.close(); //becsukjuk a fájlt do{ bal-=1; //eltolás, merre is van a bal oldali határ? if(-bal>max) {hiba=1;} }while(meresek[max+bal]!=0 && -bal<=max); do{ jobb+=1; //eltolás, merre is van a jobb oldali határ? if(jobb>(meret-max)) { switch(hiba) { case 0 : hiba=3; break; case 1 : hiba=2; break; } } }while(meresek[max+jobb]!=0 && jobb<=(meret-max)); system("cls"); switch(hiba) { case 0 : {cout<<"Az (elso) legmagasabb sziget a "<<max+bal+1<<". es a "<<max+jobb+1<<". meresi pont kozott helyezkedik el,\nlegmagasabb csucsa "<<meresek[max]<<" egyseg magas.\n\n"; break;} case 1 : {cout<<"Nem tudjuk a bal oldali hatarat az (elso) legnagyobb szigetnek,\nam a jobbat igen, az a "<<max+jobb+1<<". meresi pontnal volt,\na legmagasabb pont "<<meresek[max]<<" egyseg magas.\n\n"; break;} case 2 : {cout<<"Egy szigeten mozogtunk, nem tudjuk, hol a hatar,\na legmagasabb pont: "<<meresek[max]<<" egyseg magas.\n\n"; break;} case 3 : {cout<<"Nem tudjuk a jobb oldali hatarat az (elso) legnagyobb szigetnek,\nam a balt igen, az a "<<max+bal+1<<". meresi pontnal volt,\na legmagasabb pont "<<meresek[max]<<" egyseg magas.\n\n";} } delete [] ezt; //töröljük a fájltnevet delete [] meresek; //töröljük az adatokat return 0; } Ez működik az összes említett példára is.
BearVsMan Posted November 7, 2009 Posted November 7, 2009 (edited) Nem számítottam rá, hogy ilyen hamar csinálsz egy javítást Na akkor azt szeretném még megkérdezni, hogy azt hogy tudnám megvizsgálni, hogy az első mérési ponttol az elso 0-ig és az utolso nullatol az utolso meresi pontig viszgalja azt, hogy az nem lehet sziget. Mivel a feladat úgy határoz, hogy szárazföldről szárazföldre indultunk (tehát nem lehet szigetről indulni, vagy érkezni). Sajnos nem tudtam megírni eddig helyesen a feltételt :/ Mérési példa. azt hiszem, ha kipróbálod úgy könnyebben megérted mit akarok modani 3 4 3 1 2 0 0 0 0 2 1 2 2 7 4 3 0 0 0 0 1 2 6 5 15 3 2 Talán úgy egyszerűbb, hogy az első nullátol az utolsó nulláig vizsgálja a méréseket? Edited November 7, 2009 by KGigi
KGigi Posted November 7, 2009 Posted November 7, 2009 Csak nem ELTE progalap? Ajánlom az előadást. És légy szíves találd meg az ékezetes betűket!
Pjotr Posted November 7, 2009 Posted November 7, 2009 Akkor -- ha jól értem -- azt szeretnéd, ha csak az első és az utolsó nulla közötti területet vizsgálja meg a legnagyobb után vizslatva. Nem nagy cucc, a maximum keresés előtt meg kell határozni a tömbben elfoglalt indexüket, majd a maximum keresés for ciklusát kell a kapott adatok szerint belőni.
KGigi Posted November 7, 2009 Posted November 7, 2009 Nem erről van szó. Nem indulhat szigetről, tehát az első és utolsó értéknek nagyobbnak kell lennie nullánál. Ha ez nem így van, akkor hibás a bemenet. De ne írjuk már meg helyette a komplett beadandót, mert így második félévben meg fog halni.
Pjotr Posted November 7, 2009 Posted November 7, 2009 Ja, látom! Szalagtűzőről jövök, na. De az legalább ilyen könnyű. Egyébként az előzőt is megcsinálta majdnem maga, a mostani kódomban csak a növelés az igazán extra, de azt nekem a tanár mutatta, azóta tudom is. Talán nem fog miattam megbukni.
KGigi Posted November 7, 2009 Posted November 7, 2009 Mi ebben az extra? Egyébként progalapon nekünk dinamikus tömb sem volt, nem hogy mutatók. Kihasználtuk, hogy a int n; cin >> n; int t[n]; g++-al lefordul.
Pjotr Posted November 7, 2009 Posted November 7, 2009 Visual Studio-val nem, de elsõ félévben nekünk sem kellett foglalkozni dinamikus tömbökkel, se mutatókkal.
KGigi Posted November 7, 2009 Posted November 7, 2009 Visual Studioval nem, de mi elsõ két félévben CodeBlocks-ot használunk g++-al Windows alatt, utána pedig sima parancssoros g++-t és geditet linux alatt.
BearVsMan Posted November 8, 2009 Posted November 8, 2009 Köszi a segítséget. Igyekszem megcsinálni a programot, hogy minél kevesebb hibája legyen KGigi a célom nem az, hogy helyettem csinálják meg a beadandómat. Csupán segítséget kérek, mert tényleg nem megy minden
KGigi Posted November 8, 2009 Posted November 8, 2009 Igazából egy maxkert kell csinálni egy absztrakciós szinttel a szokásos felett. Az inicializálásnak, következő elemnek, aktuális elemnek, utolsó elemnek mind megfelel valami. Az elemek pedig nem tömbelemek, hanem szigetek. A következő szigetet pl. úgy kapod meg, hogy végigpörgeted a nullákat. Menni fog, én is az eltén kezdtem programozni, és simán ötös lettem.
Botond Posted November 9, 2009 Posted November 9, 2009 Letöltöttem a Microsoft Visual Studio 2008 Express Edition-t és lenne pár kérdésem vele kapcsolatban. 1.: Hogyan lehet drag'n'drop módszerrel összerakni a programom kinézetét? Kerestem, hogy hol lehet esetleg nézetet váltani, vagy ilyesmi, de nem találtam sehol. 2.: Olyan programot szeretnék összeállítani, aminek meg kell adni pontokat, és hogy azok össze vannak-e kötve egy másik pontal, és a kapott adatokat kirajzolja, így pl. testeket lehetne megjeleníteni a képernyõn. Az egésszel az a baj, hogy nem találtam olyan osztályt, ami képes ilyenre. 3.: A programokat ugye általában három fajta fájl építi fel: .cpp, .h, .rc. Az .rc ugye a resource fájl. Ez mire jó pontosan?
kiotoonegun Posted November 9, 2009 Posted November 9, 2009 Sziasztok srácok! Nagyon megköszönném, ha segítenétek! C-ben kezdtem programozni, elsős vagyok egyetemen, és a tanárunk feladott egy hibás, egyszerű C programot, amiben van 5 hiba. Ahány hibát találunk, annyi az érdemjegyünk! Elég kutyaütő vagyok benne. Nagyon megköszönnééem a segitségtenétek a c be kezdem programozni 1 ös vagyok egyetemen és a tanárunk felad egy hibás egyszerü C programot amibe van 5 hiba ahány hibát találunk annyi az érdemjegyünk!!Elég kutyaütő vagyok benne segitenétek megkeresni a hibákat benne??Nagyon megköszönném!!! int strlen(char*str){ char*tmp=*str; if(!strt) return 0; while(str+#); return*str-*tmp; } Lehet hogy több hiba vann benne mert a barátom egy lapra irta kézzel aztán elég rondán iirrrr ide irnátok a teljes programot nekem kijavitvaaaaa !!NAgyon sürgös lenne!!!!!!!!!!!!!!!!!!!! Nagyon köszönöm! kioto
Pjotr Posted November 9, 2009 Posted November 9, 2009 kiotoonegun, ugye nem gondoltad komolyan, hogy valaki (én nem, nem értek a C-hez) leírja neked 1:1-ben, mi a hiba? Mellesleg, ha nem tudsz magyarul írni, akkor hogyan akarsz C-ül helyesen írni? Hiszen magyar nyelven tanulnád a C-t, ami így elég nehéz (szerintem).
arpsoft Posted November 10, 2009 Posted November 10, 2009 Na jó, kicsit közelebb viszlek: 2. sor, 3. sor, 5. sor, 6.sor 2x
Pjotr Posted November 20, 2009 Posted November 20, 2009 char *tmp=(char*)malloc(argv[1]*sizeof(char)); Ebbe a sorba miért köt bele? Másik kérdésem, hogy hogyan tudom kiíratni a változómat byte-onként? Be 1. szam: 257 Ki: 1 1 0 0
arpsoft Posted November 20, 2009 Posted November 20, 2009 Azért köt bele, mert az argv karakteres tömb. Egy módszer a kiiratásra: ciklus kiírod: változó mod 256 változó=egészrész(változó/256) amíg változó nem 0 Ez a legkisebb helyértékkel kezdi, aztán megy fölfelé. Ha fordítva szeretnéd, akkor hasonló az eljárás, csak kettő hatványaival kell osztani, majd csökkenteni a változót, amíg el nem fogy. A legmagasabb helyértéket 2-es alapú logaritmussal tudod meghatározni. De van millió másik megoldás is.
Pjotr Posted November 20, 2009 Posted November 20, 2009 ÁÁÁ, tényleg lemaradt az atoi! És tényleg ez lehet a megoldás, engem megkavart egy másféle, amit találtam, az hexában írta ki. Mindjárt kipróbálom, köszi! --- Klasszul működik! Egyébként nem értem, miért akaszt meg a programozás oprendszerekből, mikor progon meg megy jól.
Pjotr Posted November 21, 2009 Posted November 21, 2009 Egy kicsit már meg lett bolondítva a dolog. Elõször egy char tömböt foglalok le, de 4-szer akkorát, mint szeretnék. Aztán erre a memóritarületre ráhúzok egy int tömböt (char: 1 byte, int: 4 byte). Int-ként olvasok. Char-ként írok. Azért kell így, mert ez a végleges feladat, de elég perverz, nem?
KGigi Posted November 28, 2009 Posted November 28, 2009 Üdv! Lenne egy hatalmas problémám. Van egy szép nagy programom, ami elszáll. A vicc az, hogy a mainben tettem töréspontokat, és egészen addig, hogy return 0;, tökéletesen működik minden. Viszont a return-nel nem áll meg a program, hanem fut tovább. Pedig egyébként pontosan azt csinálja, amit kellene. A VS 2008 debuggere.
KGigi Posted November 28, 2009 Posted November 28, 2009 Rájöttem. A prof által adott sablon volt hibás. Kétszer szabadította fel a memóriát. Ha nem nézem meg linux alatt, és nem ad ki egy memory mapet, soha nem jövök rá... Eszembe sem jutott volna, hogy nem én szúrtam el valamit.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now