Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Aktualizovali jsme provozní podmínky. Pokračováním užívání sítě s nimi projevíte souhlas.
BF extended 2022
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.