Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: Presnost vypoctov problem

Aktivity
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)
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.