Przyspieszenie pracy programu

0

Napisałem program który sprawdza czy okregi się przecinają ale strasznie długo mi ten program działa da się przyspieszyć jego pracę?

 #include <iostream>
#include <vector>
#include <sstream>
#include<cmath>

using namespace std;

int main()
{

    vector <float> tab1;
    string line;
    float tmp,ab;
    stringstream ss;
    int ilosc=1,wejsc=0;

   while(getline(cin,line).good() && !line.empty())
    {
         ss<<line;
        for(int i=0;i<3;i++){
            ss>>tmp;
            tab1.push_back(tmp);
        }
        ss.clear();
        if(wejsc>0)
        {

            for(int i=0;i<tab1.size()-3;i=i+3)
            {
               ab=sqrt((tab1[tab1.size()-3]-tab1[i])*(tab1[tab1.size()-3]-tab1[i])+(tab1[tab1.size()-2]-tab1[i+1])*(tab1[tab1.size()-2]-tab1[i+1]));
               if(tab1[i+2]-tab1[tab1.size()-1]<ab  &&tab1[i+2]+tab1[tab1.size()-1]>ab )
               {
                   ilosc++;
                   break;
               }

            }
        }
        wejsc++;

    }
    cout<<ilosc;







    return 0;
}
1
#include <iostream>
#include <vector>
using namespace std;

struct circle { double y,x,r; };
inline double sqr(double v) { return v*v; }
 
int main()
  {
   cin.sync_with_stdio(false);
   vector<circle> tb;
   unsigned count=0;
   for(circle cr;cin>>cr.y>>cr.x>>cr.r;tb.push_back(cr)) for(int i=0;i<tb.size();++i) count+=(sqr(tb[i].y-cr.y)+sqr(tb[i].x-cr.x)<sqr(tb[i].r+cr.r));
   cout<<count<<endl;
   return 0;
  }
0

rozumiem jak działa program ale mam jedno pytanie kiedy on kończy wczytywanie liczb?

1

Jeżeli to przekierowane z pliku - kończy się kiedy skończy się plik
Jeżeli wpisujesz z konsoli windows - to kończy się z <Ctrl-Z><Enter> na pustym wierszu.
Jeżeli ... powiedz który przypadek cie interesuje.

0

Jeżeli wpisujesz z konsoli windows - to kończy się z <ctrl-z><enter> na pustym wierszu

0

po wprowadzeniu pustego wiersza wiem jak to zrobić na stringu ale na double nie mam pojecia

0

W pliku jest tylko i wyłacznie tekst, żadnych double.

0

dane wprowadzasz do

struct circle { double y,x,r; };

czyli do zmiennych typu double z klawiatury podajesz liczby na ktorych maja byc wykonywane obliczenia o to mi chodziło.
Pytanie moje brzmi jak zakończyć wprowadzanie liczb poprzez wpisanie pustego wiersza
jak wektor jest typu string wystarczy napisać taką petle:

  while(getline(cin,line).good() && !line.empty())
0

Wczytywanie liczb lub słów w C/C++ domyślnie ignoruje wszystkie białe znaki w tym enter.
Więc aby zareagowało na pusty wiersz, trzeba wczytywać do string'a po czym zainicjalizować nim stringstream następnie wczytać liczby ze stringstream'a

1 użytkowników online, w tym zalogowanych: 0, gości: 1