Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: 2.hý ukol

Aktivity
Avatar
j.zejdl
Člen
Avatar
j.zejdl:2.1.2014 16:15

Čau, mám udělat úkol:
Vytvořte funkci, která alokuje pole 3x3 typu int a naplní jej lichými čísly
Funkce vrací ukazatel na alokované pole. Funkce main() se nepožaduje.

to jsem udělal.
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
int i, j;
int **pole;
pole = alokace();

for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf(" %d ", pole[i][j]);
}
printf("\n");
}
return 0;
}

int alokace()
{
int **array, x = -1, i, j;
array = malloc(3 * sizeof(int *));
if(array == NULL)
{
printf("out of memory\n");
exit(1);
}
for(i = 0; i < 3; i++)
{
array[i] = malloc(3 * sizeof(int));
if(array[i] == NULL)
{
printf("out of memory\n");
exit(1);
}
}

for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
x += 2;
array[i][j] = x;
}
printf("\n");
}

return array;
}

Ale když zkouším udělat kámošovi úkol, který je:

Vytvořte funkci, která alokuje pole 3x6 typu char a naplní jej znaky podle abecedy
Funkce vrací ukazatel na alokované pole. Funkce main() se nepožaduje.
Tak pole udělám, ale ty znaky ne. prosím o radu.

 
Odpovědět
2.1.2014 16:15
Avatar
MrPabloz
Člen
Avatar
Odpovídá na j.zejdl
MrPabloz:2.1.2014 16:31

Jednoduše si vem, že znaky jsou definované přes ascii tabulku, takže když teoreticky zadáš char c=5; tak c bude poté znak který se nachází v ascii tabulce na této pozici. Pokud i po tomhle ti to nedojde, tak napiš a třeba ti tu někdo poradí víc a nebo ti to někdo napíše :) ale skus to první sám :)

Nahoru Odpovědět
2.1.2014 16:31
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):2.1.2014 16:37

Ja by som najprv upravil tvoj kód asi takto:

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

int **vytvor_pole()
{
        int **p_pole, i, j, k = 1;

        p_pole = (int **) malloc(3 * sizeof(int *));
        for (i = 0; i < 3; i++)
                p_pole[i] = (int *) malloc(3 * sizeof(int));
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            p_pole[i][j] = k;
            k += 2;
        }
    }

        return(p_pole);
}

int main(void)
{
    int **p_pole = vytvor_pole(), i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++)
            printf("%d, ", p_pole[i][j]);
    }
    getchar();
}
Nahoru Odpovědět
2.1.2014 16:37
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na j.zejdl
coells:2.1.2014 16:39

Tvuj priklad:

array[i][j] = 1 + 2 * (3 * i + j)

Kamaraduv:

array[i][j] = 'a' + 6 * i + j
 
Nahoru Odpovědět
2.1.2014 16:39
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):2.1.2014 16:58

Priznám sa, že tomu čo si napísal vôbec nerozumiem. :o
Myslíš dať to do cyklu i, j? Pochopil som to?

Editováno 2.1.2014 17:01
Nahoru Odpovědět
2.1.2014 16:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:2.1.2014 17:01

To je kod, ktery plni pole podle hodnot v zadani, jednou liche hodnoty, podruhe abeceda.
Ano, staci to dat do cyklu.

Editováno 2.1.2014 17:02
 
Nahoru Odpovědět
2.1.2014 17:01
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):2.1.2014 17:16

Veľmi pekné, takto by ma to nikdy nenapadlo. :[

Nahoru Odpovědět
2.1.2014 17:16
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
j.zejdl
Člen
Avatar
j.zejdl:2.1.2014 17:18

aha :D a já se snažil trochu jinak :D... #include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
int i, j;
char **pole;
pole = alokace();

for (i = 0; i < 3; i++)
{
for (j = 0; j < 6; j++)
{
printf(" %s ", pole[i][j]);
}
printf("\n");
}
return 0;
}

char alokace()
{
char **array;
char a[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'ch', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','0'};
int i, j, x = 0;
array = malloc(3 * sizeof(char *));
if (array == NULL)
{
printf("out of memory\n");
exit(1);
}
for (i = 0; i < 3; i++)
{
array[i] = malloc(6 * sizeof(char));
if (array[i] == NULL)
{
printf("out of memory\n");
exit(1);
}
}

for (i = 0; i < 3; i++, x++)
{
for (j = 0; j < 6; j++, x++)
{
array[i][j] = a[x];
}
printf("\n");
}

return array;
}
takže znova

 
Nahoru Odpovědět
2.1.2014 17:18
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):2.1.2014 17:32

Návratová hodnota funkcie má byť pointer na pole. V prvom príklade tam máš pointer na int (dáva to varning, aj keď to funguje).
V prípade pola char-ov ti to fungovať nebude.

Nahoru Odpovědět
2.1.2014 17:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
j.zejdl
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
j.zejdl:2.1.2014 17:35

jj už pracuju na tom, ale jsem z toho zmatený. s intama mi to vždycky jde lépe. Ale dneska už jsem trochu mimo a vím, že je to lehké, ale asi to nedokážu dotvořit.
Ale mockrát díky, za úpravy a rady.

 
Nahoru Odpovědět
2.1.2014 17:35
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):2.1.2014 17:36
#include <stdlib.h>
#include <stdio.h>

char **vytvor_pole()
{
        char **p_pole, i, j;

        p_pole = (char **) malloc(3 * sizeof(char *));
        for (i = 0; i < 3; i++)
        p_pole[i] = (char *) malloc(6 * sizeof(char));
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 6; j++) {
            p_pole[i][j] = 'a' + 6 * i + j;
        }
    }

        return p_pole;
}

int main(void)
{
    char **p_pole = vytvor_pole(), i, j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 6; j++)
            printf("%c ", p_pole[i][j]);
        putchar('\n');
    }
    getchar();
}
Editováno 2.1.2014 17:37
Nahoru Odpovědět
2.1.2014 17:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na j.zejdl
Libor Šimo (libcosenior):2.1.2014 17:40

Je vlastne úplne jedno či pracuješ s int-ami alebo s char-mi.
Pri char si treba uvedomiť len jedno:
'a' + 1 = 'b'
atď
Pozri si ASCII tabuľku, tam máš napísané aj decadické hodnoty jednotlivých znakov.

Nahoru Odpovědět
2.1.2014 17:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
j.zejdl
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
j.zejdl:2.1.2014 17:42

Ty kráso, já jsem vůůůl... jasné. a já vymýšlím kraviny. Jak jsem říkal, že to bylo lehké... Mockrát dík, konečně už vím jak s charem...
Ještě jednou mockrát dík.

 
Nahoru Odpovědět
2.1.2014 17:42
Avatar
Vojta Pšenák
Tvůrce
Avatar
Vojta Pšenák:2.1.2014 18:51

Prosím, dávejte své kódy do:

[*code]
Sem vložte kód /bez hvězdičky, samozřejmě
[*/code]
Editováno 2.1.2014 18:52
 
Nahoru Odpovědět
2.1.2014 18:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.