Jump to content
GSForum - Segélyvonal

Programozás C/C++-ban


Recommended Posts

Posted

:o én azt gondoltam, hogy elõre meg kell adni.

Akkor az csak én nem tudom, hogy kell :D

 

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?

Posted

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.

Posted (edited)

:o 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 by KGigi
Posted

Csak nem ELTE progalap? Ajánlom az előadást. :)

 

És légy szíves találd meg az ékezetes betűket!

Posted

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.

Posted

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.

Posted

Ja, látom! Szalagtűzőről jövök, na. :hukk: De az legalább ilyen könnyű. :D

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.

Posted

Mi ebben az extra? :pislog: 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.

Posted

Visual Studio-val nem, de elsõ félévben nekünk sem kellett foglalkozni dinamikus tömbökkel, se mutatókkal.

Posted

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.

Posted

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 :(

Posted

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.

Posted

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?

Posted

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

Posted

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). :(

Posted

Na jó, kicsit közelebb viszlek:

2. sor, 3. sor, 5. sor, 6.sor 2x

  • 2 weeks later...
Posted

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 

Posted

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.

 

Posted

ÁÁÁ, tényleg lemaradt az atoi! :hátpersze:

É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! :istenvagy: Egyébként nem értem, miért akaszt meg a programozás oprendszerekből, mikor progon meg megy jól. :hmm::P

Posted

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? :)
Posted

Ü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.

Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...