Zabavno dejstvo iz sveta matematike
1/998001 nam da urejeno zaporedje od 000 do 999. 1/998001 = 0.000001002003004...

Zabavno dejstvo iz sveta računalništva
Leta 1936 so Rusi naredili računalnik na vodo. (Vir: http://gizmodo.com/5879106/the-russian-computer-that-ran-on-water)

Krožni diagram

Moderatorji: hinkopihpih, Matic Conradi

lukazlatecan
Site Admin
Prispevkov: 23
Pridružen: Po Apr 24, 2017 5:29 pm
Kraj: Celje

Krožni diagram

OdgovorNapisal/-a lukazlatecan » Če Maj 18, 2017 11:26 am

Napišite program, ki bo iz geometrijskega opisa krožnega diagrama izračunal, kako si krožni izseki sledijo po velikosti.

Krožni diagram bo opisan z daljicami, ki imajo eno od krajišč v izhodišču koordinatnega sistema. Če bi narisali krog s središčem v izhodišču in polmerom 1, bi ga podane daljice razrezale na krožne izseke, kar bi predstavljalo naš krožni diagram. Vsak krožni izsek lahko opišemo s parom zaporednih številk dveh daljic (kot so podane na vhodu), ki ga omejujeta, in sicer v takem vrstnem redu, da se od prve proti drugi daljici premikamo v pozitivni smeri (nasprotni smeri urinega kazalca). Daljice se lahko tudi prekrivajo. Če na primer obstaja skupina daljic z zaporednimi številkami 6, 8 in 15, ki se prekrivajo, le-te opisujejo dva prazna krožna izseka, in sicer (6,8) ter (8,15). Daljici z oznakama 6 in 15 mejita še na druge izseke. (Glejte tudi drugi zgled.)

Krožne izseke morate urediti po velikosti od najmanjših proti največjim. Enako velike izseke uredite glede na prvo od daljic v paru, ki opisuje ta izsek (tako vsaka daljica določa natanko en krožni izsek).

Vhodni podatki
V prvi vrstici se nahaja število testnih primerov T. Pred vsakim primerom je prazna vrstica, nato pa sledi število Nt, tj. število daljic v t-tem testnem primeru. V naslednjih Nt vrsticah so podane koordinate xj in yj krajišč teh daljic, ki vse izhajajo iz koordinatnega izhodišča. Vsi vhodni podatki so cela števila.

Omejitve vhodnih podatkov
  • [math]
  • [math]

Izhodni podatki
Izpišite krožne izseke, kot si sledijo v vrstnem redu, ki je definiran v besedilu naloge. Vsak izsek naj bo opisan v svoji vrstici z dvema številkama, ki naj bosta ločeni s presledkom. Ti številki sta oznaki zaporednih daljic, ki omejujeta pripadajoči krožni izsek. Izpise testnih primerov med seboj ločite s po eno prazno vrstico.

Primer vhoda

Koda: Izberi vse

2

4
-2 3
9 9
0 -6
-3 2

4
0 -5
0 5
0 -1
0 2


Pripadajoč izhod

Koda: Izberi vse

1 4
2 1
4 3
3 2

1 3
2 4
3 2
4 1
Mathematicians have tried in vain to this day to discover some order in the sequence of prime numbers, and we have reason to believe that it is a mystery into which the human mind will never penetrate. - Leonhard Euler

hinkopihpih
Prispevkov: 11
Pridružen: Ne Apr 30, 2017 2:11 pm

Re: Krožni diagram

OdgovorNapisal/-a hinkopihpih » Ne Maj 28, 2017 11:20 am

Koda: Izberi vse

import java.util.*;
import java.io.*;
import java.lang.Math.*;

public class KrozniDiagram
{
   public static void main(String[]args)
   {
      Scanner skan;
      File vhod;

      try
      {
         vhod = new File("diagram.txt");
         skan = new Scanner(vhod);
      }
      catch(FileNotFoundException e)
      {
         skan = new Scanner(System.in);
      }

      int n = skan.nextInt();

      for(int i = 0; i < n; i++)
      {
         int m = skan.nextInt();
         double[][] koti = new double[m][2];
         double[][] izseki = new double[m][3];

         for(int j = 0; j < m; j++)
         {
            double x = skan.nextDouble();
            double y = skan.nextDouble();
            double kot = Math.asin(y/Math.sqrt(x*x+y*y));

            if(x < 0 && y > 0 || x < 0 && y < 0)
            {
               kot = Math.PI - kot;
            }   

            if(kot < 0)
            {
               kot += 2 * Math.PI;
            }

            koti[j][0] = (double)(j + 1);
            koti[j][1] = kot;
         }

         for(int j = 0; j < m; j++)
         {
            double min = koti[j][1];
            int index = j;

            for(int w = j + 1; w < m; w++)
            {
               if(koti[w][1] < min)
               {
                  min = koti[w][1];
                  index = w;
               }   
            }   

            double temp = koti[j][1];
            double temp2 = koti[j][0];
            koti[j][1] = min;
            koti[j][0] = koti[index][0];
            koti[index][1] = temp;
            koti[index][0] = temp2;
         }

         for(int j = 0; j < m; j++)
         {
            if(j == m - 1)
            {
               izseki[j][0] = 2 * Math.PI + koti[0][1] - koti[j][1];
               izseki[j][1] = koti[j][0];
               izseki[j][2] = koti[0][0];
            }   
            else
            {
               izseki[j][0] = koti[j + 1][1] - koti[j][1];
               izseki[j][1] = koti[j][0];
               izseki[j][2] = koti[j + 1][0];
            }   
         }

         for(int j = 0; j < m; j++)
         {
            double min = izseki[j][0];
            int index = j;

            for(int w = j + 1; w < m; w++)
            {
               if(izseki[w][0] < min)
               {
                  min = izseki[w][0];
                  index = w;
               }   
            }   

            double temp = izseki[j][0];
            double temp2 = izseki[j][1];
            double temp3 = izseki[j][2];
            izseki[j][0] = min;
            izseki[j][1] = izseki[index][1];
            izseki[j][2] = izseki[index][2];
            izseki[index][0] = temp;
            izseki[index][1] = temp2;
            izseki[index][2] = temp3;
            System.out.println(izseki[j][1] + " " + izseki[j][2]);
         }   
         System.out.println();
      }   
   }
}


Vrni se na “1. Kolo”

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost