Diskuze: 2.hý ukol

C++ C a C++ 2.hý ukol

Avatar
j.zejdl
Člen
Avatar
j.zejdl:

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

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

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
Redaktor
Avatar
Odpovídá na j.zejdl
coells:

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

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
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:

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

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:

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

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:

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):
#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):

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:

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
Redaktor
Avatar
Vojta Pšenák:

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.