Obsługa plików [matura] - lepsze C czy C++ ?

Obsługa plików [matura] - lepsze C czy C++ ?
C czy C++ ?
C
6%
6% [1]
C++
94%
94% [17]
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Za rok zdaję maturę, więc nauka rusza pełną parą :)
Uczę się obsługi plików (wiem, że dla was większości to banalne, ale proszę o wyrozumiałość).
Obecnie na 3 roku miałem w szkole C, więc obsługę próbowałem robić również w C..

Chciałbym abyście mi doradzili, może lepiej przenieść się na C++ ? Wiem, że są tam strumienie, czy to ułatwia w jakiś sposób sprawę? Są jakieś dodatkowe funkcje do obsługi plików tekstowych?
C jest podobne do C++ jak patrzyłem, różni się jedynie trochę składnią na pierwszy rzut oka. Jeśli byłoby prościej, przerzuciłbym się na pełen gaz na C++..

Jak wy to widzicie?

msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:6 miesięcy
1

Chciałbym abyście mi doradzili, może lepiej przenieść się na C++ ?

Chyba lepiej. Zadania maturalne z programowania są w praktyce tworzone z C++ na myśli (tak samo jak te z przetwarzaniem danych są czysto pod ms office), więc tak by było najprościej.
W C da się oczywiście to samo wszystko zrobić, ale nauka C++ i tak nie zaszkodzi ;).

B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Tylko niektórzy mówią, że w C jest sporo niepotrzebnych rzeczy, np. w funkcjach scanf, printf(trzeba podawać typ danych)..
Ja to już umiem i się przyzwyczaiłem, ale myślałem, że w C++ są może jakieś ułatwienia :)

MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:280
1

Jak chcesz nauczyć się tylko na maturę, to polecam jednak biblioteki C. Obsługa plików w C jest dużo bardziej banalna (ale w tej kwestii to wiadomo, każdy może mieć swoje zdanie)

PP
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:27
1

Próbowałem pisać coś w C kiedyś, sprawdzałem jak wygląda kod i porównywałem. Szczerze mówiąc mocno mnie odrzucił i nie zamierzam nigdy wracać, dodatkowo wolniejszy. Polecam c++ , nawet dla laika obsługa plików jest banalna. A tutaj kursy z których się uczyłem: http://cpp0x.pl/kursy/Kurs-C++/Poziom-4/Podstawy-obslugi-plikow/355 http://cpp0x.pl/kursy/Kurs-C++/Obsluga-plikow/305

edytowany 1x, ostatnio: ProbujeProgramowac
KA
dodatkowo wolniejszy. o.0 hmm.. ??
0

Jak ja pisałem to używałem C++ i wystarczyła mi znajomość std::getline w pętli + std::vector i robisz cały program w max kilka minut.

B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Pewnie też zależy jaki :)

dampe
  • Rejestracja:prawie 13 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:SK
2
Bartolinho10 napisał(a):

Wiem, że są tam strumienie, czy to ułatwia w jakiś sposób sprawę?

Odniosę się tylko do tej części pytania. Oczywiście że ułatwia sprawę. Dla przykładu wypisanie zawartości pliku na standardowe wyjście:

Kopiuj
	std::ifstream file( "file.txt" );
	std::cout << file.rdbuf() << std::endl;

Proste, przejrzyste i wydajne. Nawet dla osoby, która zna tylko podstawy C++, zapis ten jest prosty do wywnioskowania. Czy tak samo jest w przypadku C, IMO - nie.


int main( int, char** ) try { throw std::logic_error( myCode() ); }
catch( const std::exception& e ) { puts( e.what() ); } ///:~
Zobacz pozostałe 20 komentarzy
mwl4
Ty to chyba na czerep upadłeś. Widziałeś w jakiejkolwiek poważnej grze, żeby modele były w takim formacie żeby je assimpem ładować? Poza tym, assimp i tak używa otwierania plików z C. Ja zmierzam do tego, że std nie jest wcale taki dobry, i trzeba go unikać jak ognia gdzie się tylko da. Nowi używają std, jest ok przez pewien czas, ale jak przychodzi co do czego to się okazuje, że std którego się nauczyli można wziąć i wyj**ać. A jeśli ktoś mi mówi, że std jest dobry, biorę go za człowieka który w swoim życiu nie pisał większego projektu w którym liczy się czas wykonania.
n0name_l
Meh, wiekszosc pisze wlasne strumienie do obslugi plikow na api systemowym... Nikt przeciez nie uzywa w kodzie do zarzadzania zasobow otwierania plikow w stylu C, to masochizm. @mwl4 a co ty napisales wielkiego, gdzie sie liczy wydajnosc?
dampe
Pokaż mi ten twój jeden większy projekt, w którym liczy się czas wykonania. Zapewne programujesz gry klasy AAA, więc z kim ja w ogóle śmiem rozmawiać, lol. Tak piszesz "nowy to", "nowy tamto", a patrzę na twój podany wiek i aż kręcę głową z politowania. Raz piszesz że std jest do d**y, później że std się wykorzystuje do ładowania assetów w grach, a następnie że std znowu jest do d**y. Gdzieś gubię konsekwencję wypowiedzi i toku myślenia. Kończę temat, bo widzę że ze ścianą idzie się łatwiej dogadać.
mwl4
n0name_l, otwieranie w stylu C jest szybkie, dlatego używa się go dosyć często, po co się męczyć z api systemowym. Poza tym, później spore problemy przy portowaniu na linuxa, po co to komu. Mój jeden większy projekt w którym liczy się czas wykonania? ets2mp i mój własny silnik, którego jeszcze nie pokazywałem, wolę dokończyć, i mały gameplay napisać. "później że std się wykorzystuje do ładowania assetów w grach" gdzie to napisałem? Bo sobie nie przypominam.
KA
jeżeli chodzi tylko o wypisanie, prymitywnie można char ch; FILE *fp = fopen(&quot;test.txt&quot;,&quot;r&quot;); if(!fp) return 1; while((ch = fgetc(fp)) != EOF) printf(&quot;%c&quot;,ch); fclose(fp); 3 linijki więcej nie powinny sprawić żadnego kłopotu początkującemu znając elementarne podstawy.
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Kurcze już sam nie wiem, jak to wygląda w praktyce, ale wydaje mi się, że w C jest sporo więcej kręcenia..

KA
taa 3 linijki więcej... sporo kręcenia ;]
grzesiek51114
grzesiek51114
Sto razy wolę obsługę plików w C++ przez fstream.
mto9
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 10 lat
  • Postów:380
1

Sam pisałem tegoroczną maturę i korzystałem z mechanizmu do obsługi plików dostępnego w C++. Ogólnie wystarczy, że nauczysz się parę funkcji (sort(), replace(), find(), tolower(), toupper(), tostring(), itp) plus ogarnąć std::vector i w zupełności wystarczy do matury.

edytowany 2x, ostatnio: mto9
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

@mto9 , no właśnie, w C chyba takich rzeczy nie ma? np. sort() .

mto9
Jeżeli chodzi o sort to akurat w przypadku czystego C mamy możliwość skorzystania z funkcji qsort w stdlib.h, ale dużo innych funkcji często trzeba napisać samemu, które są już gotowe w C++.
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

A powiedzcie mi Panowie, jak to jest... Jeśli podam sobie np. że pisze w C, to strumieni, ani funkcji z C++ używać nie mogę.. Ale jak zaznaczę że wybieram C++, to normalnie mogę polecieć tak samo jak w C, bez strumieni np. a używać funkcji które są dostępne tylko w C++ ?

mto9
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 10 lat
  • Postów:380
1

Podejrzewam, że w obu przypadkach egzaminator nie czepiałby się, ale lepiej zaznaczyć C++. Obecnie najwięcej punktów masz za poprawne wyniki, a nie za szybkość/efektowność rozwiązania. Polece Ci jeszcze strone: http://maturainformatyka.pl/ oraz zadanie z tego roku: http://mradny.blogspot.com/2014/06/ciekawe-napisy-zadanie-maturalne-z.html

B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

@mto9 zadania z tego roku mam zrobione już wszystkie. :) Wszystko mi wyszło dobrze, jedynie nad czym mogę ubolewać, to że spory czas nad tym siedziałem, muszę się teraz bardziej spinać, bo tak na luzaku, włączony net itp, ciągle coś rozprasza.

Dzięki za linki :)

mto9
Właśnie przez czas na maturze złapał mnie stres bo myślałem, że się nie wyrobie i w ten sam dzień wylądowałem w szpitalu :( Nie żebym Cię straszył czy coś :D
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
1

W obu językach można zrobić te same rzeczy, z tym że:

  • w C++ zrobisz zwykle przy tym mniej błędów (znaki formatujące w printf, długość bufora)
  • C++ pozwala na zapisanie tego samego problemu krócej, dzięki czemu bardziej prawdopodobne jest napisanie poprawnego programu na kartce (jak się zdaje teraz maturę?)
mto9
1,5h część teoretyczna na kartce (algorytmy, prawda/fałsz, itp) + 3h część praktyczna na komputerze (baza danych, arkusz kalkulacyjny, programowanie)
Ranides
no offense, piwo dla tego, który mi za pomocą iostream zapisze krócej printf("%04x\n", x)
vpiotr
@Ranides: zawsze możesz użyć Boost::format: cout << format("%|04X|")%x; Zalety: http://www.boost.org/doc/libs/1_55_0/libs/format/doc/format.html#rationale
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Właśnie teraz się dowiedziałem, że nie ma wyboru z pośród C i C++ ale można wybrać tylko Pascal, Java lub C/C++ razem. Czyli jeden problem rozwiązany, bo na pewno to wybiorę :) A w jakim środowisku polecacie? Można wybrać Visual Studio, Code Blocks oraz DEV C++. Ja koduję w Dev'ie i nie narzekam, jednak wiele opinii mówi, że jest to najsłabsze środowisko..

Zobacz pozostały 1 komentarz
B1
W sumie chyba to jest na +. Bo nie muszę umieć połowy rzeczy z C++, polecę sobie np. czystym C, a użyć mogę funkcji z C++, i skompiluję jako C++ i chyba będzie okej.
grzesiek51114
grzesiek51114
Heh, działać to może i będzie przy dobrych wiatrach ale jak będzie oceniane to już mnie nie pytaj. Jak skompilujesz program jako C, a biblioteka z C++ będzie wołała referencji czy konstruktorów etc to zapomnij. Albo używanie malloc do obiektów klas gdzie malloc z C nie wywoła konstruktora tak jak new w C++ (chociaż to akurat dotyczy C++ -> C). Dużo jest takich przykładów. Używanie funkcji z C w C++ to ok (chociaż też trzeba uważać jak z tym malloc'iem np). Nawet nagłówki w bibliotekach już wpisuje się po nowemu #include<ctime> zamiast #include<time.h> Ale na odwrót.
B1
Bardziej miałem na myśli np. używanie scanf, printf (zamiast strumieni) a przy tym funkcji sortującej z C++. Taki przykład.
grzesiek51114
grzesiek51114
No, ok. Takie podstawowe rzeczy jak scanf czy printf będą działały tylko nie wiadomo jak Ci to zostanie ocenione.
KA
scanf , printf itd.. w C++ masz w #include &lt;cstdio&gt;
QU
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:15
1

Jako osoba, która w tym roku zdawała rozszerzoną maturę z informatyki, mogę Ci polecić C++ i do tego Visual Studio(mi akurat najprzyjemniej się w nim pisze). Aby najlepiej przygotować się do maturki to przerób wszystkie poprzednie arkusze(nie wiem co tam zdajesz podstawa czy rozszerzenie), przyzwyczaj się do używania funkcji z biblioteki standardowej ułatwiającej życie i czas :). I nie martw się za bardzo, że teraz coś Cię rozprasza przy komputerze w domu, mnie ciągle coś rozpraszało, a to muzyka, rodzina etc. Czasami jedno zadanie robiłem godzinę bo co chwilę odchodziłem od kompa ;). Pamiętaj, że na maturze liczą się wyniki i działający kod-metoda rozwiązania(a jak on będzie napisany to już ostatnia rzecz o którą możesz się martwić).

No i GL&HF :)

AlfaLeporis
Łeh, to miałeś luksus z tym VS. Niestety w mojej szkole te komputery ledwo ciągną Deva, aż strach pomyśleć co by było gdyby próbować zainstalować ten cały kombajn VS :/
QU
Akurat prawie wszystkie kompy u mnie w szkole(oprócz jednej klasy, która była prowadzona przyzwoicie, że tak powiem nikt nie wpierdzielał się tam niepowołany) miały trudności z odpaleniem Worda i zabawą w Paintcie, więc znam ten ból :D, no i oczywiście jak skończyłem szkołę to 90% tego sprzętu zostało wymienione na nówki.... To może Code Blocks, na pewno jest lżejszy od VS :D
AlfaLeporis
Szczerze mówiąc nie widzę innej alternatywy, mimo że za CB nie bardzo przepadam. Dev lubił się bardzo często wysypywać, nie wspominając o randomowych ficzerach w stylu "identyczny kod tutaj działa, a tam nie", łącznie z błędami które kompletnie nie miały pokrycia z rzeczywistością. Za to uruchomienie debuggera graniczyło z cudem, który wiązał się z grzebaniem w opcjach środowiska. Zresztą i tak potem nie działał jak chciałem. Jednym słowem, rzeź. Powrót do domu gdzie używam VS'a wiązał się z takim uczuciem jakbym wygrał co najmniej wycieczkę na Karaiby.
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Przekonaliście mnie trochę do tego Visual Studio. Dziś ściągne, i zobaczę z czym to się je..

@Quedin , przygotowując się do matury, przerabiałeś tylko poprzednie arkusze? Te najstarsze też, co był tylko poziom rozszerzony?
Czy wykonywałeś jeszcze jakieś zadania?

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
1

@Bartolinho10

  • naucz sie obslugi plikow
  • rob zadania ze spoj
  • rob zadania z poprzednich lat

tyle Ci starczy zeby zdac programistyczna czesc

B1
Spoj? Co to jest?
fasadin
umiesz korzystac z przegladarki internetowej? Wpisujesz www.google.pl, pozniej tam w takim polu wpiszujesz spoj. JFGI
HU
Nie polecam spoja, o wiele lepsze są topcoder i codeforces. Można zobaczyć wzorcówkę (na topcoderze genialnie tłumaczoną) oraz kod prosów i oprócz tego jest ranking. Spoj ma stare kompilatory, często są niezrozumiałe polecenia, nie da się znaleźć rozwiązań, niektóre zadania wymagają fast I/O.
fasadin
czyli tak jak na maturze
B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Jak na razie przerabiam arkusze z lat poprzednich, ściągnąłem sobie informator maturalny, tam są wymagania i po kolei będę się uczył tego, co wymagają (algorytmy itp.)

QU
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:15
1

@Bartolinho10, przerabiałem tylko poprzednie arkusze na poziomie rozszerzonym(nie zrobiłem chyba tylko 2 najstarszych), aby wczuć się w typy zadań jakie zazwyczaj serwują. Poza tym musiałem sobie przypomnieć funkcje Excela i Accessa - pamiętaj, że część 2 zazwyczaj jest rozdzielona na 3 moduły: programowanie, bazy danych i arkusze kalkulacyjne.
Po za arkuszami nie wykonywałem żadnych specjalnych zadań(SPOJów czy innych rzeczy). Jako iż kończyłem technikum informatyczne, programowanie zazwyczaj przebiegało normalnie na lekcjach(przynajmniej w mojej grupie) oraz dużo uczyłem się i pisałem w domu dla siebie/dodatkowe projekty ze szkoły(gdy udało się dogadać z nauczycielem), nie widziałem potrzeby wykonywania jakichś innych zadań. Ale pamiętaj, że wszystko zależy od własnych umiejętności :).

Co do algorytmów to polecam powtórzyć te które są zazwyczaj wałkowane w szkole miliard razy, czyli np. NWD, NWW, ciąg Fibonacciego oraz tego czego w szkole nie uświadczysz(przynajmniej ja nie miałem, a jak odkryłem to życie stało się łatwiejsze) sito Eratostenesa czy szyfry np. Cezara. Pamiętaj także o rekurencji, która może pojawić się na części 1 ;).

Szczerze powiedziawszy informatora maturalnego nie czytałem, więc nie wiem jakie tam mają wymogi :D.

Do tego masz jeszcze kilka złotych rad:

  1. Każdy program ma magiczną funkcję o nazwie "Help/Pomoc", gdzie można znaleźć ciekawe informacje, gdy dopadnie nas czarna dziura.
  2. W domu twoim największym atutem w nauce jest wujek Google, który zawsze pomoże.
  3. Większość IDE ma podpowiadanie funkcji itp. - w Visual Studio jest to IntelliSense.
  4. Nauka i ciągłe pisanie czynią cuda ;)
    (kolejność przypadkowa)

PS. Gdybyś miał problemy z jakimś zdaniem to na tej stronie masz opracowane większość zadań z arkuszy, do tego chyba nawet jakieś algorytmy :).

B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Dzięki wielkie za pomoc. Wybieram na razie C, muszę tutaj nauczyć się obsługi plików, potem będę przerabiał sobie na C++, zobaczę jak to wygląda i wybiorę lepszy, łatwiejszy i najbardziej efektowny język :)
Będę was pytał - ewentualnie, jeśli będzie coś łatwiejszego, to będę zastępował łatwiejszymi funkcjami, które lepiej będą się sprawdzać.

Dzięki wielkie za udział w temacie,
jeśli macie coś do powiedzenia, to czekam na wszystkie opinie nadal !

M6
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:220
1

Jak mozna uzywac Pascala/Delphi to prosciej bedzie wlasnie w tym robic tego typu zadania.


B1
  • Rejestracja:prawie 11 lat
  • Ostatnio:15 dni
  • Postów:268
0

Chyba raczej nie, w Pascalu ciężko, więcej pisania, i kombinowania, z tego co wiem :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.