ITnetwork Flashka zdarma C# týden
Akce! Pouze tento týden sleva až 80 % na kurzy C# .NET. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
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)
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.