Diskuze: 2.hý ukol
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
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
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();
}
Tvuj priklad:
array[i][j] = 1 + 2 * (3 * i + j)
Kamaraduv:
array[i][j] = 'a' + 6 * i + j
Priznám sa, že tomu čo si napísal vôbec nerozumiem.
Myslíš dať to do cyklu i, j? Pochopil som to?
To je kod, ktery plni pole podle hodnot v zadani, jednou liche hodnoty,
podruhe abeceda.
Ano, staci to dat do cyklu.
Veľmi pekné, takto by ma to nikdy nenapadlo. :[
aha a já se snažil
trochu jinak
... #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
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.
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.
#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();
}
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.
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.
Prosím, dávejte své kódy do:
[*code]
Sem vložte kód /bez hvězdičky, samozřejmě
[*/code]
Zobrazeno 14 zpráv z 14.