Hirdetés

Új hozzászólás Aktív témák

  • elistvan
    őstag

    Ebben a programban jelenleg elég sok hiba van. Hirtelen néhány: A tartalmazza() függvényben a tomb címét hasonlítod a szam-hoz, nem a tomb egy elemét, itt tomb[i] kellene. Végig a kódban keverednek az íves (függvényhívás) és a szögletes (tömb eleme) zárójelek, ez így le sem tud fordulni. Mint pl. itt:

    tippeltszamok(i) = szam;

    vagy itt:

    if(tippeltszamok(i) == nyeroszamok[j]){

    A nyeroszamok-at fölöslegesen rakod át az emelkedo-be, mert már helyben rendezted azokat (ezért kiírni is fölösleges mindkettőt).

    Függvényekkel rövidíteni akkor tudod, ha több ismétlődő feladatot hajt végre a programod. Itt maximum a számok kiírása az ilyen, tehát sok rövidítésre nincs lehetőség, így gondolom inkább arról lenne szó, hogy függvényekkel struktúráld a programod (ettől nem rövidebb, hanem olvashatóbb lesz). Be kell azonosítanod az egyes blokkokat a programodban, amik egy önálló részfeladatot hajtanak végre, és ezeket ki tudod emelni egy-egy önálló függvénybe. Most kb. ezeket csinálja a programod:

    - tippek bekérése
    - tippek kiírása
    - nyerőszámok húzása
    - találatok megkeresése
    - nyerőszámok rendezése
    - nyerőszámok kiírása (elég 1x)
    - találatok kiírása

    Ezekre írhatsz függvényeket, amik megkapják bemenő paraméterben tömbö(ke)t, amivel dolgozniuk kell, hasonlóan a tartalmazza() függvényedhez. De ezek a függvények nem adnak semmilyen értéket vissza, void lesz a visszatérési típusuk és nem lesz bennük return.

    Szia!

    Köszi. Pont azt szerettem volna elérni, hogy átláthatóbb legyen. Rosszul fejeztem ki magam.

    A dupla kiírás eredeti célja az lett volna, hogy előbb simán kiírja a ciklus ahogy megtalálta a számot aztán emelkedő sorrendben. (Mint a tv-s sorsoláson.)

    A konkrét programon egy ilyen tömbös rövidítést meg tudnál mutatni? Mert ezt a részt nem igazán értem.

  • kovisoft
    őstag

    Az alábbi programomat, hogyan tudnám lerövidíteni függvényekkel? Tudom a tartalmazza az, de hogyan tudom, a találatokat és tippeket fügvényekkel megoldani?

    /*Kenorsolás program találatok számát irja ki, és a nyerőszámokat emelkedő sorrendben*/
    #include <stdlib.h>
    #include <time.h>
    #include <stdio.h>

    int tartalmazza(int tomb[], int hossz, int szam){
    for(int i=0;i<hossz;i++){
    if(tomb == szam){
    return 1;
    }
    }
    return 0;
    }

    int main(){
    int tippeltszamok[10] = {0};

    for(int i=0;i<10;i++){
    int talalat(i);
    int szam;
    printf("%d. szám: ", i+1);
    scanf("%d",&szam);
    if(szam >= 1 && szam <= 80 && !tartalmazza(tippeltszamok,10,szam)){
    tippeltszamok(i) = szam;
    }else{
    printf("Már tippelt vagy nem 1-80 közötti szám\n");
    i--;
    }
    }

    printf("A játékba küldött számok:\n");
    for(int i=0;i<10;i++){
    printf("%d ", tippeltszamok(i));
    }

    int nyeroszamok[20] = {0};

    for(int i=0;i<20;i++){
    int num = (rand() % (80 - 1 + 1)) + 1;
    if(num >= 1 && num <= 80 && !tartalmazza(nyeroszamok,20,num)){
    nyeroszamok(i) = num;
    }else{
    i--;
    }
    }

    int talalat[10] = {0};
    int tIndex = 0;
    for(int i=0;i<10;i++){
    for(int j=0;j<20;j++){
    if(tippeltszamok(i) == nyeroszamok[j]){
    talalat[tIndex++] = nyeroszamok[j];
    }
    }
    }
    int tmp;
    int j =0;
    int emelkedo[20] = {0};
    for( int i=0; i<10; i++)
    {
    for( int j=0; j<20; j++)
    {
    if(nyeroszamok[j] > nyeroszamok(i)) /*Ha a nyerőszámok tömb 1 eleme nagyobb mint a második*/
    {
    tmp = nyeroszamok(i); /*Az első elemet kitesszük a tmp változóba*/
    nyeroszamok(i) = nyeroszamok[j]; /*A második elem átkerül az első helyre a sorban*/
    nyeroszamok[j] = tmp; /*a tmp-ben tárolt 2. elem, átkerül a második helyre.*/
    }
    }
    }
    printf("\nAz e heti nyerőszámok növekvő sorrendben:\n");
    for(int i=0;i<20;i++)
    {
    emelkedo(i) = nyeroszamok(i);
    printf("%d ", emelkedo(i));
    }
    printf("\n\n");
    printf("\nA heti nyerőszámok pedig:\n");
    {
    for(int i=0;i<20;i++)
    {
    printf("%d ", nyeroszamok(i));
    }

    printf("\n%d találat:\n", tIndex);
    for(int i=0;i<tIndex;i++){
    printf("%d ", talalat(i));
    }
    }
    return 0;
    }

    Ebben a programban jelenleg elég sok hiba van. Hirtelen néhány: A tartalmazza() függvényben a tomb címét hasonlítod a szam-hoz, nem a tomb egy elemét, itt tomb[i] kellene. Végig a kódban keverednek az íves (függvényhívás) és a szögletes (tömb eleme) zárójelek, ez így le sem tud fordulni. Mint pl. itt:

    tippeltszamok(i) = szam;

    vagy itt:

    if(tippeltszamok(i) == nyeroszamok[j]){

    A nyeroszamok-at fölöslegesen rakod át az emelkedo-be, mert már helyben rendezted azokat (ezért kiírni is fölösleges mindkettőt).

    Függvényekkel rövidíteni akkor tudod, ha több ismétlődő feladatot hajt végre a programod. Itt maximum a számok kiírása az ilyen, tehát sok rövidítésre nincs lehetőség, így gondolom inkább arról lenne szó, hogy függvényekkel struktúráld a programod (ettől nem rövidebb, hanem olvashatóbb lesz). Be kell azonosítanod az egyes blokkokat a programodban, amik egy önálló részfeladatot hajtanak végre, és ezeket ki tudod emelni egy-egy önálló függvénybe. Most kb. ezeket csinálja a programod:

    - tippek bekérése
    - tippek kiírása
    - nyerőszámok húzása
    - találatok megkeresése
    - nyerőszámok rendezése
    - nyerőszámok kiírása (elég 1x)
    - találatok kiírása

    Ezekre írhatsz függvényeket, amik megkapják bemenő paraméterben tömbö(ke)t, amivel dolgozniuk kell, hasonlóan a tartalmazza() függvényedhez. De ezek a függvények nem adnak semmilyen értéket vissza, void lesz a visszatérési típusuk és nem lesz bennük return.

  • elistvan
    őstag

    Az alábbi programomat, hogyan tudnám lerövidíteni függvényekkel? Tudom a tartalmazza az, de hogyan tudom, a találatokat és tippeket fügvényekkel megoldani?

    /*Kenorsolás program találatok számát irja ki, és a nyerőszámokat emelkedő sorrendben*/
    #include <stdlib.h>
    #include <time.h>
    #include <stdio.h>

    int tartalmazza(int tomb[], int hossz, int szam){
    for(int i=0;i<hossz;i++){
    if(tomb == szam){
    return 1;
    }
    }
    return 0;
    }

    int main(){
    int tippeltszamok[10] = {0};

    for(int i=0;i<10;i++){
    int talalat(i);
    int szam;
    printf("%d. szám: ", i+1);
    scanf("%d",&szam);
    if(szam >= 1 && szam <= 80 && !tartalmazza(tippeltszamok,10,szam)){
    tippeltszamok(i) = szam;
    }else{
    printf("Már tippelt vagy nem 1-80 közötti szám\n");
    i--;
    }
    }

    printf("A játékba küldött számok:\n");
    for(int i=0;i<10;i++){
    printf("%d ", tippeltszamok(i));
    }

    int nyeroszamok[20] = {0};

    for(int i=0;i<20;i++){
    int num = (rand() % (80 - 1 + 1)) + 1;
    if(num >= 1 && num <= 80 && !tartalmazza(nyeroszamok,20,num)){
    nyeroszamok(i) = num;
    }else{
    i--;
    }
    }

    int talalat[10] = {0};
    int tIndex = 0;
    for(int i=0;i<10;i++){
    for(int j=0;j<20;j++){
    if(tippeltszamok(i) == nyeroszamok[j]){
    talalat[tIndex++] = nyeroszamok[j];
    }
    }
    }
    int tmp;
    int j =0;
    int emelkedo[20] = {0};
    for( int i=0; i<10; i++)
    {
    for( int j=0; j<20; j++)
    {
    if(nyeroszamok[j] > nyeroszamok(i)) /*Ha a nyerőszámok tömb 1 eleme nagyobb mint a második*/
    {
    tmp = nyeroszamok(i); /*Az első elemet kitesszük a tmp változóba*/
    nyeroszamok(i) = nyeroszamok[j]; /*A második elem átkerül az első helyre a sorban*/
    nyeroszamok[j] = tmp; /*a tmp-ben tárolt 2. elem, átkerül a második helyre.*/
    }
    }
    }
    printf("\nAz e heti nyerőszámok növekvő sorrendben:\n");
    for(int i=0;i<20;i++)
    {
    emelkedo(i) = nyeroszamok(i);
    printf("%d ", emelkedo(i));
    }
    printf("\n\n");
    printf("\nA heti nyerőszámok pedig:\n");
    {
    for(int i=0;i<20;i++)
    {
    printf("%d ", nyeroszamok(i));
    }

    printf("\n%d találat:\n", tIndex);
    for(int i=0;i<tIndex;i++){
    printf("%d ", talalat(i));
    }
    }
    return 0;
    }

  • kovisoft
    őstag

    Köszi a segítséget!

    Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:

    #include <stdio.h>
     
     
    typedef struct
    {
        unsigned int tomb[50];
        unsigned int szam, db;
        unsigned int meret, meret2;
    } Nehez;
     
     
    Nehez meret()
    {
        Nehez hazi;
        hazi.meret2=0;
        hazi.db=0;
     
        scanf("%u", &hazi.meret);
     
        return hazi;
    }
     
    Nehez beker()
    {
        Nehez hazi;
        unsigned int h, a;
     
        for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.szam);
            a=0;
            while(a<h && hazi.szam!=hazi.tomb[a])
                {
                a++;
                }
            if(a==h)
                {
                hazi.tomb[hazi.meret2]=hazi.szam;
                hazi.meret2++;
                }
            }
     
        return hazi;
    }
     
    Nehez rendez(Nehez hazi)
    {
        unsigned int h, a;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                if(hazi.tomb[h]>hazi.tomb[a])
                    {
                    hazi.szam=hazi.tomb[a];
                    hazi.tomb[a]=hazi.tomb[h];
                    hazi.tomb[h]=hazi.szam;
                    }
                }
            }
     
        return hazi;
    }
     
    Nehez szamol(Nehez hazi)
    {
        unsigned int h, a, z, i;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                for(z=a+1; z<hazi.meret2; z++)
                    {
                    for(i=z+1; i<hazi.meret2; i++)
                        {
                        if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z])
                            {
                            hazi.db++;
                            }
                        }
                    }
                }
            }
     
        return hazi;
    }
     
    void kiir(Nehez hazi)
    {
        printf("%u", hazi.db);
    }
     
     
     
    int main()
    {
        Nehez hazi;
     
        hazi=meret();
        hazi=beker();
     
        hazi=rendez(hazi);
        hazi=szamol(hazi);
     
        kiir(hazi);
     
        return 0;
    }


    Remek! Még annyit lehet egyszerűsíteni, hogy a beolvasásnál egy füst alatt el lehet intézni a rendezést is és az egyező számok kiszűrését is:

    Beolvasod a következő számot, megkeresed az első olyan szám indexét a (rendezett) tömbödben, aminél nem nagyobb. Ha megegyezik vele, akkor eldobod, mert van már ilyen szám. Ha pedig kisebb nála, akkor ettől az indextől kezdve eggyel hátrébb pakolod a számokat a tömbben, és beszúrod ide a beolvasott számot.

    És ne feledkezz meg az adatok ellenőrzéséről sem, pl. mi van, ha 50-nél nagyobb számot adnak meg méretnek? Ekkor ki fogsz címezni a tömbödből.

  • DEV_NULL
    őstag

    Szerintem a gond még azzal a résszel van, ahol kiszűröd az azonos számokat és csak a különbözőket pakolod át a hazi.cim-ből a hazi.cim2-be (ahol az ominózus ++ is van). Nem elég átrakni a ++-t a végére, hanem kicsit át kell alakítani magát a ciklust is, hiszen így most a 0-dik cim2 elembe belerakod a 0-dik és az 1-ső cim elemet is (a legelső elvész). Mivel a hazi.csere=0 elemet már a ciklus előtt átraktad, ezért a ciklust hazi.csere=1 értékről kellene indítani.

    Sokat segíthet, ha debug kiíratásokat helyezel el a kódban az egyes lépések után. Pl. kiírod a rendezett elemeket, az azonos elemek kiszűrése után maradtakat, ill. azokat a számnégyeseket, amikre egyeznek a megkívánt összegek. Ezekből látni fogod, hogy melyik lépésnél romlik el valami.

    Köszi a segítséget!

    Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:

    #include <stdio.h>
     
     
    typedef struct
    {
        unsigned int tomb[50];
        unsigned int szam, db;
        unsigned int meret, meret2;
    } Nehez;
     
     
    Nehez meret()
    {
        Nehez hazi;
        hazi.meret2=0;
        hazi.db=0;
     
        scanf("%u", &hazi.meret);
     
        return hazi;
    }
     
    Nehez beker()
    {
        Nehez hazi;
        unsigned int h, a;
     
        for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.szam);
            a=0;
            while(a<h && hazi.szam!=hazi.tomb[a])
                {
                a++;
                }
            if(a==h)
                {
                hazi.tomb[hazi.meret2]=hazi.szam;
                hazi.meret2++;
                }
            }
     
        return hazi;
    }
     
    Nehez rendez(Nehez hazi)
    {
        unsigned int h, a;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                if(hazi.tomb[h]>hazi.tomb[a])
                    {
                    hazi.szam=hazi.tomb[a];
                    hazi.tomb[a]=hazi.tomb[h];
                    hazi.tomb[h]=hazi.szam;
                    }
                }
            }
     
        return hazi;
    }
     
    Nehez szamol(Nehez hazi)
    {
        unsigned int h, a, z, i;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                for(z=a+1; z<hazi.meret2; z++)
                    {
                    for(i=z+1; i<hazi.meret2; i++)
                        {
                        if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z])
                            {
                            hazi.db++;
                            }
                        }
                    }
                }
            }
     
        return hazi;
    }
     
    void kiir(Nehez hazi)
    {
        printf("%u", hazi.db);
    }
     
     
     
    int main()
    {
        Nehez hazi;
     
        hazi=meret();
        hazi=beker();
     
        hazi=rendez(hazi);
        hazi=szamol(hazi);
     
        kiir(hazi);
     
        return 0;
    }


  • kovisoft
    őstag

    Szia!

    Köszi a választ. A ++t áttéve megszűnik a malloc hiba, viszont a kimeneten a darabszám, sajnos nem jó. Valamiért vagy több, vagy kevesebb, mint amennyinek lennie kellene...

    Szerintem a gond még azzal a résszel van, ahol kiszűröd az azonos számokat és csak a különbözőket pakolod át a hazi.cim-ből a hazi.cim2-be (ahol az ominózus ++ is van). Nem elég átrakni a ++-t a végére, hanem kicsit át kell alakítani magát a ciklust is, hiszen így most a 0-dik cim2 elembe belerakod a 0-dik és az 1-ső cim elemet is (a legelső elvész). Mivel a hazi.csere=0 elemet már a ciklus előtt átraktad, ezért a ciklust hazi.csere=1 értékről kellene indítani.

    Sokat segíthet, ha debug kiíratásokat helyezel el a kódban az egyes lépések után. Pl. kiírod a rendezett elemeket, az azonos elemek kiszűrése után maradtakat, ill. azokat a számnégyeseket, amikre egyeznek a megkívánt összegek. Ezekből látni fogod, hogy melyik lépésnél romlik el valami.

  • DEV_NULL
    őstag

    Csak tipp, de szerintem a lenti sorban kicímzel a hazi.cim2 tömbből, ugyanis amikor hazi.csere=hazi.meret2-1, akkor a ++ miatt hazi.cim2[hazi.meret2] lesz felülírva, de az már az allokált tömb után van:

               hazi.cim2[++hazi.csere]=hazi.cim[h];

    Elképzelhető, hogy elég lenne a ++-t hátulra tenni (hazi.csere++), de mondom ezt úgy, hogy nem értelmeztem, mit csinál pontosan a programod.

    Szia!

    Köszi a választ. A ++t áttéve megszűnik a malloc hiba, viszont a kimeneten a darabszám, sajnos nem jó. Valamiért vagy több, vagy kevesebb, mint amennyinek lennie kellene...

  • kovisoft
    őstag

    Sziasztok!

    A problémám amire tőletek várnék megoldást; a feladat egy C program ami először bekér egy számot, majd bekér ennyi de maximum 50 számot. Ezeket megszűri, hogy ne legyen benne ismétlődés, majd olyan ismétlődés nélküli számnégyeseket csinál belőlük ahol az első és utolsó szám összege megegyezik a második és harmadik szám összegével és a végén ezek darabszámát. Ezt egy robot ellenőrzi. Két gond van, az egyik, hogy malloc hibával elszáll, vagy ha program kimenete több ezer megfelelő számnégyes, akkor még néhány száz darab nullás számnégyest kipörget a végére... Én már kezdem feladni, bízom benne, tudtok segíteni. Remélem sikerül normálisan bemásolni a kódot, most írok ide először...

    Hiba: prog: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)

    Köszi előre is!

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct dec10Hazi
    {
        unsigned int meret, meret2;
        unsigned int csere, csere2;
        unsigned int *cim, *cim2;
        unsigned int tomb[4];
        unsigned int db;
    } Nehez;

    int main()
    {
       Nehez hazi;
        unsigned int h, a, z, i;

        scanf("%u", &hazi.meret);

        hazi.cim=malloc(sizeof(unsigned int)*hazi.meret);

       for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.cim[h]);
            }

       hazi.csere2=1;
        while(hazi.csere2)
            {
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                    hazi.csere=hazi.cim[h];
                    hazi.cim[h]=hazi.cim[h+1];
                    hazi.cim[h+1]=hazi.csere;
                    }
                }
            hazi.csere2=0;
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                   hazi.csere2=1;
                   break;
                   }
               }
            }

       hazi.meret2=0;
       for(h=0; h<hazi.meret-1; h++)
            {         
            if(hazi.cim[h]<hazi.cim[h+1])
                {            
                hazi.meret2++;
                }         
            }
        hazi.meret2++;

        hazi.cim2=malloc(sizeof(unsigned int)*hazi.meret2);

       h=0;
       hazi.csere=0;
       hazi.cim2[hazi.csere]=hazi.cim[h];
        h++;

       while(hazi.csere<hazi.meret2)
            {
           if(hazi.cim[h]>hazi.cim2[hazi.csere])
                {
               hazi.cim2[++hazi.csere]=hazi.cim[h];
                h++;
                }
           else  
                {
               h++;
               }
            }

       hazi.db=0;
      for(h=0; h<hazi.meret-3; h++)
            {         
           hazi.tomb[0]=hazi.cim2[h];
           for(a=h+1; a<hazi.meret-2; a++)
                {            
               hazi.tomb[1]=hazi.cim2[a];
                for(z=a+1; z<hazi.meret-1; z++)
                    {                 
                   hazi.tomb[2]=hazi.cim2[z];
                   for(i=z+1; i<hazi.meret; i++)
                        {                     
                       hazi.tomb[3]=hazi.cim2[i];
                       if(hazi.tomb[0]+hazi.tomb[3]==hazi.tomb[1]+hazi.tomb[2])
                            {
                            hazi.db++;
                            }
                        }
                   }
               }
            }

        printf("%u\n", hazi.db);

       free(hazi.cim);
        free(hazi.cim2);

        return 0;
    }

    Csak tipp, de szerintem a lenti sorban kicímzel a hazi.cim2 tömbből, ugyanis amikor hazi.csere=hazi.meret2-1, akkor a ++ miatt hazi.cim2[hazi.meret2] lesz felülírva, de az már az allokált tömb után van:

               hazi.cim2[++hazi.csere]=hazi.cim[h];

    Elképzelhető, hogy elég lenne a ++-t hátulra tenni (hazi.csere++), de mondom ezt úgy, hogy nem értelmeztem, mit csinál pontosan a programod.

  • DEV_NULL
    őstag

    Sziasztok!

    A problémám amire tőletek várnék megoldást; a feladat egy C program ami először bekér egy számot, majd bekér ennyi de maximum 50 számot. Ezeket megszűri, hogy ne legyen benne ismétlődés, majd olyan ismétlődés nélküli számnégyeseket csinál belőlük ahol az első és utolsó szám összege megegyezik a második és harmadik szám összegével és a végén ezek darabszámát. Ezt egy robot ellenőrzi. Két gond van, az egyik, hogy malloc hibával elszáll, vagy ha program kimenete több ezer megfelelő számnégyes, akkor még néhány száz darab nullás számnégyest kipörget a végére... Én már kezdem feladni, bízom benne, tudtok segíteni. Remélem sikerül normálisan bemásolni a kódot, most írok ide először...

    Hiba: prog: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)

    Köszi előre is!

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct dec10Hazi
    {
        unsigned int meret, meret2;
        unsigned int csere, csere2;
        unsigned int *cim, *cim2;
        unsigned int tomb[4];
        unsigned int db;
    } Nehez;

    int main()
    {
       Nehez hazi;
        unsigned int h, a, z, i;

        scanf("%u", &hazi.meret);

        hazi.cim=malloc(sizeof(unsigned int)*hazi.meret);

       for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.cim[h]);
            }

       hazi.csere2=1;
        while(hazi.csere2)
            {
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                    hazi.csere=hazi.cim[h];
                    hazi.cim[h]=hazi.cim[h+1];
                    hazi.cim[h+1]=hazi.csere;
                    }
                }
            hazi.csere2=0;
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                   hazi.csere2=1;
                   break;
                   }
               }
            }

       hazi.meret2=0;
       for(h=0; h<hazi.meret-1; h++)
            {         
            if(hazi.cim[h]<hazi.cim[h+1])
                {            
                hazi.meret2++;
                }         
            }
        hazi.meret2++;

        hazi.cim2=malloc(sizeof(unsigned int)*hazi.meret2);

       h=0;
       hazi.csere=0;
       hazi.cim2[hazi.csere]=hazi.cim[h];
        h++;

       while(hazi.csere<hazi.meret2)
            {
           if(hazi.cim[h]>hazi.cim2[hazi.csere])
                {
               hazi.cim2[++hazi.csere]=hazi.cim[h];
                h++;
                }
           else  
                {
               h++;
               }
            }

       hazi.db=0;
      for(h=0; h<hazi.meret-3; h++)
            {         
           hazi.tomb[0]=hazi.cim2[h];
           for(a=h+1; a<hazi.meret-2; a++)
                {            
               hazi.tomb[1]=hazi.cim2[a];
                for(z=a+1; z<hazi.meret-1; z++)
                    {                 
                   hazi.tomb[2]=hazi.cim2[z];
                   for(i=z+1; i<hazi.meret; i++)
                        {                     
                       hazi.tomb[3]=hazi.cim2[i];
                       if(hazi.tomb[0]+hazi.tomb[3]==hazi.tomb[1]+hazi.tomb[2])
                            {
                            hazi.db++;
                            }
                        }
                   }
               }
            }

        printf("%u\n", hazi.db);

       free(hazi.cim);
        free(hazi.cim2);

        return 0;
    }

  • #PeTeY#
    aktív tag

    Nagyon köszönöm, megnézem este.
    Amúgy miért n-i-1? Ezt a részt nem teljesen érem. :B

    Oké, megvan, csak át kellett gondolnom. :U

    A magyarázatoddal meg pláne. Nagyon köszi a segítséget.

  • kovisoft
    őstag

    Nagyon köszönöm, megnézem este.
    Amúgy miért n-i-1? Ezt a részt nem teljesen érem. :B

    Az i=0,1,...,n-1 sorozatot úgy fordítod meg, hogy i helyett n-i-1 -et használsz (i=0 --> n-i-1=n-1, i=n-1 --> n-i-1=0). És akkor mindenhol indulhat minden i-s és j-s ciklusod 0-ról egyesével felfelé, és a sorokat úgy fordítod meg, hogy i helyett n-i-1 -et használsz az indexben azokon a helyeken, ahol a kulcs-csal is indexelsz.

    Persze nem muszáj így, csinálhatod azt is, hogy marad az i az indexben, de az i-s ciklusod n-1-ről indul lefelé 0-ig. A végeredmény ugyanaz lesz.

  • #PeTeY#
    aktív tag

    Akkor gondolom sztornó, amit írtam, ha végülis maga a kódolás jó úgy, ahogy csináltad.

    A kódolásnál eredeti sorrendben ([i][j]) töltöd fel a tomb tömböt és a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) olvasod ki.

    Dekódolásnál fordítva kellene csinálni: a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) töltöd fel a tomb tömböt és eredeti sorrendben ([i][j]) olvasod ki.

    Nagyon köszönöm, megnézem este.
    Amúgy miért n-i-1? Ezt a részt nem teljesen érem. :B

  • kovisoft
    őstag

    Nagyon köszönöm. Már munkahelyen vagyok, este megnézem. :)
    Bár, most első ránézésre... Na, megpróbálom majd értelmezni. És tisztáznám, mit is akarok, mert valószínű nem voltam valami összeszedett már tegnap este. Mondjuk nem biztos, hogy most jobb lesz...
    Szóval a feladat szerint a program egy fájlból kiolvas majd 3 dolgot. Egy egész számot, mint kód. Ennyi oszlopa lesz majd a mátrixnak, amibe be kell "tölteni" a harmadik paraméterben kapott szöveget, amit kódolni, vagy dekódolni kell. Illetve egy kulcsot azaz számsort, ami ebben a mátrixban mutatja az oszlopok sorrendjét. Kódolásnál be kell írni sorfolytonosan a mátrixba a szöveget: azaz a[0][0]-ba az első karakter, a[0][1]-be második, stb, és kiolvasásnál a kulcs által megadott sorrendben kell kiírni. Nálam a konkrét kódban, ugye a 3. oszlop utolsó sorában lévő karakter lesz az első, aztán ugyanezen oszlop utolsó előtti sorában lévő a második egészen az első sorig, majd jön a 4. oszlop utolsó sorában lévő, stb. Ezt a segítségetekkel sikerült is megcsinálni. Viszont a dekódolásnál ezt írja szó szerint a feladat: "A dekódoláshoz az adott sorrendben töltjük fel az oszlopokat, majd a szöveget sorfolytonosan olvassuk ki a táblázatból..." Azaz ha jól értem, fordítva kéne, mint a kódolásnál. Bocs a hosszú szövegért.

    Akkor gondolom sztornó, amit írtam, ha végülis maga a kódolás jó úgy, ahogy csináltad.

    A kódolásnál eredeti sorrendben ([i][j]) töltöd fel a tomb tömböt és a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) olvasod ki.

    Dekódolásnál fordítva kellene csinálni: a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) töltöd fel a tomb tömböt és eredeti sorrendben ([i][j]) olvasod ki.

  • #PeTeY#
    aktív tag

    Ha jól értem, hogy mit szeretnél, akkor szerintem nem a második dupla ciklusban (amikor a ki2-be írsz) kellene alkalmazni a kulcs[j]-1-gyel való indexelést, hanem az első dupla ciklusban, amikor kitöltöd a tomb-öt (és persze ekkor oda kell figyelni arra is, hogy a ki file-ba továbbra is a jó karaktert írd ki):

    for (i=0; i<n; ++i) {
    for (j=0; j<kod; ++j) {
    tomb[i][kulcs[j]-1]=szoveg[count];
    fprintf(ki, "%c ", szoveg[count]);
    count=count+1;
    }
    fprintf(ki, "\n");
    }

    A ki2-be történő kiírásnál pedig már csak szimplán kiszedni a j-edik oszlopot. Mert így most pont a kulcs inverz permutációját hajtod végre.

    Nagyon köszönöm. Már munkahelyen vagyok, este megnézem. :)
    Bár, most első ránézésre... Na, megpróbálom majd értelmezni. És tisztáznám, mit is akarok, mert valószínű nem voltam valami összeszedett már tegnap este. Mondjuk nem biztos, hogy most jobb lesz...
    Szóval a feladat szerint a program egy fájlból kiolvas majd 3 dolgot. Egy egész számot, mint kód. Ennyi oszlopa lesz majd a mátrixnak, amibe be kell "tölteni" a harmadik paraméterben kapott szöveget, amit kódolni, vagy dekódolni kell. Illetve egy kulcsot azaz számsort, ami ebben a mátrixban mutatja az oszlopok sorrendjét. Kódolásnál be kell írni sorfolytonosan a mátrixba a szöveget: azaz a[0][0]-ba az első karakter, a[0][1]-be második, stb, és kiolvasásnál a kulcs által megadott sorrendben kell kiírni. Nálam a konkrét kódban, ugye a 3. oszlop utolsó sorában lévő karakter lesz az első, aztán ugyanezen oszlop utolsó előtti sorában lévő a második egészen az első sorig, majd jön a 4. oszlop utolsó sorában lévő, stb. Ezt a segítségetekkel sikerült is megcsinálni. Viszont a dekódolásnál ezt írja szó szerint a feladat: "A dekódoláshoz az adott sorrendben töltjük fel az oszlopokat, majd a szöveget sorfolytonosan olvassuk ki a táblázatból..." Azaz ha jól értem, fordítva kéne, mint a kódolásnál. Bocs a hosszú szövegért.

  • kovisoft
    őstag

    Valóban. Nagyon köszi... Logikus, hogy sorok esetében lentről felfelé kell haladni, ha azt akarom, hogy így legyen kiírva. :) Pár év és belejövök.
    Még egy kérdésem lenne, mert ehhez már nagyon fáradt vagyok: Hogyan oldom meg, ha azt szeretném, hogy a titkosítani kapott szöveget a kulcsnak megfelelően rendezze oszlopokba? Azaz itt az első négy karakter kerüljön a 3. oszlopba, úgy hogy az első karakter van a legalsó sorban...

    Ha jól értem, hogy mit szeretnél, akkor szerintem nem a második dupla ciklusban (amikor a ki2-be írsz) kellene alkalmazni a kulcs[j]-1-gyel való indexelést, hanem az első dupla ciklusban, amikor kitöltöd a tomb-öt (és persze ekkor oda kell figyelni arra is, hogy a ki file-ba továbbra is a jó karaktert írd ki):

    for (i=0; i<n; ++i) {
    for (j=0; j<kod; ++j) {
    tomb[i][kulcs[j]-1]=szoveg[count];
    fprintf(ki, "%c ", szoveg[count]);
    count=count+1;
    }
    fprintf(ki, "\n");
    }

    A ki2-be történő kiírásnál pedig már csak szimplán kiszedni a j-edik oszlopot. Mert így most pont a kulcs inverz permutációját hajtod végre.

  • #PeTeY#
    aktív tag

    Mit jelent, hogy "de nem alulról felfelé"? A sorokat fordított sorrendben kellene kiírni? Ebben az esetben haladj fordított sorrendben a legutolsó i-s ciklusoddal:

    for(i=n-1; i>=0; i--) {

    A másik lehetőség, hogy a tomb-ből olvasod ki tükrözve a sorokat:

              kodolt[l] = tomb[n-i-1][kulcs[j]-1];

    Valóban. Nagyon köszi... Logikus, hogy sorok esetében lentről felfelé kell haladni, ha azt akarom, hogy így legyen kiírva. :) Pár év és belejövök.
    Még egy kérdésem lenne, mert ehhez már nagyon fáradt vagyok: Hogyan oldom meg, ha azt szeretném, hogy a titkosítani kapott szöveget a kulcsnak megfelelően rendezze oszlopokba? Azaz itt az első négy karakter kerüljön a 3. oszlopba, úgy hogy az első karakter van a legalsó sorban...

  • kovisoft
    őstag

    Rendben. Szóval, a lényeg, hogy kódolni kéne egy szöveget úgy, hogy egy megadott kulcs alapján olvasom ki oszloponként a szöveget alulról felfelé. Sikerül megcsinálni a kódolás részét, azaz megfelelő sorrendben adja vissza az oszlopokat, de nem alulról felfelé. És nem látom, miért. Bár biztos ez is tök egyszerű:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        int kod = 7;
        int kulcs[32] = {3,4,2,1,5,6,7};
        char szoveg[256] = {"eztaszovegetkelltitkositanod"};
        int n = 28 / kod;
        char tomb[n][kod];

        FILE* ki = fopen("ki.txt", "w");

     if (ki == NULL) {
      printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
      exit(1);
     }

        int i, j, count = 0;
        for (i=0; i<n; ++i) {
            for (j=0; j<kod; ++j) {
                tomb[i][j]=szoveg[count];
                count=count+1;
                fprintf(ki, "%c ", tomb[i][j]);

            }
            fprintf(ki, "\n");
        }

        fclose(ki);

        FILE* ki2 = fopen("ki2.txt", "w");

        if (ki2 == NULL) {
      printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
      exit(2);
     }

     char kodolt[256];
        int l=0;

     for(j=0; j<kod; j++) {
      for(i=0; i<n; i++) {
                kodolt[l] = tomb[i][kulcs[j]-1];
                fprintf(ki2, "%c", kodolt[l]);
            }
        }

        fclose(ki2);
        return 0;
    }

    Mit jelent, hogy "de nem alulról felfelé"? A sorokat fordított sorrendben kellene kiírni? Ebben az esetben haladj fordított sorrendben a legutolsó i-s ciklusoddal:

    for(i=n-1; i>=0; i--) {

    A másik lehetőség, hogy a tomb-ből olvasod ki tükrözve a sorokat:

              kodolt[l] = tomb[n-i-1][kulcs[j]-1];

  • #PeTeY#
    aktív tag

    Szerintem inkább dobd be ide a problémás kódrészletet. Egyfelől többen is rá tudnak nézni, másrészt mások is tanulhatnak belőle.

    Rendben. Szóval, a lényeg, hogy kódolni kéne egy szöveget úgy, hogy egy megadott kulcs alapján olvasom ki oszloponként a szöveget alulról felfelé. Sikerül megcsinálni a kódolás részét, azaz megfelelő sorrendben adja vissza az oszlopokat, de nem alulról felfelé. És nem látom, miért. Bár biztos ez is tök egyszerű:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        int kod = 7;
        int kulcs[32] = {3,4,2,1,5,6,7};
        char szoveg[256] = {"eztaszovegetkelltitkositanod"};
        int n = 28 / kod;
        char tomb[n][kod];

        FILE* ki = fopen("ki.txt", "w");

     if (ki == NULL) {
      printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
      exit(1);
     }

        int i, j, count = 0;
        for (i=0; i<n; ++i) {
            for (j=0; j<kod; ++j) {
                tomb[i][j]=szoveg[count];
                count=count+1;
                fprintf(ki, "%c ", tomb[i][j]);

            }
            fprintf(ki, "\n");
        }

        fclose(ki);

        FILE* ki2 = fopen("ki2.txt", "w");

        if (ki2 == NULL) {
      printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
      exit(2);
     }

     char kodolt[256];
        int l=0;

     for(j=0; j<kod; j++) {
      for(i=0; i<n; i++) {
                kodolt[l] = tomb[i][kulcs[j]-1];
                fprintf(ki2, "%c", kodolt[l]);
            }
        }

        fclose(ki2);
        return 0;
    }

  • kovisoft
    őstag

    Haladok a beadandómmal szépen lassan, nagy nehezen kitaláltam, minek hogyan is kellene működnie és működik is, de megint sikerült elakadnom. Esetleg valaki rá tudna nézni privátban a kódomra, hogy mi vele a gond?

    Szerintem inkább dobd be ide a problémás kódrészletet. Egyfelől többen is rá tudnak nézni, másrészt mások is tanulhatnak belőle.

  • #PeTeY#
    aktív tag

    Haladok a beadandómmal szépen lassan, nagy nehezen kitaláltam, minek hogyan is kellene működnie és működik is, de megint sikerült elakadnom. Esetleg valaki rá tudna nézni privátban a kódomra, hogy mi vele a gond?

  • #PeTeY#
    aktív tag

    Kitartást az egyetemez! Ha van kérdés, akkor tedd fel bátran. :K

    Ha megnyugtat, akkor lesz még ilyen bőven :D.

    Nagyon köszi. Biztosan fogok még kérdezni, de néha az is nehéz, hogy mit is akarok kérdezni. :)

  • buherton
    őstag

    :W
    Nagyon köszi. És neked is buherton.
    Tegnap este óta ezzel szarakodok. :U

    Kitartást az egyetemez! Ha van kérdés, akkor tedd fel bátran. :K

    Ha megnyugtat, akkor lesz még ilyen bőven :D.

  • #PeTeY#
    aktív tag

    Ha 4 sorban szeretnél soronként 7 karaktert kiíratni, akkor a belső j-s ciklusod után írj ki egy sortörést:

    fprintf(ki, "\n");

    :W
    Nagyon köszi. És neked is buherton.
    Tegnap este óta ezzel szarakodok. :U

  • kovisoft
    őstag

    Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá. :DDD
    Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:

    #include <stdio.h>
    #include <stdlib.h>

    int main(){

        char szoveg[256] = {"eztaszovegetkelltitkositanod"};
        char tomb[4][7];

        FILE* ki = fopen("ki.txt", "w");

        if (ki == NULL) {
        printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
        exit(1);
        }

        int i, j, count = 0;
        for (i=0; i<4; ++i) {
            for (j=0; j<7; ++j) {
                tomb[i][j]=szoveg[count];
                count=count+1;
                fprintf(ki, "%c ", tomb[i][j]);

            }
       }
        return 0;
    }

    Előre is köszönök minden segítséget.

    Ha 4 sorban szeretnél soronként 7 karaktert kiíratni, akkor a belső j-s ciklusod után írj ki egy sortörést:

    fprintf(ki, "\n");

  • buherton
    őstag

    Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá. :DDD
    Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:

    #include <stdio.h>
    #include <stdlib.h>

    int main(){

        char szoveg[256] = {"eztaszovegetkelltitkositanod"};
        char tomb[4][7];

        FILE* ki = fopen("ki.txt", "w");

        if (ki == NULL) {
        printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
        exit(1);
        }

        int i, j, count = 0;
        for (i=0; i<4; ++i) {
            for (j=0; j<7; ++j) {
                tomb[i][j]=szoveg[count];
                count=count+1;
                fprintf(ki, "%c ", tomb[i][j]);

            }
       }
        return 0;
    }

    Előre is köszönök minden segítséget.

    Hiányzik a sortörés karakter: \n.

  • #PeTeY#
    aktív tag

    Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá. :DDD
    Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:

    #include <stdio.h>
    #include <stdlib.h>

    int main(){

        char szoveg[256] = {"eztaszovegetkelltitkositanod"};
        char tomb[4][7];

        FILE* ki = fopen("ki.txt", "w");

        if (ki == NULL) {
        printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);
        exit(1);
        }

        int i, j, count = 0;
        for (i=0; i<4; ++i) {
            for (j=0; j<7; ++j) {
                tomb[i][j]=szoveg[count];
                count=count+1;
                fprintf(ki, "%c ", tomb[i][j]);

            }
       }
        return 0;
    }

    Előre is köszönök minden segítséget.

  • buherton
    őstag

    Koszonom a javaslatokat, de ne feledd:
    C-ben semmi sem lehetetlen.. :N

    Megnézném, hogyan változtatod meg a HW-t C-ből.

  • m3zcal
    csendes tag

    No, azt megnézem, hogyan vezérelsz reléket a soros portról. Neked valami ilyesmi kell: [link] de szerencsésebb lenne USB IO extendert keresned.

    Koszonom a javaslatokat, de ne feledd:
    C-ben semmi sem lehetetlen.. :N

  • buherton
    őstag

    Sziasztok,

    A soros port programozassal kapcsolatban kerdeznem:
    Szerintetek hany eszkozt (pl DC rele) lehet vezerelni egy soros portrol (DB-9) ?
    Az erdekelne, hogy a TX-en kivul esetleg a tobbi labat is lehet "folyamatos" jel kikuldesre birni?
    (pl. DCD, DSR,..)

    No, azt megnézem, hogyan vezérelsz reléket a soros portról. Neked valami ilyesmi kell: [link] de szerencsésebb lenne USB IO extendert keresned.

  • m3zcal
    csendes tag

    Sziasztok,

    A soros port programozassal kapcsolatban kerdeznem:
    Szerintetek hany eszkozt (pl DC rele) lehet vezerelni egy soros portrol (DB-9) ?
    Az erdekelne, hogy a TX-en kivul esetleg a tobbi labat is lehet "folyamatos" jel kikuldesre birni?
    (pl. DCD, DSR,..)

  • Rula
    tag

    C-ben nem tudsz így stringeket összehasonlítani, mert a kar != "end" a két stringre mutató pointert hasonlítja össze, nem pedig a stringek tartalmát. Használd az strcmp() függvényt stringek összehasonlítására (vagy strcmpi-t, ha nem számít a kis-nagybetű):

    } while (strcmp(kar, "end") != 0);

    Köszi! (Főleg azt, hogy szántál időt arra is, hogy leírd miért nem jó úgy! :R )

  • kovisoft
    őstag

    Sziasztok! Sikeresen a C++ topikba írtam ezt, ott pedig kiderült, hogy ez pedig sima C, szóval itt is feltenném a kérdésem.
    Szeretnék egy olyan (hátul tesztelő) ciklust létrehozni, ami akkor lép ki, hogy ha az user beírja, hogy "end". Viszont nem igazán sikerül. Köszi előre is a segítséget!
    Ahogy eddig próbáltam, siker nélkül:

    #include <iostream>
    int main()
    {
     setlocale(LC_ALL, "");
     char kar[80];
     
     do {
      printf("írjon be valamit:\n");
      scanf("%s", kar);
      
     } while (kar != "end");
    }

    C-ben nem tudsz így stringeket összehasonlítani, mert a kar != "end" a két stringre mutató pointert hasonlítja össze, nem pedig a stringek tartalmát. Használd az strcmp() függvényt stringek összehasonlítására (vagy strcmpi-t, ha nem számít a kis-nagybetű):

    } while (strcmp(kar, "end") != 0);

  • Rula
    tag

    Sziasztok! Sikeresen a C++ topikba írtam ezt, ott pedig kiderült, hogy ez pedig sima C, szóval itt is feltenném a kérdésem.
    Szeretnék egy olyan (hátul tesztelő) ciklust létrehozni, ami akkor lép ki, hogy ha az user beírja, hogy "end". Viszont nem igazán sikerül. Köszi előre is a segítséget!
    Ahogy eddig próbáltam, siker nélkül:

    #include <iostream>
    int main()
    {
     setlocale(LC_ALL, "");
     char kar[80];
     
     do {
      printf("írjon be valamit:\n");
      scanf("%s", kar);
      
     } while (kar != "end");
    }

  • elistvan
    őstag

    Persze, mert hamarabb vizsgálod azt, hogy >=60, mint hogy >=70, stb. Emiatt ha monduk 75% az eredmény, az már rögtön bele fog esni a >=60 feltételbe. Meg kellene fordítani a feltételek sorrendjét: >=90, >=80, stb.

    És tényleg! Köszi!

  • kovisoft
    őstag

    Ez a kód már futtatja de 2-estől már nem adj jobbat! (Ami nekem speciel ebből a tantárgyből bőven jó.) Pedig 12-től már 3-asnak kellene lennie. Egyébként igazad van. Köszi.

    Persze, mert hamarabb vizsgálod azt, hogy >=60, mint hogy >=70, stb. Emiatt ha monduk 75% az eredmény, az már rögtön bele fog esni a >=60 feltételbe. Meg kellene fordítani a feltételek sorrendjét: >=90, >=80, stb.

  • elistvan
    őstag

    A szazalek valtozot nem int-nek vetted fel, hanem float-nak. Egy osztás eredménye kerül bele, ezt hasonlítod utána egész számokkal. A konkrét esetben valóban csak egész szám kerülhet bele (mivel az osztást és a szorzást is int-eken végzed), de amúgy ha a képletben már eleve float-okkal dolgoznál, és mondjuk 47 pont lenne a maximum, amiből valaki 28-at ért el, akkor a szazalek értéke 59.57 lenne, ami se nem <=59, se nem >=60, hanem a kettő között van, de arra nincs feltételed. Ezért írtam, hogy jobb lenne csupa int-ekkel dolgozni. Vagy lehet float-okkal is, de akkor át kell írnod a feltételeket (és nem árt arra is gondolni, hogy bizonyos hányadosokat csak kerekítve lehet float-on ábrázolni).

    Ez a kód már futtatja de 2-estől már nem adj jobbat! (Ami nekem speciel ebből a tantárgyből bőven jó.) Pedig 12-től már 3-asnak kellene lennie. Egyébként igazad van. Köszi.

  • kovisoft
    őstag

    Int csak egész szám lehet tudomásom szerint, a 59,5 az pedig tizedes tehát float, vagy én tudom rosszul?

    A szazalek valtozot nem int-nek vetted fel, hanem float-nak. Egy osztás eredménye kerül bele, ezt hasonlítod utána egész számokkal. A konkrét esetben valóban csak egész szám kerülhet bele (mivel az osztást és a szorzást is int-eken végzed), de amúgy ha a képletben már eleve float-okkal dolgoznál, és mondjuk 47 pont lenne a maximum, amiből valaki 28-at ért el, akkor a szazalek értéke 59.57 lenne, ami se nem <=59, se nem >=60, hanem a kettő között van, de arra nincs feltételed. Ezért írtam, hogy jobb lenne csupa int-ekkel dolgozni. Vagy lehet float-okkal is, de akkor át kell írnod a feltételeket (és nem árt arra is gondolni, hogy bizonyos hányadosokat csak kerekítve lehet float-on ábrázolni).

  • elistvan
    őstag

    Az összes változó lehet int, ha először szorzol, utána osztasz.

    Szerk: sőt a szazalek<=59 és szazalek>=60 eleve igényelné azt, hogy a szazalek int legyen, hiszen mi van, ha 59.5 a szazalek? (bár a jelen kiinduló adatokból ez most nem lehetséges)

    Int csak egész szám lehet tudomásom szerint, a 59,5 az pedig tizedes tehát float, vagy én tudom rosszul?

  • kovisoft
    őstag

    Float az egyik változó, a százalék.

    Az összes változó lehet int, ha először szorzol, utána osztasz.

    Szerk: sőt a szazalek<=59 és szazalek>=60 eleve igényelné azt, hogy a szazalek int legyen, hiszen mi van, ha 59.5 a szazalek? (bár a jelen kiinduló adatokból ez most nem lehetséges)

  • elistvan
    őstag

    talan ha nem int-et osztanal int-tel, akkor nem int lenne az eredmeny. Probald meg legalabb az egyiket valami float-ta (cast)-olni.

    Float az egyik változó, a százalék.

  • kovisoft
    őstag

    Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.

    Sziasztok!

    A következőp programkódom lenne. A feladat:
    Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
    Nem akar az if-else rész működni, hogy továbblépjen a feltételeken.

    Először szorozd 100-zal, csak utána legyen az osztás. Mert így az osztás miatt mindig 0 lesz az eredmény.

  • Domonkos
    addikt

    Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.

    Sziasztok!

    A következőp programkódom lenne. A feladat:
    Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
    Nem akar az if-else rész működni, hogy továbblépjen a feltételeken.

    talan ha nem int-et osztanal int-tel, akkor nem int lenne az eredmeny. Probald meg legalabb az egyiket valami float-ta (cast)-olni.

  • kovisoft
    őstag

    Ha csak egy változót lehet használni és az maga a változó, amibe beolvastad a decimális számot, akkor itt egy ocsmány és gagyi megoldás: :B

    printf("%d%d%d%d%d\n", (dec&16)>>4, (dec&8)>>3, (dec&4)>>2, (dec&2)>>1, (dec&1));

    Mivel tudjuk, hogy legfeljebb 31 lehet a dec (ezt illik ellenőrizni előtte), ezért szimplán sorban kiolvassuk dec alsó 5 bitjét.

    Közben még agyaltam egy általánosabb megoldáson is, ami egyesével olvassa ki a biteket. Triviálisan mindig az alsó bitet lehetne kiolvasni, kiírni, aztán jobbra shiftelni a biteket a számban amíg el nem fogynak a bitek. Viszont így fordított sorrendben írnánk ki a biteket. A lenti kód ehelyett mindig a felső bitet olvassa ki, majd balra shifteli a biteket, de legelőször berak jobbra egy plusz 1-es bitet, hogy tudja, mikor kell abbahagyni a ciklust:

    dec=(dec<<1)|1;
    while ((dec&255)>0)
    {
      printf("%d", (dec&256)>>8);
        dec=dec<<1;
    }
    printf("\n");



    Szerk: mi a hibaüzenet?

  • elistvan
    őstag

    Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.

    Sziasztok!

    A következőp programkódom lenne. A feladat:
    Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
    Nem akar az if-else rész működni, hogy továbblépjen a feltételeken.

  • kovisoft
    őstag

    Sziasztok! Olyan kódot keresek C ben, ami egy printf-el átszámolja nekem a decimális számot, binárissá. De csak 18 és 31 között. Csak egy változót lehet használni. Másfélét találtam, de ilyet még nem.

    Esetleg ezt a kódot, esetleg át lehet alakítani, hogy a megadott módon működjön?
    Vagy leegyszerűsíteni?

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int i,j,r,dec,bin[20];
    printf("Kerek egy egesz szamot: ");
    scanf("%d", &dec);
    int n=dec;
    i=0;
    while (dec>0)
    {
    r=dec%2;
    bin[i]=r;
    dec=dec/2;
    i++;
    }
    printf("\n %d binaris alakja : ",n);
    for (j=i-1;j>=0;j--)
    {
    printf("%d ",bin[j]);
    }
    getch();
    return 0;
    }

    Ha csak egy változót lehet használni és az maga a változó, amibe beolvastad a decimális számot, akkor itt egy ocsmány és gagyi megoldás: :B

    printf("%d%d%d%d%d\n", (dec&16)>>4, (dec&8)>>3, (dec&4)>>2, (dec&2)>>1, (dec&1));

    Mivel tudjuk, hogy legfeljebb 31 lehet a dec (ezt illik ellenőrizni előtte), ezért szimplán sorban kiolvassuk dec alsó 5 bitjét.

  • elistvan
    őstag

    Sziasztok! Olyan kódot keresek C ben, ami egy printf-el átszámolja nekem a decimális számot, binárissá. De csak 18 és 31 között. Csak egy változót lehet használni. Másfélét találtam, de ilyet még nem.

    Esetleg ezt a kódot, esetleg át lehet alakítani, hogy a megadott módon működjön?
    Vagy leegyszerűsíteni?

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int i,j,r,dec,bin[20];
    printf("Kerek egy egesz szamot: ");
    scanf("%d", &dec);
    int n=dec;
    i=0;
    while (dec>0)
    {
    r=dec%2;
    bin[i]=r;
    dec=dec/2;
    i++;
    }
    printf("\n %d binaris alakja : ",n);
    for (j=i-1;j>=0;j--)
    {
    printf("%d ",bin[j]);
    }
    getch();
    return 0;
    }

  • dabadab
    titán

    Sziasztok!

    Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?

    Nem fordítottad újra.
    Ahogy láttam a Codeblocks nem fordítja magától újra a kódot, ha megváltozik a forrás.

  • sztanozs
    veterán

    Sziasztok!

    Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?

    szvsz szintaktikai hibás volt a második kód, nem tudta lefordítani, és így az előzőleg fordított binárist futtata...

  • elistvan
    őstag

    Sziasztok!

    Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?

  • sztanozs
    veterán

    CommandPromt ablak eltűnik / C nyelv/ Windows
    ========================================
    A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
    - ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
    - mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
    = Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
    Kösz, előre is.

    Vagy futtasd az exe-t parancssorból.

  • kovisoft
    őstag

    CommandPromt ablak eltűnik / C nyelv/ Windows
    ========================================
    A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
    - ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
    - mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
    = Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
    Kösz, előre is.

    Tegyél be a programod végére egy billentyű nyomásra várakozást, hogy csak azután fejeződjön be a programod. Vagy pedig nyisd meg a command promptot és abból indítsd a programodat, ne pedig rákattintva.

  • ub19student
    csendes tag

    CommandPromt ablak eltűnik / C nyelv/ Windows
    ========================================
    A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
    - ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
    - mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
    = Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
    Kösz, előre is.

  • mepet
    addikt

    Sziasztok!

    ANSI C programozást tanulni, hogyan érdemes / ajánlott hozzákezdeni? (mingw+codeblocksban dolgozunk.) A tanár először magyaráz 2 órát aztán szünet/ utána csak nyomja fel a táblára programkódot, meggondolni sincs időm melyik sor mit csinál. (és tőlünk kérdezgeti, hogy mi a következő sor. ) Nyíregyházán az Egyetemen ezt tanítják ebben a félévben (a következőben meg java-t). Nekem jó a kettes csak valami tuti tananyag/módszer kellene. Ráadásul mi tanárok a programtervező infósokkal vagyunk egy csoportban. Tehát közel sem azonos súlycsoport. Már az elején elment a kedvem az egésztől. Olyan anyag kellene (keresgéltem a neten jegyzeteket) ami rendesen magyaráz, hogy mi mit csinál(melyik sor) és miért. Nekem sajna élet halál kérdés, a kettes így levelezőn, szóval mindennemű segítséget szívesen veszek és köszönöm előre is.

    Szerintem nézd meg a tantárgyleírásnál (vagy kérd el a tanártól) a kötelező és ajánlott jegyzetek listáját, hátha van köztük valami értelmes.

    Én ebből a könyvből tanultam anno, nagyon részletes és jó könyv, de nem tudom mennyire jó totál kezdőknek: Kochan: Programfejlesztés C nyelven

  • elistvan
    őstag

    Sziasztok!

    ANSI C programozást tanulni, hogyan érdemes / ajánlott hozzákezdeni? (mingw+codeblocksban dolgozunk.) A tanár először magyaráz 2 órát aztán szünet/ utána csak nyomja fel a táblára programkódot, meggondolni sincs időm melyik sor mit csinál. (és tőlünk kérdezgeti, hogy mi a következő sor. ) Nyíregyházán az Egyetemen ezt tanítják ebben a félévben (a következőben meg java-t). Nekem jó a kettes csak valami tuti tananyag/módszer kellene. Ráadásul mi tanárok a programtervező infósokkal vagyunk egy csoportban. Tehát közel sem azonos súlycsoport. Már az elején elment a kedvem az egésztől. Olyan anyag kellene (keresgéltem a neten jegyzeteket) ami rendesen magyaráz, hogy mi mit csinál(melyik sor) és miért. Nekem sajna élet halál kérdés, a kettes így levelezőn, szóval mindennemű segítséget szívesen veszek és köszönöm előre is.

  • axioma
    veterán

    Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
    Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.

    Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?

    Nincs jogom torolni, nem tudom miert gondolod. De a helyzeted reszletezese utan se ertek egyet. Ha indokolt, akkor halaszd a felevet. Ha csak ez az egy targy nem lesz meg mert amugy nem indokolt hogy ne lenne idod vinni a tanulast, akkor meg hagyd potvizsgara. Nem ertem miert a csalas a megoldas.
    A tanar tuti ugy gondolta, hogy nem egyedul bujod az internetet hanem valaki iranyitja hogy mit nezz meg, vagy tovabbsegit egy tippel ha elakadsz. Ezt pedig itt, a forum kereteiben is megtesszuk - de ehhez te is bele kell tegyel annyi energiat, hogy elindulj.
    A vizvezetek-szerelotol NEM segitseget, hanem megoldast kersz. Pontosan, te is megoldast kertel, es ez veri ki a biztositekot.

  • csizs
    aktív tag

    ...es ha nincs idod keszulni egy hazi feladatra vagy vizsgara, akkor pedig elcsalod. Remek! :C

    Maga a tanár javasolta, hogy kérjek segítséget. Engedve van. Innentől valóban nem tartom csalásnak a dolgot. Egyébiránt segítséget kértem. Nem programozónak készülök! Te is kérsz segítséget, ha elromlik a vízvezeték, vagy más. Te sem mindig tartod be a KRESZ-t. Amikor enni kell adnom egy gyereknek egy olyan vizsga, ami kevésbé lényeges, de az kell elnézést kérek, de emberség is van.

    Ha nem segítséget adsz kérlek ne sértegess, ha pedig úgy érzed ide ez nem illik kérlek töröld!

  • Domonkos
    addikt

    Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
    Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.

    Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?

    ...es ha nincs idod keszulni egy hazi feladatra vagy vizsgara, akkor pedig elcsalod. Remek! :C

  • csizs
    aktív tag

    :( Marmint hogy szomoru hogy bekerul egy ilyen keres...

    Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
    Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.

    Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?

  • axioma
    veterán

    Keresek c programozásban jártas embert, aki két feladatot megoldana nekem. Juttatás ellenében is.

    privátban jelentkezz.

    Az első feladat itt van

    :( Marmint hogy szomoru hogy bekerul egy ilyen keres...

  • csizs
    aktív tag

    Keresek c programozásban jártas embert, aki két feladatot megoldana nekem. Juttatás ellenében is.

    privátban jelentkezz.

    Az első feladat itt van

  • buherton
    őstag

    Sziasztok!
    Van itt valaki, aki tudna nekem segíteni pár dologban? Konkrétan írtam egy egyszerűbb programot, és annak egyes részeit át kellene formázni úgy, hogy legyen benne pointer, struktúra. Nem kérem természetesen, hogy bárki megcsinálja helyettem, csak ötletet szeretnék, hogy hol célszerű ezt megtenni a programon belül.
    Privát üzenetben átmásolom a konkrét programomat (egyszerű matematikai problémát megoldó programról van szó).
    Előre is köszönök minden segítséget! :R

    Másold be ide.

  • f(x)=exp(x)
    őstag

    Sziasztok!
    Van itt valaki, aki tudna nekem segíteni pár dologban? Konkrétan írtam egy egyszerűbb programot, és annak egyes részeit át kellene formázni úgy, hogy legyen benne pointer, struktúra. Nem kérem természetesen, hogy bárki megcsinálja helyettem, csak ötletet szeretnék, hogy hol célszerű ezt megtenni a programon belül.
    Privát üzenetben átmásolom a konkrét programomat (egyszerű matematikai problémát megoldó programról van szó).
    Előre is köszönök minden segítséget! :R

  • kovisoft
    őstag

    Így néz ki:
    string[][] Rlista = new string[100][];
    string[] Arr = new string[2];
    Arr[0] = "B102";
    Arr[1] = "11";
    Rlista[0] = Arr;
    ..stb

    Persze összeadásnál konvertálnám a darabszámot.

    Ja, az eredeti hozzászólásodból az jött le, hogy a "cikkszám;darabszám" össze van téve egyetlen stringbe. Mindegy, ezzel az adatstruktúrával ugyanúgy tud menni a dolog, csak meg kell írni az összehasonlító függvényt a qsort-hoz (de persze más módon is rendezheted a tömbödet).

  • don_peter
    senior tag

    Egy lehetséges megoldás:
    Rendezed a string tömbödet (pl. qsort). Végigmész a rendezett tömb elemein, minden elemre a stringet kettéválasztod a pontosvessző mentén (pl. strchr-rel megkeresed a ';' karaktert, és lecseréled 0-ra). Az első rész lesz a cikkszám, ezt megjegyzed, a második részt atoi-val integerré alakítod, ez a darabszám. Ha a cikkszám ugyanaz, mint az előző, akkor csak szimplán hozzáadod a darabszámot az előzőek összegéhez. Ha új cikkszámhoz értél vagy vége a tömbnek, akkor az előző cikkszámot kiírod egy új tömbbe, mellé az összeadogatott darabszámot.

    Így néz ki:
    string[][] Rlista = new string[100][];
    string[] Arr = new string[2];
    Arr[0] = "B102";
    Arr[1] = "11";
    Rlista[0] = Arr;
    ..stb

    Persze összeadásnál konvertálnám a darabszámot.

  • kovisoft
    őstag

    Srácok szeretnék kérni egy kis segítséget.
    Van egy string tömböm és a következő adatok vannak benne:
    adat1 = cikkszám
    adat2 = darabszám

    B301;1
    F100;9
    G120;20
    P203;6
    B301;1
    F100;9
    G120;20
    A9G;12
    P203;2
    B301;8

    Rendezni kellene a tömböt, úgy hogy minden cikkszámból csak 1 szerepeljen benne, de a darabszámokat össze kell adni.

    pl.:
    B301;10
    F100;18
    G120;40
    P203;8
    A9G;12

    Tudnátok nekem segíteni? (elég fáradt vagyok már, hogy jól pörögjön az agyam)
    Már kezdek befáradni, de addig nem fekszem le amíg ezzel ma nem végzek.
    Előre is köszi.

    Egy lehetséges megoldás:
    Rendezed a string tömbödet (pl. qsort). Végigmész a rendezett tömb elemein, minden elemre a stringet kettéválasztod a pontosvessző mentén (pl. strchr-rel megkeresed a ';' karaktert, és lecseréled 0-ra). Az első rész lesz a cikkszám, ezt megjegyzed, a második részt atoi-val integerré alakítod, ez a darabszám. Ha a cikkszám ugyanaz, mint az előző, akkor csak szimplán hozzáadod a darabszámot az előzőek összegéhez. Ha új cikkszámhoz értél vagy vége a tömbnek, akkor az előző cikkszámot kiírod egy új tömbbe, mellé az összeadogatott darabszámot.

  • don_peter
    senior tag

    Srácok szeretnék kérni egy kis segítséget.
    Van egy string tömböm és a következő adatok vannak benne:
    adat1 = cikkszám
    adat2 = darabszám

    B301;1
    F100;9
    G120;20
    P203;6
    B301;1
    F100;9
    G120;20
    A9G;12
    P203;2
    B301;8

    Rendezni kellene a tömböt, úgy hogy minden cikkszámból csak 1 szerepeljen benne, de a darabszámokat össze kell adni.

    pl.:
    B301;10
    F100;18
    G120;40
    P203;8
    A9G;12

    Tudnátok nekem segíteni? (elég fáradt vagyok már, hogy jól pörögjön az agyam)
    Már kezdek befáradni, de addig nem fekszem le amíg ezzel ma nem végzek.
    Előre is köszi.

  • >char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;

    Mi ez a hulyeseg? Ki mondta, hogy egy bajt 8 bit? Na meg azt, hogy signed specifier nelkul a char az elojeles? :W :W :W

    Keress valami jobb tananyagot!

    Emlékeim szerint a C szabványban nem szerepel, hogy a char előjeles vagy előjel nélküli lenne, ezt ráhagyja az implementációra. A fordítók pedig jellemzően az int és társai után a char-t is előjelesként kezelik alapértelmezetten, nem véletlenül vannak a -funsigned-char kapcsolók és társaik..

  • expfgv
    csendes tag

    Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
    Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen! :)
    A feladat:

    Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
    Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
    Például.:
    char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
    unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
    számábrázolás; 0...255 értékekkel;
    int típus : 4 (bájt) !!a 32 bites környezetben!!,
    előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!

    FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.

    Maga a kód (megjegyzésekkel):

    #include <stdio.h> // header file-ok
    #include <stdlib.h>
    // Deklarációs rész (később)
    // int aglobalis, bglobalis; // Globális változók helye, minden
    // függvényből láthatók, későbbiekben
    // (lehetőleg) ne használjuk. (Ezen
    // változók akkor globálisak, ha egy
    // modulból áll a program.)
    int main() // BREAKPOINT ITT !!!
    {
    char ch; // lokális változók deklarálása
    // kezdeti értékadás nélkül!
    int a, b, c, d, e, f, g;// lokális változók csak a függvényen
    // belül láthatók, most main()-on belül.
    // FIGYELEM; alapból a számábrázolás előjeles (+/-)

    a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
    // 'ch' változó méretét átadja az ’a’
    // változónak (így a értéke 1 lesz).

    b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
    c = sizeof(unsigned char); // a sizeof() operátor argumentumába
    d = sizeof(int); // előjeles EGÉSZ számábrázolás
    e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
    f = sizeof(float); // ez a kompatibilitás miatt van már
    g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
    // a 'float' és a 'double' típusok, valós számtípusok, azaz
    // előjeles egész vagy tizedes pontos tört értékek is lehetnek
    return 0;
    }

    Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.

    kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját. :B Leírtam ebben a hozzászólásban, hogy hogy csináltam.

    Nem hiszem el, sikerült! :C
    Köszönöm szépen mindenkinek a segítséget, privátban Domonkosnak és Kovinak külön is, programhiba volt (megfűszerezve egy kis user errorral :D ), elég érzékeny ez a Code Blocks...

  • Domonkos
    addikt

    Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
    Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen! :)
    A feladat:

    Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
    Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
    Például.:
    char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
    unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
    számábrázolás; 0...255 értékekkel;
    int típus : 4 (bájt) !!a 32 bites környezetben!!,
    előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!

    FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.

    Maga a kód (megjegyzésekkel):

    #include <stdio.h> // header file-ok
    #include <stdlib.h>
    // Deklarációs rész (később)
    // int aglobalis, bglobalis; // Globális változók helye, minden
    // függvényből láthatók, későbbiekben
    // (lehetőleg) ne használjuk. (Ezen
    // változók akkor globálisak, ha egy
    // modulból áll a program.)
    int main() // BREAKPOINT ITT !!!
    {
    char ch; // lokális változók deklarálása
    // kezdeti értékadás nélkül!
    int a, b, c, d, e, f, g;// lokális változók csak a függvényen
    // belül láthatók, most main()-on belül.
    // FIGYELEM; alapból a számábrázolás előjeles (+/-)

    a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
    // 'ch' változó méretét átadja az ’a’
    // változónak (így a értéke 1 lesz).

    b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
    c = sizeof(unsigned char); // a sizeof() operátor argumentumába
    d = sizeof(int); // előjeles EGÉSZ számábrázolás
    e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
    f = sizeof(float); // ez a kompatibilitás miatt van már
    g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
    // a 'float' és a 'double' típusok, valós számtípusok, azaz
    // előjeles egész vagy tizedes pontos tört értékek is lehetnek
    return 0;
    }

    Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.

    kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját. :B Leírtam ebben a hozzászólásban, hogy hogy csináltam.

    >char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;

    Mi ez a hulyeseg? Ki mondta, hogy egy bajt 8 bit? Na meg azt, hogy signed specifier nelkul a char az elojeles? :W :W :W

    Keress valami jobb tananyagot!

  • kovisoft
    őstag

    Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
    Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen! :)
    A feladat:

    Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
    Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
    Például.:
    char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
    unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
    számábrázolás; 0...255 értékekkel;
    int típus : 4 (bájt) !!a 32 bites környezetben!!,
    előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!

    FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.

    Maga a kód (megjegyzésekkel):

    #include <stdio.h> // header file-ok
    #include <stdlib.h>
    // Deklarációs rész (később)
    // int aglobalis, bglobalis; // Globális változók helye, minden
    // függvényből láthatók, későbbiekben
    // (lehetőleg) ne használjuk. (Ezen
    // változók akkor globálisak, ha egy
    // modulból áll a program.)
    int main() // BREAKPOINT ITT !!!
    {
    char ch; // lokális változók deklarálása
    // kezdeti értékadás nélkül!
    int a, b, c, d, e, f, g;// lokális változók csak a függvényen
    // belül láthatók, most main()-on belül.
    // FIGYELEM; alapból a számábrázolás előjeles (+/-)

    a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
    // 'ch' változó méretét átadja az ’a’
    // változónak (így a értéke 1 lesz).

    b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
    c = sizeof(unsigned char); // a sizeof() operátor argumentumába
    d = sizeof(int); // előjeles EGÉSZ számábrázolás
    e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
    f = sizeof(float); // ez a kompatibilitás miatt van már
    g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
    // a 'float' és a 'double' típusok, valós számtípusok, azaz
    // előjeles egész vagy tizedes pontos tört értékek is lehetnek
    return 0;
    }

    Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.

    kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját. :B Leírtam ebben a hozzászólásban, hogy hogy csináltam.

    Nem lehet, hogy be van kapcsolva az optimalizálás, és gyakorlatilag az egész program kioptimalizálódott?
    (mármint fordítási opcióról beszélek)

  • expfgv
    csendes tag
    A megválaszolt hozzászólás már nem elérhető.

    Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
    Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen! :)
    A feladat:

    Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
    Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
    Például.:
    char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
    unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
    számábrázolás; 0...255 értékekkel;
    int típus : 4 (bájt) !!a 32 bites környezetben!!,
    előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!

    FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.

    Maga a kód (megjegyzésekkel):

    #include <stdio.h> // header file-ok
    #include <stdlib.h>
    // Deklarációs rész (később)
    // int aglobalis, bglobalis; // Globális változók helye, minden
    // függvényből láthatók, későbbiekben
    // (lehetőleg) ne használjuk. (Ezen
    // változók akkor globálisak, ha egy
    // modulból áll a program.)
    int main() // BREAKPOINT ITT !!!
    {
    char ch; // lokális változók deklarálása
    // kezdeti értékadás nélkül!
    int a, b, c, d, e, f, g;// lokális változók csak a függvényen
    // belül láthatók, most main()-on belül.
    // FIGYELEM; alapból a számábrázolás előjeles (+/-)

    a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
    // 'ch' változó méretét átadja az ’a’
    // változónak (így a értéke 1 lesz).

    b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
    c = sizeof(unsigned char); // a sizeof() operátor argumentumába
    d = sizeof(int); // előjeles EGÉSZ számábrázolás
    e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
    f = sizeof(float); // ez a kompatibilitás miatt van már
    g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
    // a 'float' és a 'double' típusok, valós számtípusok, azaz
    // előjeles egész vagy tizedes pontos tört értékek is lehetnek
    return 0;
    }

    Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.

    kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját. :B Leírtam ebben a hozzászólásban, hogy hogy csináltam.

  • kovisoft
    őstag

    Sziasztok!
    Most kezdtem a programozást, viszont egy nagyon alapnak tűnő dolognál elakadtam, amiről nem tudom, hogy program hiba, vagy én rontok el valamit. Code Blocksot használok, és ott kellene egy megadott programnál a Watches ablakban pár dolgot figyelni, viszont nekem nem jelenik meg ott semmi.
    Privátban átmásolom a konkrét programot és amit kér a feladat, valamint amiket amiket én nyomkodok, és mégse jó.
    Előre is köszönöm, ha valaki segít! :R

    Lehet, hogy hülye kérdés, de ugye futás közben megállítottad a programot egy breakpointtal, és akkor próbálod nézni a változókat?

  • expfgv
    csendes tag

    Sziasztok!
    Most kezdtem a programozást, viszont egy nagyon alapnak tűnő dolognál elakadtam, amiről nem tudom, hogy program hiba, vagy én rontok el valamit. Code Blocksot használok, és ott kellene egy megadott programnál a Watches ablakban pár dolgot figyelni, viszont nekem nem jelenik meg ott semmi.
    Privátban átmásolom a konkrét programot és amit kér a feladat, valamint amiket amiket én nyomkodok, és mégse jó.
    Előre is köszönöm, ha valaki segít! :R

  • Domonkos
    addikt

    Csak ne priviben, hanem itt tedd közzé :)

    Itt az altalam javasolt megoldas:
    #include <stdio.h>

    int strcmp(char *s1, char *s2);

    int
    strcmp(char *s1, char *s2)
    {
    unsigned c1, c2;

    for(;;) {
    c1 = *s1++;
    c2 = *s2++;
    if(c1 != c2) {
    if(c1 > c2)
    return 1;
    return -1;
    }
    if(c1 == 0)
    return 0;
    }
    }

    int
    main(int argc, char *argv[]) {
    if (argc != 3) {
    fputs("argc\n", stderr);
    return 1;
    }

    printf("%d\n", strcmp(argv[1], argv[2]));
    return 0;
    }

  • buherton
    őstag

    Sziasztok!

    Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
    Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.

    Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal? :)

    Csak ne priviben, hanem itt tedd közzé :)

  • Domonkos
    addikt

    Sziasztok!

    Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
    Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.

    Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal? :)

    Ha megmutatod, hogy eddig mit sikerult megirnod, akkor nagyon szivesen segitek.

  • Alcsi69
    senior tag

    Sziasztok!

    Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
    Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.

    Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal? :)

  • dobragab
    addikt

    Sziasztok! Tudna valaki segiteni az 5-os, 6-os es 7-es feladatokkal? Nagyon nem tudom, hogy kezdjek hozza, sokat segitene hihetetlenul! Koszonom szepen :)


    (L:/dl/upc/2018-11/23/755405_yma8gh180lcluzuw_inkedreceived_263517184513014_li.jpg)[kép](/L)

    Ez nem valami BME GPK szerencsétlenség és C#? Mintha ott már találkoztam volna ezzel a stílussal...

  • Krisztiiii
    csendes tag

    Sziasztok! Tudna valaki segiteni az 5-os, 6-os es 7-es feladatokkal? Nagyon nem tudom, hogy kezdjek hozza, sokat segitene hihetetlenul! Koszonom szepen :)


    (L:/dl/upc/2018-11/23/755405_yma8gh180lcluzuw_inkedreceived_263517184513014_li.jpg)[kép](/L)

  • dobragab
    addikt

    Három lehetőséged is van debuggolni:
    1. beraksz néhány printf függvényt megnézed, hol bugzik.
    2. gdb, bár ezt CLI-ból macera használni.
    3. kikommentezed a platformfüggő sorokat és Visual Studioval kidebuggolod.

    4. Használsz valami Linuxos IDE-t gdb pluginnal, mondjuk CLion.

  • buherton
    őstag

    0777 az valami jog lenne, amúgy igen, most már rá jöttem mi a hiba :D indexelésnél csúszik/csúszott el az a baj, hogy a linux alatt nem tudok debuggolni, visual studioba is ugyan így futna le?

    Három lehetőséged is van debuggolni:
    1. beraksz néhány printf függvényt megnézed, hol bugzik.
    2. gdb, bár ezt CLI-ból macera használni.
    3. kikommentezed a platformfüggő sorokat és Visual Studioval kidebuggolod.

  • bandi0000
    nagyúr

    Posix kompatibilis meg a windows? Nem hiszem. Szoval nincs ra garancia.

    tök 8 nagy nehezen meg lett a hiba maga az algoritmus jól működik, csak akkor bugzódik be, hogyha kevesebb vagy több elemű tömb-öt kéne használnom mint amit lefoglaltam

    szóval jön is a kérdés, az a gond hogy paraméterben kell megadni, hogy mekkora lesz a mátrix, meg van adva, hogy mennyi lehet maximum, de ha annyit foglalok le, akkor is baja van neki, viszont az üzenethez structúrát kell létrehozni, amit előre kell deklarálni, szóval az lenne a jó ha úgy tudnám létrehozni, a sturktúrát, hogy már tudom a mátrix méretét, de ez lehetséges valahogy?

    na ezért jó kérdezni, mert közbe rá jöttem, mivel helyet is kellett foglalni az elküldendő üzenetnek, így ott kellett volna max méretre helyet foglalni, és akkor nincs hiba :R

  • Domonkos
    addikt

    0777 az valami jog lenne, amúgy igen, most már rá jöttem mi a hiba :D indexelésnél csúszik/csúszott el az a baj, hogy a linux alatt nem tudok debuggolni, visual studioba is ugyan így futna le?

    Posix kompatibilis meg a windows? Nem hiszem. Szoval nincs ra garancia.

  • bandi0000
    nagyúr

    En ebbe nem lennek annyire biztos. Mi is az a 0777 msgflg a szulo msgsnd-ben? Biztos jol van az ugy?
    Amugy meg mi a pontos hiba?

    0777 az valami jog lenne, amúgy igen, most már rá jöttem mi a hiba :D indexelésnél csúszik/csúszott el az a baj, hogy a linux alatt nem tudok debuggolni, visual studioba is ugyan így futna le?

  • Domonkos
    addikt

    sziasztok

    Kérnék egy kis segítséget, ha ide tartozik

    igaz linux alatt írjuk a kódot, de C-be

    processzekkel foglalkozunk, és az lenne a feladat, hogy üzenetet küldjön egyik a másik processznak (msgsnd,msgrcv)

    A feladat talán nem is lényeges, inkább az, hogy egy N*M-es mátrixot kell küldözgetni

    létrehozok N+M mátrixot

    első N mátrix az sorokkal
    utána a többi az oszlopokkal dolgozik

    és össze vissza kapják, adják az üzeneteket

    for-ba hoztam létre a processzeket, és a for-ban lévő id-vel hivatkozok az egyes processzekre

    maga a gyerekek kódja így néz ki, mert gondolom itt a hiba, a szülő jól adja át elvileg az első gyereknek a mátrixot

    bocs a képért de nem tudtam kimásolni linux alól a kódot :D

    En ebbe nem lennek annyire biztos. Mi is az a 0777 msgflg a szulo msgsnd-ben? Biztos jol van az ugy?
    Amugy meg mi a pontos hiba?

  • bandi0000
    nagyúr

    sziasztok

    Kérnék egy kis segítséget, ha ide tartozik

    igaz linux alatt írjuk a kódot, de C-be

    processzekkel foglalkozunk, és az lenne a feladat, hogy üzenetet küldjön egyik a másik processznak (msgsnd,msgrcv)

    A feladat talán nem is lényeges, inkább az, hogy egy N*M-es mátrixot kell küldözgetni

    létrehozok N+M mátrixot

    első N mátrix az sorokkal
    utána a többi az oszlopokkal dolgozik

    és össze vissza kapják, adják az üzeneteket

    for-ba hoztam létre a processzeket, és a for-ban lévő id-vel hivatkozok az egyes processzekre

    maga a gyerekek kódja így néz ki, mert gondolom itt a hiba, a szülő jól adja át elvileg az első gyereknek a mátrixot

    bocs a képért de nem tudtam kimásolni linux alól a kódot :D

  • A Nuwen.net-es MinGW-ben például van pcre / regex.h, nem kell hozzá Cygwin. Ne terjesszünk már olyan butaságokat, hogy a "A C-t nem a windows-ra találták ki."!

  • kispx
    addikt

    MinGW-t használok. A második linkről hova kell rakni a fájlokat, illetve utána kell még valamit csinálni?

    A readme-ben le van írva, hogy mit kellene csinálni, viszont ahogy nézem ahhoz a msys is kell. Itt most nincs egyszerű út.

    Egy próba elejéig megpróbálhatod, hogy a *.c és a *.h fájlokat hozzácsapod a projekthez. Viszont azt ki kell majd találni, hogy melyik előfordítói direktívákat kell definiálnod, hogy leforduljon ez a pár fájl.

  • EQMontoya
    veterán

    Vagy C++, es akkor alapbol menni fog az std::regex (legalabbis a friss CodeBlocks-hoz csomagolt mingw 4.9.2-hoz asszem van).

    Az std::regexet sikerült már valakinek működésre bírnia? Szerintem egy kegyetlenül elcseszett szarkupac.

  • Dinter
    addikt

    Milyen fordítót használsz a code::blockhoz?

    Alapértelmezetten MinGW van hozzácsomagolva, ehhez van pár csomag:
    https://stackoverflow.com/questions/3781211/c-regex-library-with-mingw
    https://sourceforge.net/p/mingw/regex/ci/master/tree/

    MinGW-t használok. A második linkről hova kell rakni a fájlokat, illetve utána kell még valamit csinálni?

  • dobragab
    addikt

    CodeBlocks-szal nem lehet valahogy megoldani?

    Vagy C++, es akkor alapbol menni fog az std::regex (legalabbis a friss CodeBlocks-hoz csomagolt mingw 4.9.2-hoz asszem van).

  • buherton
    őstag

    CodeBlocks-szal nem lehet valahogy megoldani?

    De lehet, ha Cygwin-t raksz alá. Egyszer csináltam ilyet Eclipse-szel, de halál volt ;] .

    A CodeBlocks egy IDE, amivel a kódot tudod szerkeszteni, fordítani, futtatni és debuggolni. Csak ugye mindez a windowson történik. A regex pedig POSIX.2 szabvány van definiálva. Ehhez Unix-szerű környezetnek kell, hogy fusson a gépeden.

    A C-t nem a windows-ra találták ki.

  • Dinter
    addikt

    Ez így biztosan nem jó: printf("%d/%d",sorok8/jo8);, ezt próbáld helyette: printf("%d/%d",sorok8, jo8);. A scanf helyett használd az fgets függvényt. Osztást érdemes elkerülni ha lehet, mert erőforrás igényes.

    A legfontosabb soha ne adj ki úgy kezedből progamot, hogy előtte nem próbáltad. 99,99999% az esély arra, hogy rossz :) .

    Tegyél fel Cygwint gcc-vel, vagy virtuális gépre rakj fel egy Linuxot.

    CodeBlocks-szal nem lehet valahogy megoldani?

Új hozzászólás Aktív témák

Hirdetés