Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
discount week 80
Avatar
madewman
Člen
Avatar
madewman:23.3.2019 12:58
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define M_PI 3.14159265358979323846


double dieryPlatkuSyra(int m, double d[1001][4], double Zod, double Zdo);

int main(){
        int m;
        double d[1001][4];
        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];

        }
        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(m,d,Zod,Zdo);
                        rozdiel = Vdielu - VsyraOzaj;
                        if(rozdiel<0) rozdiel*=(-1);
                }while(rozdiel>0.0000001);
                printf("%.9f\n",h);

        }
        printf("%.9f\n",100-Zdo);
        system("Pause");
        //return 0;
}
double dieryPlatkuSyra(int m, double d[1001][4], 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][0]<=Zdo)){
                        // stedy 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 Vdp = 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] - 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;
                V += (Vdl+Vdp);
        }
        return v;
}

Vedel by mi niekto pomoct s timto kodom kod je riesenim tohto zadania ale "":https://kurzy.kpi.fei.tuke.sk/…factory.html ale pri zadani druheho testovacieho cisla vznikne velka nepresnost ktora nie podla tohto zadania pripustna.

Zkusil jsem: Analyzovat ale nepomohlo.

Chci docílit: Presnost vypoctu podla zadania.

Odpovědět
23.3.2019 12:58
"Whether you think you can, or you think you can't - you're right."(Henry Ford)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
madewman
Člen
Avatar
madewman:23.3.2019 21:18

Uz som na to prisiel.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
23.3.2019 21:18
"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 2 zpráv z 2.