Java týden Java týden
Pouze tento týden sleva až 80 % na celý Java e-learning!
Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!
Avatar
nemec.radovan:4.11.2018 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.11.2018 18:26
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na nemec.radovan
Jirka Jr:4.11.2018 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.11.2018 19:07
Avatar
Odpovídá na Jirka Jr
Matúš Olejník:4.11.2018 19:19

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

Editováno 4.11.2018 19:20
Nahoru Odpovědět  +1 4.11.2018 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.11.2018 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.11.2018 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.11.2018 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.11.2018 19:24
 
Nahoru Odpovědět  +1 4.11.2018 19:24
Avatar
nemec.radovan:4.11.2018 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.11.2018 19:24
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na nemec.radovan
Jirka Jr:4.11.2018 19:27

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

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

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

// Uvolneni pameti
free(d_pole);
Nahoru Odpovědět 4.11.2018 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.11.2018 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.11.2018 19:34
Avatar
DarkCoder
Člen
Avatar
Odpovídá na nemec.radovan
DarkCoder:4.11.2018 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.11.2018 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.11.2018 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.11.2018 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.