matematykaszkolna.pl
c++ Metis: C++ http://pastebin.com/KGGBLsAA Ogółem działa dobrze, ale nie rozumiem dlaczego na początku wrzuca do pliku dwie dziwne liczby: 3435973836
29 sty 14:18
Metis: Dodałem x=x−1 i działa pięknie emotka
29 sty 14:31
Metis: Może mi ktoś wyjasnic co on pobiera, że wyrzuca tę liczbę?
29 sty 14:39
LUKE CAGE: Metis jesteś na PWr ?
29 sty 15:21
Metis: Nie.
29 sty 15:41
Metis: Dziadku możesz zerknąć na ten kod? http://pastebin.com/usteppEf Nie działa jak należy.
29 sty 15:46
Metis: *jak trzeba emotka
29 sty 15:47
Metis: Oraz zamiast min, powinno być max.
29 sty 15:48
Dziadek Mróz: Metis to taki Hugo, tyle że Hugo nic nie rozumiał, a Ty piszesz kod i nie wiesz co on robi
29 sty 15:48
Metis: Wiem Ale z tymi tablicami jest problem− wypełniają sie jakimiś śmieciami, albo pobieram coś spoza tablicy
29 sty 15:50
Dziadek Mróz: bo musisz pilnować zakresu. rób sobie debug zmiennych za pomoca wyświetlania cout'em
29 sty 15:57
Metis: No i naprawiłem emotka http://pastebin.com/HVxMzS0Q
29 sty 16:12
jc: A ja bym jednak coś poprawił. Dziadek nauczył nas, jak pisać warunek. Plus kilka innych drobiazgów. Przy okazji main() jest typu int. Nie pisze się już void w wywołaniu. Nie wszyscy mają pionowy ekran i czytanie rozciągniętych w pionie kodów nie jest najłatwiejsze. To odnośnie zbędnych klamerek. int main(){ int x=0; int tablica[500]; fstream wej; wej.open("dane.txt", ios::in); if (wej.good()) while ( wej ) wej >> tablica[x++]; int min = tablica[0]; for (int i=1; i < x; i++) if (min > tablica[i]) min = tablica[i]; cout <<"Wartosc najmniejsza: "<< min; }
29 sty 16:37
jc: W jakim celu dodajesz ciągle coś takiego getch(); , potem trzeba to usuwać, aby dało się skompilować.
29 sty 16:39
Jack: to chyba chodzi zeby dzialalo jak system("pause") zeby sie nie zamknelo po kompilacji
29 sty 16:42
jc: A jak działa system("pause") ? I co nie ma się zamykać po kompilacji?
29 sty 16:46
Metis: getch() dodaje by zatrzymać wiersz poleceń aż do momentu nacisniecia klawisza.
29 sty 16:55
Metis: http://pastebin.com/YbLgf7YH Ten kod działa, ale deklaruje w Nim stały rozmiar tablicy 500. W poleceniu podane jest, że ilość liczb jest nieokreślona, co się ze sobą gryzie. Jak rozwiązać ten problem? Najlepiej bez tablic z dynamiczną alokacją, a licznikiem.
29 sty 16:59
jc: W ogóle nie musisz zapamiętywać liczb. int min, x; if( wej ) cin >> min; while( wej ) { cin >> x; if(x < min) min = x; }
29 sty 17:04
jc: Oczywiście int min=0; int x=0; if( wej ) wej >> min; while( wej ) { wej >> x; if(x < min) min = x; }
29 sty 17:06
Metis: Zerknij jeśli możesz na ten problem, który wstawiłem wczesniej. Najlepiej jakby najpierw sprawdził ile liczb jest w danym pliku. Nie wiem tylko jak to zrobić bez zapisywania ich do tablicy
29 sty 17:08
jc: "zatrzymać wiersz poleceń" ?
29 sty 17:10
jc: Metis, zwyczajnie, po prostu po odczytaniu liczby zwiększasz licznik o jeden. Przecież nie musisz zapamiętywać liczb, aby policzyć ile ich jest.
29 sty 17:11
jc: Metis, po co chcesz zapisywać liczby do pliku? Wiele programów po prostu przetwarza dane, nie zapisując ich. Np. program wyświetlający film, nie zapisuje filmu, tylko czyta odpowiednie fragmenty; inaczej tylko nowe komputery poradziłyby sobie.
29 sty 17:18
29 sty 17:27
Dziadek Mróz: jc, on ma zajęcia z tego. Nieważne po co on to pisze, musi umieć to obsłużyć
29 sty 17:27
Dziadek Mróz: std::ifstream ifs; ifs.open("plik.txt"); if (ifs) // if (ifs.is_open()) { int num; while (ifs >> num) // break na ifs gdy napotka eof i nie wczyta num { std::cout << num << std::endl; } } else { perror("plik.txt"); // std::cerr << "plik.txt"; (ale bez info co jest przyczyną błędu) }
29 sty 17:31
jc: Faktycznie pojawiło się zadanie z odwróceniem kolejności elementów. Tu faktycznie trzeba zapamiętać w ten czy inny sposób dane.
29 sty 17:44
Metis: Napisałem sobie coś takiego: http://pastebin.com/jnAUZBNB Ale znowu jakiś problem z tymi tablicami... Liczenie ilosci liczb działa. i − ilosc liczb Pozniej tworze tablice o takiej wielkosci. A dalej nic z tego.
29 sty 17:57
jc: A co program czyta po pierwszym czytaniu? Nie wiem, jak to ładnie rozwiązać. Pewnie zamknięcie pliku i ponowne otwarcie pomoże.
29 sty 18:04
Metis: Własnie próbowałem juz tak, do tego dodałem wyczyszenie flag błedów wej.clear(); i nic.
29 sty 18:05
Metis: Spróbuje je wyczyścić tą tablicę przed.
29 sty 18:06
Metis: i nicemotka
29 sty 18:09
jc: Otwórz plik zlicz liczbę elementów zamknij plik utwórz tablicę otwórz plik wpisz dane do tablicy zamknij plik To nie jest ładne, ale działa.
29 sty 18:20
Bartek: Metis gdzie i co Ty właściwie studiujesz?
29 sty 18:22
Dziadek Mróz: std::ifstream ifs; std::vector<int> vec; ifs.open("plik.txt"); if (ifs) { int num; while (ifs >> num) { vec.push_back(num); } for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { std::cout << (*it) << std::endl; } /* lub for (size_t i = 0; i < vec.size(); i++) { std::cout << vec[i] << std::endl; } */ } else { perror("plik.txt"); } ifs.close();
29 sty 20:18
Dziadek Mróz: std::ifstream ifs; stdofstream ofs; ifs.open("plik1.txt"); int *nums = NULL; int i = 0; if (ifs) { int num; while (ifs >> num) { i++; nums = (int *)realloc(nums, i * sizeof(int)); nums[i−1] = num; } } else { perror("plik1.txt"); } ifs.close(); ofs.open("plik2.txt"); if (ofs) { for (size_t j = 0; j < i; j++) { ofs << nums[j]; } } else { perror("plik2.txt"); } ofs.close(); free(nums);
29 sty 21:54
Metis: Dzięki Dziadku, spróbuje to ogarnąc.
29 sty 22:01
Dziadek Mróz: w pierwszym czytasz do sławnej listy jednokierunkowej std::vector, w drugim czytasz do tablicy intów powiększając ją o kolejne miejsce po wczytaniu z pliku
29 sty 22:17