Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
nemec.radovan:4. listopadu 18:26

Chtěl bych se zeptat vynásobit ve statickém a v dynamickém poli liché číslo. Pole s čísly mám hotové i řazení na liché číslo, jen nevím jak to vynásobit.

Eventuálně jsem nějak začal a nevím jak dále.

Zkusil jsem: #include <stdio.h>
#include <malloc.h>

#define N 10

int main() {

int *d_pole;
int i;
int *pom;
// 1
if ((d_pole = (int *) malloc(N * sizeof(int))) == 0) {
printf("Chyba pri alokaci!");
return 0;
}
for (int i = 0; i < N; i = i + 2) {
d_pole[i] = i + 1;
printf(" %d ", d_pole[i]);
}
//2
pom = d_pole;
//3
if ((d_pole = (int *) malloc(N * sizeof(int))) == NULL) {
printf("Chyba pri alokaci!");
return 0;
}

return 0;
}

Chci docílit: Jak vynásobit lichá čísla

 
Odpovědět 4. listopadu 18:26
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na nemec.radovan
Jirka Jr:4. listopadu 19:07

Mel bych k tomu nejdriv dve pripominky:

1.

for (int i = 0; i < N; i = i + 2)

nemel jsi na mysli nahodou toto?

for (int i = 0; i = i + 2; i < N)

Céčko je svině... sežere obojí :-)

2.
Proč do pole ukladas jen na sude indexy?
Tj. d[0], d[2], d[4]......

A ted k tomu nasobeni prvku pole v d_pole[i] ...proste do d_pole[i] přiřadíš d_pole[i] krát násobek a je to.

 
Nahoru Odpovědět  -1 4. listopadu 19:07
Avatar
Odpovídá na Jirka Jr
Matúš Olejník:4. listopadu 19:19

Dobre má ten cyklus nie? :D
for (začiatok; dokým má ísť; krok)

Editováno 4. listopadu 19:20
Nahoru Odpovědět  +1 4. listopadu 19:19
/* I am not sure why this works but it fixes the problem */
Avatar
DarkCoder
Člen
Avatar
Odpovídá na nemec.radovan
DarkCoder:4. listopadu 19:22
#include <stdio.h>
#include <stdlib.h>

int isOdd(int num);

#define N 10

int main(void) {
        int *d_pole;
        int i, mult = 1;

        // Alokace pole d_pole
        d_pole = (int *)malloc(N * sizeof(int));
        if (d_pole == NULL) exit(1);

        // Naplneni pole (1-10)
        for (i = 0; i < N; i++) d_pole[i] = i+1;

        // Nasobeni vsech lichych hodnot pole (1x3x5x7x9)
        for (i = 0; i < N; i++) {
                if (isOdd(d_pole[i])) mult *= d_pole[i];
        }

        // Vypis vysledku nasobeni (945)
        printf("%d\n", mult);

        return 0;
}

// Test na liche cislo
int isOdd(int num) {
        if (num % 2) return 1;
        return 0;
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 4. listopadu 19:22
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Matúš Olejník
Jirka Jr:4. listopadu 19:24

a jo vidíš.... to bude tím, že bych neměl číst noviny a zároveň odpovidat na prispevky tady :-)

Editováno 4. listopadu 19:24
 
Nahoru Odpovědět  +1 4. listopadu 19:24
Avatar
nemec.radovan:4. listopadu 19:24

No jo, vím že C sežere všechno, ale každá nějak začínal, každopádně děkuji za rady.

 
Nahoru Odpovědět 4. listopadu 19:24
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na nemec.radovan
Jirka Jr:4. listopadu 19:27

ne, hele sorry.... ten for cyklus mas zadany dobře, jak už psal Matúš....

 
Nahoru Odpovědět 4. listopadu 19:27
Avatar
DarkCoder
Člen
Avatar
Odpovídá na nemec.radovan
DarkCoder:4. listopadu 19:32

Ještě doplň před výpis výsledku násobení:

// Uvolneni pameti
free(d_pole);
Nahoru Odpovědět 4. listopadu 19:32
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Odpovídá na DarkCoder
nemec.radovan:4. listopadu 19:34

Díky, jen mě napadlo jde to udělat aby to vypsalo lichá čísla z pole a ty vynásobila ty čísla. Myslím tím že mam lichá čísla 1,3,5 a výsledek by byl 2, 6, 10?

 
Nahoru Odpovědět 4. listopadu 19:34
Avatar
DarkCoder
Člen
Avatar
Odpovídá na nemec.radovan
DarkCoder:4. listopadu 19:43

Musím říci, že vyznat se přesně v tom co chceš není zrovna lehké.

// Nasobeni lichych cisel hodnotou 2
for (i = 0; i < N; i++) {
        if (isOdd(d_pole[i])) printf("%d ",2 * d_pole[i]);
}
Nahoru Odpovědět  +2 4. listopadu 19:43
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Odpovídá na DarkCoder
nemec.radovan:4. listopadu 20:15

Popravdě, teď jak si to čtu po sobě, taky bych nejspíš nechápal :-? ale i přes to jsi to pochopil a děkuji za pomoc :-)

 
Nahoru Odpovědět 4. listopadu 20:15
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 11 zpráv z 11.