Ĺadny brzuch
Mam wczytac niewiadomo ile danych liczb calkowitych moze byc 1 moze byc 100 moze byc 10 nie wiadomo, jak to ominac? Eof nie dziala ;/ Tj dodatkowo te dane musza byc roznej dlugosci wiec tu akurat wiem jak zrobic, ale tego pierwszego to nie mam pojecia ;/ Pomozcie ;)
Napisz jak dokładnie napisałeś, bo to dość dziwne, żeby nie działał. ;)
Też niespecjalnie wiem o co chodzi, ale narazie mogę zaproponować 3 wyjścia:
1) nadłożyć pamięci i odrazu zdeklarwać większą tablicę zdolną pomięścić odpowiednią ilośc danych
2) pytać się o ilość potrzebnych elementów i tworzyć tablice dynamicznie (new i delete)
3) skorzystać z vectorów ( z STL <- kurs obsługi łatwo znaleźć)
ps. objaśnij jaki typ danych i co konkretnie chcesz zrobić.
Mi się wydaje, że najbardziej oczywistym rozwiązaniem jest lista w takim wypadku. ;)
Oczywiście zależy do czego później mają być wykorzystywane wczytane dane.
Oczywiscie mam liste, jak wczytac do niej niewiadomo ile elementow to wiem, ale chodzi o to ze chyba musze to wczytac wielokrotna ilosc razy nie wiedzac ile razy mam do niej cos wczytac, tj program ma byc sprawdzany przez automat. Nie wiem moze to chodzi o to ze bedzie uruchamiany po prostu ilestam razy, niewiadomo ile, tak? Tj tak wczytuje do listy wykonuje jakies operacje na niej wyswietlam wynik i znowu wczytuje do wyczyszczonej listy i to ma sie powtorzyc niewiadomo ile razy.
Użytkownik snakeomeister edytował ten post 18 marzec 2006, 21:29
Napisz to jeszcze raz tylko składniej. ;)
Jakie dane wejściowe ma program i co ma robić.
Napisz to jeszcze raz tylko składniej. ;)
Jakie dane wejściowe ma program i co ma robić.
1)Podaje jakis tam ciag liczb (niewiadomo ile)
2)Wykonuje na nich jakies operacje
3)Wyswietlam wynik
Kroki 1 2 3 powtorzyc niewiadoma ilosc razy. Da sie tak wogole?
A czym wczytujesz? Jesli scanf-em, to wystarczy sprawdzac, jaki wynik zwraca wywolanie funkcji (odsylam do reference'a). Podobnie jest z innymi funkcjami wczytujacymi, wszystko znajdziesz w manualu :)
To ja może powtórzę - napisz co dokładnie ma robić Twój program. Bo coś musi przecież pokazywać kiedy dane wejściowe się kończą. Dlatego podaj przykład pliku wejściowego albo opisz jak on będzie wyglądał.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 12:01
No chodzi o to, ze masz plik z pewna liczba linijek i twoj program ma przetwarzac w okreslony sposob kazda linijke, ale nie wiesz, ile ich bedzie.
Ale napisał, że wykrywanie końca pliku nie działa u niego dlatego się pytam jak mają wyglądać dane wejściowe.
Jej, ale zapewne te dane sa podawane na stdin! Dlatego wlasnie trzeba skorzystac z informacji zwracanych przez funkcje wczytujace z stdin. Btw, feof (stdin) nie zadziala?
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 14:20
Może poczekajmy aż odpisze. ;)
Jej, ale zapewne te dane sa podawane na stdin! Dlatego wlasnie trzeba skorzystac z informacji zwracanych przez funkcje wczytujace z stdin. Btw, feof (stdin) nie zadziala?
Tak podawane sa na stdin nie z zadnego pliku.
W takim razie napisz, jakich funkcji wczytujacych uzywasz i czy feof (stdin) nie zadziala...
stdin też można traktować jak plik, więc odczytywać właściwie tak samo jak z pliku. Takie rozwiązanie będzie odpowiednie, jeśli podajesz na wejście od razu całość danych.
Jeśli natomiast użytkownik wpisuje po kolei jakieś dane to po prostu zrób jakiś warunek końca - na przykład taki, że jeśli napisze "koniec" to program ma się zakończyć.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 14:45
Chmurek, ty nadal nie rozumiesz? Specyfikacja zadania jest taka, ze dostaje dane na wejsciu i ma je wczytywac i przetwarzac az ich zabraknie. Nie moze nic wiecej robic! Szczegolnie, ze tego nie bedzie sprawdzal czlowiek, tylko program.
Albo nie czytasz, albo nie robisz tego ze zrozumieniem. Napisałem przecież możliwe rozwiązania dla obydwu przypadków.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 14:58
Snakeomaister, moze napisz wreszcie JAK wczytujesz dane?
Użytkownik migajek edytował ten post 19 marzec 2006, 15:49
1)Wczytywanie danych: while((ch=cin.get())!='\n'){rok.push_back(ch);}
2)Operacje + wyswietlenie na wyjscie wyniku
1+2-powtorzyc niewiadomo ile razy.
Miałem nie odpisywać, ale...
Pierwsza możliwość:
stdin też można traktować jak plik, więc odczytywać właściwie tak samo jak z pliku. Takie rozwiązanie będzie odpowiednie, jeśli podajesz na wejście od razu całość danych.
Druga możliwość:
Jeśli natomiast użytkownik wpisuje po kolei jakieś dane to po prostu zrób jakiś warunek końca - na przykład taki, że jeśli napisze "koniec" to program ma się zakończyć.
Wytłumacz może gdzie tu z siebie kretyna zrobiłem? ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:05
A nie mozesz wczytywac calej linii za jednym zamachem do momentu, az sie juz nie da?
EDIT:
Np. while (cin.getline (bufor, dlugosc)) { /* przetwarzaj*/ }
Chmurek:
1. Piszac druga mozliwosc.
2. Piszac o moich rzekomych frustracjach.
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 15:10
Ok, dzieki wam za odpowiedzi juz mysle ze sobie poradze ;] Chodzi po prostu o to ze nasiedzialem sie nad algorytmem troche i glupio by bylo stracic punkty przez to ze zle na wejscie wprowadzam i wyprowadzam jak to mialem w 1 zadaniu ;/
Użytkownik snakeomeister edytował ten post 19 marzec 2006, 15:13
Wydaje mi się, że moje wypowiedzi na tym forum raczej nie wskazują na to jakobym był kretynem, ale skoro tak uważasz... ;)
Co do drugiej możliwości to przecież nie napisał dokładnej treści zadania, więc możliwe, że jest jakiś warunek końca. Najprawdopodobniej jednak dane będą podane od razu, więc tą ewentualność napisałem jako pierwszą.
W każdym razie wracając do sprawy to zauważyłem, że pobierasz dane aż do entera, a nie do końca pliku. Rozumiem z tego, że dane dla jednej operacji na liście są w jednej linijce, po której lista ma być wyczyszczona, tak?
Ok, widzę, że już dostałeś odpowiedź. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:17
Miałem nie odpisywać, ale...
Pierwsza możliwość:
Druga możliwość:
Wytłumacz może gdzie tu z siebie kretyna zrobiłem? ;)
Wczytuj po prostu do momentu az sie juz wiecej nie da!
W każdym razie wracając do sprawy to zauważyłem, że pobierasz dane aż do entera, a nie do końca pliku. Rozumiem z tego, że dane dla jednej operacji na liście są w jednej linijce, po której lista ma być wyczyszczona, tak?
Ok, widzę, że już dostałeś odpowiedź. ;)
Dlatego podałem Ci pierwszą możliwość... Poza tym mogłeś podać treść zadania po prostu. ;)
W każdym razie odczytywanie znak po znaku jest lepsze, bo jest zwyczajnie szybsze niż odczytanie getline, a później znowu przejście tego co odczyta, żeby wpisać pojedyncze znaki do listy.
Swoją drogą to dość dziwne, że tak są dane zapisane, więc chociaż żeby zaspokoić moją ciekawość podaj treść zadania. ;)
Edycja: Kurcze... Dwa posty doszły, gdy tego pisałem. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:21
Dlatego podałem Ci pierwszą możliwość... Poza tym mogłeś podać treść zadania po prostu. ;)
W każdym razie odczytywanie znak po znaku jest lepsze, bo jest zwyczajnie szybsze niż odczytanie getline, a później znowu przejście tego co odczyta, żeby wpisać pojedyncze znaki do listy.
Swoją drogą to dość dziwne, że tak są dane zapisane, więc chociaż żeby zaspokoić moją ciekawość podaj treść zadania. ;)
Edycja: Kurcze... Dwa posty doszły, gdy tego pisałem. ;)
Wprowadzasz w blad, liczby nie sa dlugosci 10^2000, tylko co najwyzej taka liczbe zobaczymy na wejsciu :)
Zatem:
char bufor [2048]; while (cin.getline (bufor, 2048)) { }
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 15:30
To jak już stawiamy na wygodę to lepiej do string wczytywać. Nie będzie trzeba na stywno długości linii podawać, bo przecież nie wiadomo jak długa może ona być. W każdym razie ja bym pobierał znak i od razu go do listy dodawał, ale jak kto chce. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 16:00
Jak wczytuje getlinem to sobie wpuszczam na liste, nastepuje koniec wczytywania jednej linijki i w tym momencie chce wyswietlic dane+poprosic o wprowadzenie kolejnej linijki. Moglby mi ktos napisac jak to ma wygladac? Prosze ;)
Użytkownik snakeomeister edytował ten post 19 marzec 2006, 16:59
Napisz mi tutaj albo na GG (2877074) co dokładnie ma robić ten program to Ci napiszę. Bo teraz nie jestem pewien czy w jednym elemencie listy ma być cała linijka czy tylko jeden znak.
http://kni.prz.edu.p.../zad/zad4.xhtml
Jestem na 99% pewien, że topic dotyczy tego oto zadania :D
Hehe. Tak mi się kojarzyło z jakimś konkursem właśnie, bo na nich jest takie automatyczne sprawdzanie właśnie.
W każdym razie jeśli to prawda to raczej nie licz na to, że ktoś napisze to za Ciebie. ;)
Ale skoro tam masz liczby w ten sposób podane to najwygodniej będzie to odczytywać przez ">>" od razu do liczby albo wykorzystać scanf i też od razu do liczby.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 22:40
Hehe wiem ze nikt mi nie pomoze, zrobilem juz i tak ;) Nie wiem czy do konca dobrze, ale jest ;] Najwyzej bedzie 0 ;) Ide robic poprawki w kolejnych 2ch zadaniach ;] I nie bede o nic sie pytac, bo to takie niekonkursowe lekko ;]
Użytkownik snakeomeister edytował ten post 20 marzec 2006, 01:17
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Napisz jak dokładnie napisałeś, bo to dość dziwne, żeby nie działał. ;)
Też niespecjalnie wiem o co chodzi, ale narazie mogę zaproponować 3 wyjścia:
1) nadłożyć pamięci i odrazu zdeklarwać większą tablicę zdolną pomięścić odpowiednią ilośc danych
2) pytać się o ilość potrzebnych elementów i tworzyć tablice dynamicznie (new i delete)
3) skorzystać z vectorów ( z STL <- kurs obsługi łatwo znaleźć)
ps. objaśnij jaki typ danych i co konkretnie chcesz zrobić.
Mi się wydaje, że najbardziej oczywistym rozwiązaniem jest lista w takim wypadku. ;)
Oczywiście zależy do czego później mają być wykorzystywane wczytane dane.
Oczywiscie mam liste, jak wczytac do niej niewiadomo ile elementow to wiem, ale chodzi o to ze chyba musze to wczytac wielokrotna ilosc razy nie wiedzac ile razy mam do niej cos wczytac, tj program ma byc sprawdzany przez automat. Nie wiem moze to chodzi o to ze bedzie uruchamiany po prostu ilestam razy, niewiadomo ile, tak? Tj tak wczytuje do listy wykonuje jakies operacje na niej wyswietlam wynik i znowu wczytuje do wyczyszczonej listy i to ma sie powtorzyc niewiadomo ile razy.
Użytkownik snakeomeister edytował ten post 18 marzec 2006, 21:29
Napisz to jeszcze raz tylko składniej. ;)
Jakie dane wejściowe ma program i co ma robić.
Napisz to jeszcze raz tylko składniej. ;)
Jakie dane wejściowe ma program i co ma robić.

1)Podaje jakis tam ciag liczb (niewiadomo ile)
2)Wykonuje na nich jakies operacje
3)Wyswietlam wynik
Kroki 1 2 3 powtorzyc niewiadoma ilosc razy. Da sie tak wogole?

A czym wczytujesz? Jesli scanf-em, to wystarczy sprawdzac, jaki wynik zwraca wywolanie funkcji (odsylam do reference'a). Podobnie jest z innymi funkcjami wczytujacymi, wszystko znajdziesz w manualu :)
To ja może powtórzę - napisz co dokładnie ma robić Twój program. Bo coś musi przecież pokazywać kiedy dane wejściowe się kończą. Dlatego podaj przykład pliku wejściowego albo opisz jak on będzie wyglądał.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 12:01
No chodzi o to, ze masz plik z pewna liczba linijek i twoj program ma przetwarzac w okreslony sposob kazda linijke, ale nie wiesz, ile ich bedzie.
Ale napisał, że wykrywanie końca pliku nie działa u niego dlatego się pytam jak mają wyglądać dane wejściowe.
Jej, ale zapewne te dane sa podawane na stdin! Dlatego wlasnie trzeba skorzystac z informacji zwracanych przez funkcje wczytujace z stdin. Btw, feof (stdin) nie zadziala?
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 14:20
Może poczekajmy aż odpisze. ;)
Jej, ale zapewne te dane sa podawane na stdin! Dlatego wlasnie trzeba skorzystac z informacji zwracanych przez funkcje wczytujace z stdin. Btw, feof (stdin) nie zadziala?

Tak podawane sa na stdin nie z zadnego pliku.
W takim razie napisz, jakich funkcji wczytujacych uzywasz i czy feof (stdin) nie zadziala...
stdin też można traktować jak plik, więc odczytywać właściwie tak samo jak z pliku. Takie rozwiązanie będzie odpowiednie, jeśli podajesz na wejście od razu całość danych.
Jeśli natomiast użytkownik wpisuje po kolei jakieś dane to po prostu zrób jakiś warunek końca - na przykład taki, że jeśli napisze "koniec" to program ma się zakończyć.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 14:45
Chmurek, ty nadal nie rozumiesz? Specyfikacja zadania jest taka, ze dostaje dane na wejsciu i ma je wczytywac i przetwarzac az ich zabraknie. Nie moze nic wiecej robic! Szczegolnie, ze tego nie bedzie sprawdzal czlowiek, tylko program.
Albo nie czytasz, albo nie robisz tego ze zrozumieniem. Napisałem przecież możliwe rozwiązania dla obydwu przypadków.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 14:58
Snakeomaister, moze napisz wreszcie JAK wczytujesz dane?
Użytkownik migajek edytował ten post 19 marzec 2006, 15:49
1)Wczytywanie danych: while((ch=cin.get())!='\n'){rok.push_back(ch);}
2)Operacje + wyswietlenie na wyjscie wyniku
1+2-powtorzyc niewiadomo ile razy.
Miałem nie odpisywać, ale...
Pierwsza możliwość:
stdin też można traktować jak plik, więc odczytywać właściwie tak samo jak z pliku. Takie rozwiązanie będzie odpowiednie, jeśli podajesz na wejście od razu całość danych.
Druga możliwość:
Jeśli natomiast użytkownik wpisuje po kolei jakieś dane to po prostu zrób jakiś warunek końca - na przykład taki, że jeśli napisze "koniec" to program ma się zakończyć.
Wytłumacz może gdzie tu z siebie kretyna zrobiłem? ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:05
A nie mozesz wczytywac calej linii za jednym zamachem do momentu, az sie juz nie da?
EDIT:
Np. while (cin.getline (bufor, dlugosc)) { /* przetwarzaj*/ }
Chmurek:
1. Piszac druga mozliwosc.
2. Piszac o moich rzekomych frustracjach.
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 15:10
Ok, dzieki wam za odpowiedzi juz mysle ze sobie poradze ;] Chodzi po prostu o to ze nasiedzialem sie nad algorytmem troche i glupio by bylo stracic punkty przez to ze zle na wejscie wprowadzam i wyprowadzam jak to mialem w 1 zadaniu ;/
Użytkownik snakeomeister edytował ten post 19 marzec 2006, 15:13
Wydaje mi się, że moje wypowiedzi na tym forum raczej nie wskazują na to jakobym był kretynem, ale skoro tak uważasz... ;)
Co do drugiej możliwości to przecież nie napisał dokładnej treści zadania, więc możliwe, że jest jakiś warunek końca. Najprawdopodobniej jednak dane będą podane od razu, więc tą ewentualność napisałem jako pierwszą.
W każdym razie wracając do sprawy to zauważyłem, że pobierasz dane aż do entera, a nie do końca pliku. Rozumiem z tego, że dane dla jednej operacji na liście są w jednej linijce, po której lista ma być wyczyszczona, tak?
Ok, widzę, że już dostałeś odpowiedź. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:17
Miałem nie odpisywać, ale...
Pierwsza możliwość:
Druga możliwość:
Wytłumacz może gdzie tu z siebie kretyna zrobiłem? ;)

Wczytuj po prostu do momentu az sie juz wiecej nie da!
W każdym razie wracając do sprawy to zauważyłem, że pobierasz dane aż do entera, a nie do końca pliku. Rozumiem z tego, że dane dla jednej operacji na liście są w jednej linijce, po której lista ma być wyczyszczona, tak?
Ok, widzę, że już dostałeś odpowiedź. ;)

Dlatego podałem Ci pierwszą możliwość... Poza tym mogłeś podać treść zadania po prostu. ;)
W każdym razie odczytywanie znak po znaku jest lepsze, bo jest zwyczajnie szybsze niż odczytanie getline, a później znowu przejście tego co odczyta, żeby wpisać pojedyncze znaki do listy.
Swoją drogą to dość dziwne, że tak są dane zapisane, więc chociaż żeby zaspokoić moją ciekawość podaj treść zadania. ;)
Edycja: Kurcze... Dwa posty doszły, gdy tego pisałem. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 15:21
Dlatego podałem Ci pierwszą możliwość... Poza tym mogłeś podać treść zadania po prostu. ;)
W każdym razie odczytywanie znak po znaku jest lepsze, bo jest zwyczajnie szybsze niż odczytanie getline, a później znowu przejście tego co odczyta, żeby wpisać pojedyncze znaki do listy.
Swoją drogą to dość dziwne, że tak są dane zapisane, więc chociaż żeby zaspokoić moją ciekawość podaj treść zadania. ;)
Edycja: Kurcze... Dwa posty doszły, gdy tego pisałem. ;)

Wprowadzasz w blad, liczby nie sa dlugosci 10^2000, tylko co najwyzej taka liczbe zobaczymy na wejsciu :)
Zatem:
char bufor [2048]; while (cin.getline (bufor, 2048)) { }
Użytkownik marcepanowy_kapturek edytował ten post 19 marzec 2006, 15:30
To jak już stawiamy na wygodę to lepiej do string wczytywać. Nie będzie trzeba na stywno długości linii podawać, bo przecież nie wiadomo jak długa może ona być. W każdym razie ja bym pobierał znak i od razu go do listy dodawał, ale jak kto chce. ;)
Użytkownik Chmurek edytował ten post 19 marzec 2006, 16:00
Jak wczytuje getlinem to sobie wpuszczam na liste, nastepuje koniec wczytywania jednej linijki i w tym momencie chce wyswietlic dane+poprosic o wprowadzenie kolejnej linijki. Moglby mi ktos napisac jak to ma wygladac? Prosze ;)
Użytkownik snakeomeister edytował ten post 19 marzec 2006, 16:59
Napisz mi tutaj albo na GG (2877074) co dokładnie ma robić ten program to Ci napiszę. Bo teraz nie jestem pewien czy w jednym elemencie listy ma być cała linijka czy tylko jeden znak.
http://kni.prz.edu.p.../zad/zad4.xhtml
Jestem na 99% pewien, że topic dotyczy tego oto zadania :D
Hehe. Tak mi się kojarzyło z jakimś konkursem właśnie, bo na nich jest takie automatyczne sprawdzanie właśnie.
W każdym razie jeśli to prawda to raczej nie licz na to, że ktoś napisze to za Ciebie. ;)
Ale skoro tam masz liczby w ten sposób podane to najwygodniej będzie to odczytywać przez ">>" od razu do liczby albo wykorzystać scanf i też od razu do liczby.
Użytkownik Chmurek edytował ten post 19 marzec 2006, 22:40
Hehe wiem ze nikt mi nie pomoze, zrobilem juz i tak ;) Nie wiem czy do konca dobrze, ale jest ;] Najwyzej bedzie 0 ;) Ide robic poprawki w kolejnych 2ch zadaniach ;] I nie bede o nic sie pytac, bo to takie niekonkursowe lekko ;]
Użytkownik snakeomeister edytował ten post 20 marzec 2006, 01:17