Przyspieszenie pracy programu

Odpowiedz Nowy wątek
2014-12-14 15:48
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;
}

Pozostało 580 znaków

2014-12-14 17:36
#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;
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
A po co ten sqr() na promieniach? Przeciez warunek przecięcia to "długość wektora pomiędzy (x1,y1) i (x2,y2) musi być mniejsza lub równa sumie promieni". - Shalom 2014-12-14 18:07
@Shalom, czy przypadkiem ci się nie pomylili sqr a sqrt? Z tym równym ... w kodzie od @Reclab widzę ostry warunek. - _13th_Dragon 2014-12-14 18:09
Ok teraz widzę że ty po prostu nie pierwiastkujesz sobie przy liczeniu długości wektora :) - Shalom 2014-12-14 18:15
No bo po kiego pierwiastkować, skoro nas interesuje tylko mniej czy więcej :) - _13th_Dragon 2014-12-14 18:26

Pozostało 580 znaków

2014-12-15 16:37
0

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

edytowany 1x, ostatnio: Reclab, 2014-12-15 16:37

Pozostało 580 znaków

2014-12-15 17:20
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-16 16:34
0

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

"... powiedz który przypadek cie interesuje" - miało być w przypadku: - żaden z powyższych ;) - _13th_Dragon 2014-12-16 17:24

Pozostało 580 znaków

2014-12-17 17:25
0

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

edytowany 2x, ostatnio: Reclab, 2014-12-17 17:30

Pozostało 580 znaków

2014-12-17 18:35
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-17 20:29
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())

Pozostało 580 znaków

2014-12-17 20:34
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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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