• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy w kodzie jest jakiś błąd/Da się go w jakiś sposób ulepszyć ?

Object Storage Arubacloud
0 głosów
240 wizyt
pytanie zadane 13 listopada 2017 w C i C++ przez Michał Starski Nowicjusz (120 p.)

Witam, 

Mam do napisania zadanie o następującej treści: 

------------------------------

Dane są opisy kół w postaci trzech liczb - współrzędnych środka oraz promienia. Dla wskazanych par kół należy wypisać, jaka jest odległość pomiędzy środkami tych punktów oraz ile wynosi pole większego z nich.

Wejście

Pierwsza linia wejścia składa się z jednej liczby całkowitej x (1<= x <= 1000) oznaczającej liczbę kół na liście.
Kolejne x linii wejście zawiera po 3 liczby p, q, r (-1000 <= p,q  <= 1000, 1 <= r <= 1000) oznaczające odpowiednio rzędną i odciętą środka koła oraz jego promień. Koła pojawiają sie po kolei i są numerowane od 1.
Następna linia zawiera jedną liczbę całkowitą n (1<= n <= 1000) oznaczającą liczbę par, które za chwilę pojawią się na wejściu.
Kolejne n linii to pary liczb a, b (1<= a,b <= x) oznaczające pary kół, dla których należy wykonać obliczenia.

Wyjście

Dla każdej pary kół należy wypisać dwie liczby rzeczywiste, z których pierwsza oznacza odległość euklidesową pomiędzy ich środkami, a druga pole powierzchni większego z kół, obie z dokładnością do dwóch miejsc po przecinku.

UWAGA:
Należy przyjąć, że wartość PI wynosi dokładnie 3,14.

Przykład

Wejście:
3
0 0 3
1 1 2
2 4 4
3
1 2
2 3
3 1

Wyjście:
1.41 28.26
3.16 50.24
4.47 50.24

------------------------------------------------

Napisałem już owy program i w kompilatorze śmiga bezproblemowo, jednak żeby zadanie zostało zaliczone, musi przejść przez internetową sprawdzarkę. Moje pytanie więc brzmi - Czy mój kod jest zły ? Co może powodować, że sprawdzarka nie chce przyjąć mojego rozwiązania? 

Mój kod: 

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;


void distance(int x1, int x2, int y1, int y2);
void surfaceArea(float pi, int r1, int r2);

struct Circle{

    int q; // rzedna (y)
    int p; // odcieta (x)
    int r; // promien kola
};

int main() {
    
    int x; // liczba kol na liscie
    cin >> x;
    if(x<1)
        cout << "ERROR" << endl;
    Circle tab[x];
    int rzedna,
        odcieta,
        promien;
    for(int i=0;i<x;i++){
        cin >> rzedna >> odcieta >> promien;
        tab[i].p = rzedna;
        tab[i].q = odcieta;                 //Deklaracja wlasciwosci kola
        tab[i].r = promien;
    }
    int n; //Liczba par na wejsciu
    cin >> n;
    int circle1,
        circle2;
    for(int i =0; i<n; i++){
        cin >> circle1 >> circle2;
        int x1,x2,y1,y2,r1,r2;
        x1 = tab[circle1-1].p;
        x2 = tab[circle2-1].p;
        y1 = tab[circle1-1].q;
        y2 = tab[circle2-1].q;
        r1 = tab[circle1-1].r;
        r2 = tab[circle2-1].r;
        
        distance(x1, x2, y1, y2);
        cout << " ";
        surfaceArea(3.14, r1, r2);
        cout << endl;
        
    }
    
 
    
    return 0;
}

void distance(int x1, int x2, int y1, int y2){
    
    float d;
    
    d = sqrt(pow(x2-x1, 2)+pow(y2-y1, 2));
    cout << setprecision(3) << d;
    
}

void surfaceArea(float pi, int r1, int r2){
    float surface1, surface2;
    
    surface1 = pi*pow(r1,2);
    surface2 = pi*pow(r2, 2);
    
    if(surface1 > surface2)
        cout << setprecision(4) << surface1;
    else
        cout << setprecision(4) << surface2;
}

 

1 odpowiedź

0 głosów
odpowiedź 13 listopada 2017 przez mokrowski Mędrzec (155,460 p.)
1. Test w 21 i 22 niepotrzebny. Zasilanie danymi w sprawdzarkach nie ma błędów. Chyba że to wyraźnie zapiszą że masz się na to przygotować.

2. Dlaczego współrzędne nie nazywają się x,y i r?

3. Po co liczysz dwa pola (71, 72) gdy wystarczy policzyć to o większym promieniu?

4. Po co przesyłasz "pseudo pi" (3.14) kiedy to jest stała?

5. Średni pomysł nazywać funkcję distance i nie zwracać z niej odległości .. podobnie z drugą.

Sprawdź na sprawdzarce to będziesz miał informację zwrotną "czy to jest dobre rozwiązanie" :-)

Podobne pytania

0 głosów
1 odpowiedź 496 wizyt
+1 głos
1 odpowiedź 1,035 wizyt
pytanie zadane 6 lipca 2015 w C i C++ przez Kyuubi Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 186 wizyt
pytanie zadane 12 grudnia 2015 w PHP przez MrTomek_ Użytkownik (570 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...