Kod jest zbyt długi - jak go skrócić?

0

Napisałem program ale niestety jest on zbyt długi czy ktoś ma jakiś pomysł jak go skrócić o to kod :

#include <iostream>
#include <vector>
#include <sstream>
#include<cmath>
#include <cstdio>
using namespace std;

int main()
{vector <float> t;
string l;
    float a;
    stringstream s;
   while(getline(cin,l).good() && !l.empty()){s<<l;s>>a;t.push_back(a);s.clear();}
    for(int i=1;i<t.size()-1;i++)
        t[0]=t[0]*t[t.size()-1]+t[i];
    printf("%.3lf",t[0]);
    return 0;
}
2

Dobrze byłoby napisać co ten program miał robić ;)

4

Ale co jest za długiego tutaj? Czas wykonania czy liczba linijek? Bo jeżeli to drugie, to chyba żartujesz - to już jest maksymalnie nieczytelne. Jakości kodu nie mierzy się ilością znaków, a już na pewno nie "im mniej tym lepiej".

0

rozmiar pliku źródłowego

1

Ale po jakiego grzyba ma być mniejszy?!

1

Może chodzi o rozmiar pliku wykonywalnego?
W takim wypadku nie usuwać białych znaków, a dodać odpowiednią flagę kompilatora.

0

Mam jeszcze jedno pytanie czy jest jakiś inny sposób na wprowadzenie nie znanej ilości liczb po spacji do tablicy/wektora

0

Napisałem program ale niestety jest on zbyt długi

To najpierw wyjaśnij jaki jest limit (i skąd się on bierze). Inaczej to głupiego robota.

5

Wersja skrócona (a do tego faktycznie czytelna):

    vector<float> t;
    copy(istream_iterator<float>(cin), istream_iterator<float>(), back_inserter(t));

    float result = accumulate(next(t.begin()), prev(t.end()), t.at(0),
               [&](float total, float v){
        return total * t.back() + v;
    });

    cout << result << endl;

http://melpon.org/wandbox/permlink/0cbZ2NGaXilN1E8T
oryginał: http://melpon.org/wandbox/permlink/dU6qHVG8pBdnMaVV

Przy okazji, Twój kod jest tragicznie nieczytelny, zobacz o ile lepiej jest już po samym przepuszczeniu go przez clang-format (via http://format.krzaq.cc):

#include <iostream>
#include <vector>
#include <sstream>
#include <cmath>
#include <cstdio>
using namespace std;

int main()
{
    vector<float> t;
    string l;
    float a;
    stringstream s;
    while (getline(cin, l).good() && !l.empty())
    {
        s << l;
        s >> a;
        t.push_back(a);
        s.clear();
    }
    for (int i = 1; i < t.size() - 1; i++)
        t[0] = t[0] * t[t.size() - 1] + t[i];
    printf("%.3lf", t[0]);
    return 0;
}
0

Ten kod jest bezsensu, bo na pewno nie działa.

  • dziwnie wczytujesz dane na pewno nie o to chodziło
    - liczysz coś bezsensu (jedynie ostatnia iteracja pętli for ma wpływ na wynik końcowy)

Lepiej zacznij od podania pełnej treści twojego zadania, a następnie napisz sam normalnie napisany kod, który działa poprawnie.
Dopiero po tym bierz się za jego skracanie, pokaż co zrobiłeś, a wtedy pomożemy (bo dopiero wtedy będziemy w stanie pomóc).

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