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: Globalna premenna na Lokalnu

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

Aktivity
Avatar
madewman
Člen
Avatar
madewman:21.3.2019 22:39
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int m;
double d[10001][4];
double dieryPlatkuSyra(double Zod, double Zdo);
int main() {
int s,i,j;
scanf("%d %d",&m,&s);
double Vkocky=100.0*100.0*100.0;
double Vdier=0, Vsyra, Vdielu, Hdielu;
int a[4];
for(i=0; i<m; i++) {
scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
for(j=0; j<4; j++)
d[i][j] = a[j]/1000.0;
Vdier += 4.0/3.0*M_PI*d[i][0]*d[i][0]*d[i][0];
}
Vsyra = Vkocky - Vdier;
Vdielu = Vsyra / s;
Hdielu = 100.0/s;
double h, Zod=0.0, Zdo=Hdielu, VsyraOzaj, rozdiel;
for(i=0; i<s-1; i++) {
if(i>0 && i<s-1) {
Zod=Zdo;
Zdo+=Hdielu;
}
do {
Zdo += (Vdielu-VsyraOzaj)/(100.0*100.0);
h = Zdo-Zod;
VsyraOzaj = 100.0*100.0*h - dieryPlatkuSyra(Zod,Zdo);
rozdiel=Vdielu-VsyraOzaj;
if(rozdiel<0) rozdiel*=(-1);
} while (rozdiel>0.0000001);
printf("Hrubka %d. platku syra: %.9f\n",i+1,h);
}
printf("Hrubka %d. platku syra: %.9f\n",i+1,100-Zdo);
system("PAUSE");
return 0;
}
double dieryPlatkuSyra(double Zod, double Zdo) {
double V=0.0, Vdl, Vdp, v;
int i;
for(i=0; i<m; i++) {
if(((d[i][3]+d[i][0])<Zod)||((d[i][3]-d[i][0])>Zdo))
// diera mimo platku
continue;
if(((d[i][3]-d[i][0])>Zod)&&((d[i][3]+d[i][0])<Zdo)) {
// cela diera v platku
V += 4.0/3.0*M_PI*d[i][0]*d[i][0]*d[i][0];
continue;
}
if((d[i][3]>=Zod)&&(d[i][3]<=Zdo)) {
//stred diery v platku
if((d[i][3]-d[i][0])<Zod) { //presah zlava
v=Zod-(d[i][3]-d[i][0]);
Vdl=M_PI*v*v*(d[i][0]-v/3.0);
}
else Vdl=0.0;
if((d[i][3]+d[i][0])>Zdo) { //presah sprava
v=(d[i][3]+d[i][0])-Zdo;
Vdp=M_PI*v*v*(d[i][0]-v/3.0);
}
else Vdp=0.0;
V += (4.0/3.0*M_PI*d[i][0]*d[i][0]*d[i][0]-Vdl-Vdp);
continue;
}
//stred diery mimo platku
if(d[i][3]<Zod) { //zlava
v=(d[i][3]+d[i][0])-Zod;
Vdl=M_PI*v*v*(d[i][0]-v/3.0);
}
else Vdl=0.0;
if(d[i][3]>Zdo) { //sprava
v=Zdo-(d[i][3]-d[i][0]);
Vdp=M_PI*v*v*(d[i][0]-v/3.0);
}
else Vdp=0.0;
V += (Vdl+Vdp);
}
return V;
}

Zkusil jsem: Snažil som zadefinovať premenné int m a double d[1001][4] do main programu ale zároveň do funckie ako vstupne parametre ale fungovať to asi nebude kedže mám tam výpočty v ktorej sa odvolam na funkciu.

Chci docílit: Potrebujem v tomto kóde dosiahnuť aby tie dve globalne premenné tam neboli len aby celý program bežal na lokalných premennách.

Odpovědět
21.3.2019 22:39
"Whether you think you can, or you think you can't - you're right."(Henry Ford)
Avatar
DarkCoder
Člen
Avatar
Odpovídá na madewman
DarkCoder:22.3.2019 0:07

Pravidlo: Sdílí-li globální a lokální proměnná stejné jméno, použije překladač vždy lokální proměnnou.

Pokud funkce pracuje s proměnnou definovanou mimo funkci, je dobré ji předávat přes parametr funkce. Je třeba dělat funkce obecné a nevytvářet něco, co se má spoléhat na něco zvenčí.

PS: Zapracuj na vizuální podobě programu (odsazuj, používej mezery). Jak chceš pak spravovat kód, který bude mít podstatně větší počet řádků? Nevyznáš se v tom. Dále v C se deklarace provádí buď vně všech funkcí nebo na začátku funkce či bloku. Nemůžeš deklarovat proměnné po provedení příkazu.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
22.3.2019 0:07
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
madewman
Člen
Avatar
Odpovídá na DarkCoder
madewman:22.3.2019 6:51

Odsadzujem kod len ako som to tu nahraval tak sa mi to tak vsetko dalo spolu.

Nahoru Odpovědět
22.3.2019 6:51
"Whether you think you can, or you think you can't - you're right."(Henry Ford)
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 3 zpráv z 3.