Anonymní profil Scorpio – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Scorpio – Programujte.comAnonymní profil Scorpio – Programujte.com

 

Příspěvky odeslané z IP adresy 89.203.212.–

Scorpio
C / C++ › Délka pole
21. 3. 2012   #155302

#18 zlz
Ou. Už to vidím. ... Si budu muset naliskat sám, páč tu nikdo není, jestli je to ta chyba. Vyzkouším ráno. x D. Díky.

Scorpio
C / C++ › Délka pole
20. 3. 2012   #155291

Na C nejsem bohužel žádný expert, takže pochybuju, že bych to napsal lip.

Myšlenka je, že je tam pole, který má N řádků. A když ho chci přidat, tak vytvořím pole s pamětí na N + 1 pointerů na char.

Pak zkopíruju pointery včetně R[0][0] do nového pole, abych je nemusel alokovat znovu 

	for (i = 0; i < m; i++) {
            Ret[i] = R[i];
        }

Poté naalokuju ten nový řádek 

Ret[m] = (char*)malloc(2 * sizeof(char));

A do něj přidám hodnotu.

Ještě zvýším počet v R[0][0] o jeden 

Ret[0][0] = m;

A mělo by to jet. ... A do 11ti prvků to taky jede a pak to bohužel spadne.


Každopádně už jsem to napsal jinak, ať mi to aspoň funguje a né přímo podle zadání a zítra o tom hodím řeč s učitelem. Takže díky za pomoc. ;-).


Scorpio
C / C++ › Délka pole
20. 3. 2012   #155237

Potřebuju mít něco, co uchová max 20 prvků, takže 127 stačí. Ale když to dělám takhle, tak jich uchovám kolem 15ti a to ještě ve všech podobných polích a potřebuju 4.

Tady přikládám celý zdroják, který jsem zatím napsal. 

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

char** PridatPrvek(char **R, char a, char b) {
    char **Ret;
    if (R[0][0] > 0) {
        int i;
        int m = R[0][0] + 1;
        Ret = (char**)malloc(m * sizeof(char*));
        for (i = 0; i < m; i++) {
            Ret[i] = R[i];
        }
        Ret[0][0] = m;
        Ret[m] = (char*)malloc(2 * sizeof(char));
        Ret[m][0] = a;
        Ret[m][1] = b;
    } else {
        Ret = (char**)malloc(sizeof(char*));
        Ret[0] = (char*)malloc(2 * sizeof(char));
        Ret[1] = (char*)malloc(2 * sizeof(char));
        Ret[0][0] = 1;
        Ret[1][0] = a;
        Ret[1][1] = b;
    }
    return(Ret);
}

int ObsahujePrvek(char **R, char a, char b) {
    if (R[0][0] > 0) {
        int i;
        for (i = 1; i <= R[0][0]; i++) {
            if (R[i][0] == a && R[i][1] == b)
                return(1);
        }
    }
    return(0);
}

void VypsatRelaci(char **R) {
    if (R[0][0] > 0) {
        int i;
        printf("{");

        for (i = 1; i <= R[0][0]; i++) {
            printf("(%d, %d), ", R[i][0], R[i][1]);
        }

        printf("}");
    }
}

int main()
{
    char **R;
    char **Ref;
    char **Sym;
    char **Tra;

    R = (char**)malloc(sizeof(char*));

    R = PridatPrvek(R, 0, 2);
    R = PridatPrvek(R, 1, 2);
    R = PridatPrvek(R, 2, 0);
    R = PridatPrvek(R, 2, 2);
    R = PridatPrvek(R, 2, 4);
    R = PridatPrvek(R, 2, 2);
    R = PridatPrvek(R, 2, 4);
    R = PridatPrvek(R, 2, 2);
    R = PridatPrvek(R, 2, 4);
    R = PridatPrvek(R, 2, 2);
    R = PridatPrvek(R, 2, 4);
    R = PridatPrvek(R, 2, 4);
    //printf("%d", ObsahujePrvek(R, 1, 2));
    VypsatRelaci(R);

    return 0;
}
Scorpio
C / C++ › Délka pole
20. 3. 2012   #155234

Bych to rád měl ve strukturách, ale bohužel musím dodržet dynamické dvourozměrné pole.

Scorpio
C / C++ › Délka pole
20. 3. 2012   #155230

Chybka se vloudila. Ten PocetR je z kódu co jsem zkusil psát potom, že jsem neměl počet v R[0][0], ale v externí proměnné. Problém ale byl stejný, až na to, že to hodilo chybu až po 16ti prvcích. Proto si myslím, že to bude nějak omezené pamětí.

Scorpio
C / C++ › Délka pole
20. 3. 2012   #155225

Díky za odpovědi. Mají to být prvky z relace.

Teď jsem ale narazil na další problém.

Takhle vypadá f-ce na přidávání prvku do pole. Hodnota [0][0] slouží jako počet řádků, takže prvky relace jsou od 1. Funguje to tak, že f-ce založí nové pole větší o jeden řádek a vrátí na ni pointer. 

char** PridatPrvek(char **R, char a, char b) {
    char **Ret;
    if (R[0][0] > 0) {
        int i;
        int m = R[0][0] + 1;
        Ret = (char**)malloc(m * sizeof(char*));
        for (i = 0; i < m; i++) {
            Ret[i] = R[i];
        }
        Ret[0][0] = m;
        Ret[m] = (char*)malloc(2 * sizeof(char));
        Ret[m][0] = a;
        Ret[m][1] = b;
    } else {
        Ret = (char**)malloc(sizeof(char*));
        Ret[0] = (char*)malloc(2 * sizeof(char));
        Ret[1] = (char*)malloc(2 * sizeof(char));
        Ret[0][0] = 1;
        Ret[1][0] = a;
        Ret[1][1] = b;
    }
    return(Ret);
}

Takže při přidávání to vypadá nějak takhle

    char **R;
    R = (char**)malloc(sizeof(char*));
    R = PridatPrvekR(R, 0, 2);

Jenže u cca 12ti prvků to hodí chybu za běhu. Když chci vytvořit to nové pole Ret 

Ret = (char**)malloc(PocetR * sizeof(char*));

Jako kdyby byla nějak omezená paměť na alokaci.

Nevíte co s tím? Díky za odpovědi.


Scorpio
C / C++ › Délka pole
19. 3. 2012   #155196

Ahoj. Mám pole v C, které je definováno takhle 



    R = (char**)malloc(o * sizeof(char *));
    for (i = 0; i < o; i++) {
        R[i] = (char*)malloc(2 * sizeof(char));
    }

Je to dvourozměrné pole o rozměrech N x 2.
Potřebuju zjistit ve funkci, do které posílám pointer na to pole jako parametr, kolik má řádků, tedy N.
Když se to snažím počítat přes sizeof či podobně, tak mi to nikdy nevychází.

Díky za odpověď.

Mila
Hry › Sindicate chyba přihlášení
18. 10. 2011   #148772

čaute ;) nainstalovala jsem si sindicate;) akorát když to spustím nebo-li se chci přihlásit hlásí mi to client.bon-součást nelze najít Aplikace nemohla být spuštěna,protože součást DevIl.dll nelze najít.Potíže pravděpodobně odtraníte opětovnou instalací aplikace.Co s tím mám teďka dělat?proč to nejde? :(

Tom
Hry › Metin2 Sindicate
17. 10. 2011   #148727

Zdravím mám takový problém s instalací Metina :) Stáhl jsem si clienta a pak laucher podle návodu,ale laucher se mi nechce spustit hlásí mi to furt laucher(2).exe-NET.framework Initialization error    unable to find a version of the runtime to run this application..čím to je? Snažím se to stáhnout už dva dny na jakých kolik stránkách,ale buď to nejde nebo to hlásí furt tohle :( pls poraďte

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý