PR Forum
Największe polskie forum o Platform Racing

Zaplecze - Zadanie z infy dla Megravina :) - 10 ci?gów liczb ca?kowityc

-kubpica - 2016-05-29, 22:45
Temat postu: Zadanie z infy dla Megravina :) - 10 ci?g?w liczb ca?kowityc
W pliku tekstowym o nazwie ,,ciagi.txt'' znajduje si? 10 ci?g?w liczb ca?kowitych nie wi?kszych ni? 32767. Pierwszy ci?g sk?ada si? z 10 element?w a ka?dy nast?pny jest o 2 elementy d?u?szy. Napisz program kt?ry sprawdzi kt?ry z nich jest ci?giem arytmetycznym oraz okre?li czy ci?g jest ci?giem rosn?cym czy malej?cym.

Tylko mam taki problem, ?e nie wiem w jaki spos?b s? te ci?gi zapisane w pliku ci?gi.txt Fajnie jakby? pokaza? par? linijek z tego pliku. Zak?adam, ?e jeden ci?g jest w jednym wierszu, a elementy tego ci?gu (liczby) s? oddzielone spacj?.

Przyk?adowy ciagi.txt:
Kod:
1 2 3 4 5 6 7 8 9 10
12 11 10 9 8 7 6 5 4 3 2 1
400 245 120 99 88 77 66 55 44 33 22 11 9 8
400 245 120 99 88 77 66 55 44 33 22 11 9 8 8 8
400 245 120 99 88 77 66 55 44 33 22 11 9 8 8 8 9 10
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 3900 4000
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 3900 4000 5000 6000 7000 8000 8001 8002


Przyk?adowy kod w c++: (testowane w Code::Blocks 13.12 z GNU GCC Compiler)
Kod:
#include <iostream>
#include <fstream> //potrzebne do odczytywania i zapisywania plikow txt
#include <sstream> //potrzebne do stringstream ciag

using namespace std;

int main()
{
    ifstream ciagi;
    ciagi.open("ciagi.txt"); //otwieram plik ciagi.txt
    ofstream wynik;
    wynik.open("wyniki.txt");
    stringstream ciag;
    string ciag_string;
    int liczba1 = 0;
    int liczba2 = 0;
    bool czy_arytmetyczny = false;
    bool czy_monotoniczny = false;
    bool czy_rosnacy = false;
    bool czy_staly = false;
    bool czy_pierwszy_obieg = false;
    int roznica = 0;

    while(getline( ciagi, ciag_string )){ //tu pobieram sobie ca?y 1 wiersz i przypisuje go do ciag_string - petla bedzie dzialac dop?ki nie skoncza sie wiersze w ciagi.txt
        ciag.clear(); //czyszcze stringstream musi to byc
        ciag << ciag_string; //przypisuje sobie zawartosc wiersza (czyli ciag) do strumienia ciag dzieki temu latwo bede mogl odczytywac kolejne wyrazy ciagu w nastepnej petli while
        cout << ciag_string << endl;
        czy_arytmetyczny = true; //tu jakby z gory zakladam ze wszytko jest prawdziwe...
        czy_monotoniczny = true;
        czy_rosnacy = true;
        czy_staly = true;
        czy_pierwszy_obieg = true;
        ciag >> liczba1;
        while(ciag >> liczba2){ // ale potem to sprawdzam w tej petli
                //cout << liczba1 << " " << liczba2 << endl;
                if(czy_pierwszy_obieg){
                    roznica = liczba2 - liczba1;
                    if(liczba2 < liczba1) czy_rosnacy = false; else czy_rosnacy = true; //tu sprawdzam po pierwszych 2 wyrazach ciagu czy jest rosnacy czy malejacy...
                    if(liczba2 != liczba1) czy_staly = false; else czy_staly = true; //albo czy staly...
                    czy_pierwszy_obieg = false;
                } else{ //ale co jak ciag nie jest monotoniczny? wiec musze sprawdzic tez pozostale wyrazy ciagu
                    if(roznica != (liczba2 - liczba1)) czy_arytmetyczny = false;
                    if(liczba2 < liczba1 && czy_rosnacy == true){
                        czy_monotoniczny = false; //po 2 pierwszych wyrazach ciagu myslalem ze jest rosnacy a tu nagle liczba2 < liczba1 omg czyli ciag ten jest niemonotoniczny!
                        czy_staly = false; //nie jest wiec tez staly
                    } else //tu nie musi byc tego else ale moze
                    if(liczba2 > liczba1 && czy_rosnacy == false){
                        czy_monotoniczny = false; //po 2 pierwszych wyrazach ciagu myslalem ze jest malejacy a tu nagle liczba2 > liczba1 omg czyli ciag ten jest niemonotoniczny!
                        czy_staly = false;
                    }
                    if(liczba2 == liczba1){
                        czy_monotoniczny = false; //skoro dwa wyrazy w ciagu sa rownie to ciag nie jest ani rosnacy ani malejacy
                    } else czy_staly = false;
                }
                liczba1 = liczba2;
        }
        //wypisanie wyniku do wyniki.txt:
        if(czy_arytmetyczny) wynik << "ciag arytmetyczny i "; else wynik << "ciag niearytmetyczny i ";
        if(czy_staly) wynik << "staly" << endl;
        else if(!czy_monotoniczny) wynik << "niemonotoniczny" << endl;
        else if(czy_rosnacy) wynik << "rosnacy" << endl;
        else if(!czy_rosnacy) wynik << "malejacy" << endl;

        //wypisanie wyniku do konsoli:
        if(czy_arytmetyczny) cout << "ciag arytmetyczny i "; else cout << "ciag niearytmetyczny i ";
        if(czy_staly) cout << "staly" << endl;
        else if(!czy_monotoniczny) cout << "niemonotoniczny" << endl;
        else if(czy_rosnacy) cout << "rosnacy" << endl;
        else if(!czy_rosnacy) cout << "malejacy" << endl;
    }
    cin >> roznica; // tak o ?eby konsola nie znikala
    return 0;
}

Jak chcesz to analizowa? to wrzu? ten kod gdzie? ?eby ci go pokolorowa?o - lepiej si? czyta.
Najlepiej pobierz kod i przyk?adowy program st?d - http://www.mediafire.com/...egazadzinfy.zip

wyniki.txt dla przyk?adowego ciagi.txt i powy?szego kodu:
Kod:
ciag arytmetyczny i rosnacy
ciag arytmetyczny i malejacy
ciag niearytmetyczny i malejacy
ciag niearytmetyczny i niemonotoniczny
ciag niearytmetyczny i niemonotoniczny
ciag arytmetyczny i staly
ciag niearytmetyczny i rosnacy
ciag arytmetyczny i staly
ciag niearytmetyczny i niemonotoniczny
ciag niearytmetyczny i rosnacy


Ja u?y?em stringstream, getline() oraz dw?ch p?tli while dzi?ki czemu m?j program nie musi zna? d?ugo?ci ci?gu, ale skoro z tre?ci zadania znamy d?ugo?? kolejnych ci?g?w to mo?na ten program napisa? bez tego. M?j program sprawdza czy ci?g w og?le jest monotoniczny oraz czy nie jest czasem sta?y, ale z tre?ci zadania wnioskuj?, ?e w pliku ciagi.txt s? tylko 2 rodzaje ci?g?w - albo malej?cy albo rosn?cy. W takim przypadku mo?na by napisa? ten program pro?ciej. Jak podasz mi zawarto?? ciagi.txt to postaram si? napisa? prostszy kod. Je?eli nie rozumiesz kt?rego? fragmentu to pisz, a ch?tnie postaram si? ci go wyt?umaczy? ;)

Megravin - 2016-05-30, 16:56

Bardzo, bardzo ci dzi?kuj?! :lol: :lol: Z tego co widz? jeste? bardzo dobrym informatykiem ;) Kiedy zacz??e? swoj? przygod? z C++? Jaka jest twoja decyzja w tej sprawie?

Je?li chodzi o ten plik... to niestety chyba nie istnieje, program mia? by? napisany bez niego XD (wiem, bez sensu...) Ca?kiem mo?liwe, ?e jeszcze kiedy? b?d? potrzebowa? twojej pomocy... Zgodzisz si?? :D

-kubpica - 2016-05-30, 17:37

Dzi?ki! Nie ma za co i zadania z informatyki to dla mnie sama przyjemno?? wi?c prosz? ich jak najwi?cej! haha :DD
Zacz??em uczy? sie c++ jako? w gimnazjum i do matury uczy?em si? samemu.

Ja si? nawet nie skapn??em, ?e by? b??d, bo sprawdzi?em tylko kilka pierwszych odpowiedzi i mia?em je dobrze (trzeba by?o napisa? program, kt?ry wypisze w notatniku chyba z 10000 s??w, b?d? bra? pod uwag? tylko pierwsze 700). Moja decyzja to zostawiam jak jest, nie pisz? 2 raz.

A powracaj?c do zadania to obawiam si?, ?e ci?gi mog? nie by? rozdzielone wierszami (np. wszystkie zapisane w 1 lini) w takim przypadku trzeba by skorzysta? z informacji o d?ugo?ci ci?g?w. Ale jak wygl?da ciagi.txt tego chyba si? nie dowiemy :D A skoro nie ma tego w te?ci zadania to my?l?, ?e mo?na to sobie za?o?y

-kubpica - 2016-05-30, 19:18

Skoro ju? kto? zagl?dn?? to tego tematu to mam ?mieszny ?art: :P


Powered by phpBB modified by Przemo © 2003 phpBB Group