November Black Friday C/C++ week
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C/C++

Diskuze: Presnost vypoctov problem

Aktivity (2)
Avatar
Wolf
Člen
Avatar
Wolf:23. března 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. března 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
Wolf
Člen
Avatar
Wolf:23. března 21:18

Uz som na to prisiel.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
23. března 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.