IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Deklarace proměnných ve vlastní funkci

Aktivity
Avatar
Marek Novák
Člen
Avatar
Marek Novák:21.12.2018 10:33

#include <stdio.h>

int UMOCNENI(int S, int A[S], int B[S]);
int main(){

int UMOCNENI(int S, int A[S], int B[S]);{
S = 3;
A[S] = (2, 1, 3);
int i;
for(i = 0; i < S; i++ ){
B[i] = A[i*i]
}
}
}

Zkusil jsem: Google a zápisky z hodiny

Chci docílit: Zdravím, na vstup vlastní funkce UMOCNENI jsem deklaroval proměnné S a vektory A a B, ale kompilátor mi hlásí chybu, že tyto hodnoty deklarované nejsou. Nevíte, prosím, kde je chyba?

 
Odpovědět
21.12.2018 10:33
Avatar
Odpovídá na Marek Novák
Matúš Olejník:21.12.2018 11:00

Ahoj, úplne všade :) Asi si sa do toho pustil prvý krát, ale radšej si pred tým ešte prejdi tutoriály tu na sieti Základní konstrukce jazyka C
Z toho kódu ani neviem veľmi odhadnúť čoho sa snažíš docieliť, tak ak chceš vidieť ako by to mohlo vyzerať, napíš čo má tvoj program robiť a medzi tým čo si prejdeš tie základy, tak ti sem môžem pridať kód :)

Editováno 21.12.2018 11:00
Nahoru Odpovědět
21.12.2018 11:00
/* I am not sure why this works but it fixes the problem */
Avatar
Marek Novák
Člen
Avatar
Marek Novák:21.12.2018 11:31

/*Definujte vlastni funkci s nazvem UMOCNENI. vstupem do teto funkce je dvojicee celociselnzych vektoru A a B
a pocet slozek techto vektoru je S. Funkce nic nevraci. Ucelem funkce je napocitat druhe mocniny slozek A a ulzit je do B.*/
Jakože, nechci tu po nikom, aby za mě dělal úkoly, ale kdyby mi někdo poradil, jak má vypadat struktura, byl bych nesmírně vděčný :D

 
Nahoru Odpovědět
21.12.2018 11:31
Avatar
DarkCoder
Člen
Avatar
DarkCoder:21.12.2018 12:02

Zkontroluj si zejména středníky a závorky.

Zde je pár rad k tvému úryvků kódu:

Pokud funkce nemá parametr, používej klíčové slovo void. Pokud funkce vrací hodnotu, používej příkaz return s návratovou hodnotou. V C nelze definovat funkci uvnitř jiné funkce. Chybí Ti kompletně obsah funkce main(). Pro inicializaci prvků celociselneho pole se používají složené závorky. V tomto případě to ale takto dělat nemůžeš. Středník v hlavičce definice funkce být nemá a naopak Ti chybí v příkazu ve for cyklu.

Nahoru Odpovědět
21.12.2018 12:02
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Marek Novák
Člen
Avatar
Marek Novák:21.12.2018 12:41

void UMOCNENI(void);
int main(void){

void UMOCNENI(void){
int S;
S = 3;
int A[S];
int B[S];
A[S] = (2, 1, 3);
int i;
for(i = 0; i < S; i++ ){
B[i] =A[i*i];
printf("Vektor B=%d",B[i]);
return 0;
}
}
}
/*Zatím jsem se dostal sem. Chyby to už neukazuje a začíná to už něco dělat, ale jsem si téměř jist chybami v cyklu for.

 
Nahoru Odpovědět
21.12.2018 12:41
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Marek Novák
DarkCoder:21.12.2018 13:53

Pokud je výuka koncipována dobře, měl bys znát jak vypadá struktura programu, neboť bys měl mít potuchy co jsou to ukazatele. Protože to co se předává funkci není pole ale ukazatel na pole. A naopak, pokud probírate základy C, pak je příklad zadán nesmyslně, protože si příklad vyžaduje znalost pokročilejších technik.

Nahoru Odpovědět
21.12.2018 13:53
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Marek Novák
Člen
Avatar
Marek Novák:21.12.2018 14:44

C jsme probírali měsíc a tohle byla úloha ze zkoušky :D

 
Nahoru Odpovědět
21.12.2018 14:44
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Marek Novák
DarkCoder:21.12.2018 21:24

Zde máš řešení:

#include <stdio.h>

// Debug mod - 0 bez vypisu, 1 s vypisem
#define DEBUG 0

// Prototypy
void UMOCNENI(int arr1[], int arr2[], int size);
#if (DEBUG == 1)
void VYPIS(int arr[], int size);
#endif

int main(void) {
        int A[] = { 1,2,3,4,5 };
        int B[sizeof(A) / sizeof(int)];
        unsigned int len = sizeof(A) / sizeof(int);

        UMOCNENI(A, B, len);
#if (DEBUG == 1)
        VYPIS(B, len);
#endif
        return 0;
}

// Naplneni pole druhymi mocninami prvku prvniho pole
void UMOCNENI(int arr1[], int arr2[], int size) {
        int i;

        for (i = 0; i < size; i++) arr2[i] = arr1[i] * arr1[i];
}

#if (DEBUG == 1)
// Vypis pole
void VYPIS(int arr[], int size) {
        int i;

        for (i = 0; i < size; i++) printf("%d ", arr[i]);
}
#endif
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.12.2018 21:24
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Marek Novák
Člen
Avatar
Odpovídá na DarkCoder
Marek Novák:22.12.2018 7:58

Moc díky :D

 
Nahoru Odpovědět
22.12.2018 7:58
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 9 zpráv z 9.