|
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, 23: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, 17:56
Bardzo, bardzo ci dzi?kuj?! 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 (wiem, bez sensu...) Ca?kiem mo?liwe, ?e jeszcze kiedy? b?d? potrzebowa? twojej pomocy... Zgodzisz si??
-kubpica - 2016-05-30, 18:37
Dzi?ki! Nie ma za co i zadania z informatyki to dla mnie sama przyjemno?? wi?c prosz? ich jak najwi?cej! haha
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 A skoro nie ma tego w te?ci zadania to my?l?, ?e mo?na to sobie za?o?y
-kubpica - 2016-05-30, 20:18
Skoro ju? kto? zagl?dn?? to tego tematu to mam ?mieszny ?art:
|
|