e5500 Temat założony przez niniejszego użytkownika |
Matura z Code::Blocks a standard c++11 » 2017-05-07 14:49:17 Witajcie! Za parę dni piszę maturę z informatyki. Nigdy nie uczyłem się tego przedmiotu w szkole. Decyzję o zdawaniu informatyki podjąłem pół roku temu :) Egzamin już za parę dni, a mnie wciąż męczy pewna sprawa. Mianowicie, Code::Blocks, w którym będę programował, korzysta z kompilatora MinGW. Na poziomie szkoły średniej pisanie w CB odbywa się na poziomie pojedynczych plików cpp. Nie używa się projektów, a o obiektowości również nikt nie słyszał. Zauważyłem, że domyślny kompilator dołączony do CB nie obsługuje standardów c++11 bez włączenia takiej opcji. Jeśli tworzy się projekt, można c++11 w prosty sposób włączyć i niezależnie od konfiguracji CB egzaminatora, kod będzie kompilowany z uwzględnieniem standardów c++11. W przypadku pojedynczych plików cpp nie da się w prosty sposób ustawić flagi c++11 (a może się da? ja nie jestem w stanie tego zrobić). Aby korzystać z c++11, włączam tę opcję w konfiguracji kompilatora. Tu rodzi się moje pytanie. Załóżmy, że na egzaminie zechcę użyć np. to_string, albo string.find_first_of. Włączę w opcjach flagę c++11, napiszę poprawnie działający program i oddam go do oceny. Sprawdzający otrzyma kod źródłowy, uruchomi go bez flagi c++11 i oceni jako niedziałający. Jak można zapobiec takiej sytuacji? Czy da się w pliku cpp wymusić sposób pracy kompilatora? Czy może mam się tym nie przejmować i założyć, że sprawdzający będzie wiedział, jak uruchomić program? Chętnie posłucham wypowiedzi maturzystów z przeszłych lat :)
I jeszcze mały offtop: Jako, że nie uczęszczałem do szkoły, w której realizuje się nauczanie informatyki, nikt nigdy nie dał mi żadnych "złotych rad" na ten egzamin :) Jeśli ktoś takowymi dysponuje, również byłbym wdzięczny za podzielenie się nimi :) |
|
garlonicon |
» 2017-05-07 15:33:42 Jak można zapobiec takiej sytuacji? |
1. Można napisać obie wersje - jedna korzystająca z C++11, a druga z C++03 i skorzystać z preprocesora do wyboru tej właściwej. 2. Można preprocesorem wykrywać obecność C++11 i ewentualnie rzucić komunikat w stylu "ten kod wymaga C++11" (choćby za pomocą #error ). 3. Można również dać jakiś komentarz z flagami kompilacji albo w inny sposób poinformować, jak to skompilować (chociażby utworzyć pliki make, skrypt *.bat, *.sh lub cokolwiek innego). Można dorzucić plik README. Radziłbym jednak pisać kod jak najszybciej i jak najprościej. Lepiej pomęczyć się nieco z C++03, niż kombinować z C++11 i ryzykować niezaliczenie zadania. Na maturze jednak liczy się czas. Sam miałbym więcej punktów, ale wszystko klepałem w C++, wyszło z tego kilkaset linii kodu i się nie wyrobiłem. Niby miałem ponad połowę punktów z rozszerzenia, ale nie byłem z tego zadowolony. Pamiętam, jak po raz pierwszy odpaliłem Excela dopiero wtedy, gdy trzeba było wstawić jakiś wykres. Mało brakowało, a zrobiłbym to w ASCII-Arcie i zapisał jako *.txt. Dobra rada: nie zapominaj o programach użytkowych. Samo programowanie to nie wszystko. Kolejna rada: nie lekceważ teorii. Sama matura składa się z dwóch części: jedna to test (bez komputera, jak na innych przedmiotach), a druga to trzy zadania do zrobienia na komputerze. Jedno będzie na programowanie (i tam korzystasz z C++), drugie na Excela, a trzecie na Accessa. Można zrobić wszystko w C++, ale wtedy zabraknie czasu. Kwestie techniczne: otwarcie pliku z płyty za pomocą std::ifstream nie powinno sprawiać problemów. Jak się spieszyłem, to tak robiłem, ale czasami lepiej skopiować je do katalogu z projektem. Wszystkie wyniki nagrywasz na czystą płytę CD-R dopiero po zakończeniu egzaminu. Nie zapomnij o zrobieniu kopii zapasowej (czyli nagraniu drugiej płyty). Kolejna sprawa: jeśli coś się zawiesi lub nastąpi awaria zasilania, to najlepiej powiadom administratora (który będzie obecny na egzaminie). Ja straciłem parę minut na restart i później nie miałem dodanego tego czasu, bo nikogo o tym nie powiadomiłem (i straciłem szansę na zdobycie paru punktów więcej). |
|
pekfos |
» 2017-05-07 16:13:07 Załóżmy, że na egzaminie zechcę użyć np. to_string, albo string.find_first_of. | find_first_of nie wymaga C++11. |
|
garlonicon |
» 2017-05-07 16:29:46 Aha, i dobrze byłoby wyłączyć ukrywanie znanych rozszerzeń. Potwierdzą to zwłaszcza Ci, którzy przypadkowo utworzyli pliki typu "dane.txt.txt". find_first_of nie wymaga C++11. |
Miałem o tym wspomnieć, ale wyleciało mi to z głowy. Mimo wszystko pisanie w C++03 nie powinno być strasznie uciążliwe, to nie jest asembler albo C. Jeśli chodzi o std::string , to raczej nikt się o to nie czepia (gorzej z to_string , ale wtedy użyj trzylinijkowego std::ostringstream ). Jest jeszcze jeden dobry powód, aby na czas matury zapomnieć o lambdach, pętlach foreach, i całej reszcie z C++11. To samo dotyczy #include <algorithm> (nawet, jeśli w C++03 takie rzeczy są). Mianowicie chodzi o to, że czasami niektórzy tracili na tym punkty, bo układający zadania zakładali, że zdający napiszą pewne algorytmy "ręcznie" i poszczególne etapy tworzenia algorytmu były odpowiednio punktowane, natomiast użycie "jednolinijkowców" mogło dać zero. Zwłaszcza, jeśli gdzieś proszą o podanie algorytmu, ale obecnie takie zadania raczej się przewijają w części testowej, w takim przypadku w drugiej części można zaryzykować, jeśli brakuje na to czasu. |
|
e5500 Temat założony przez niniejszego użytkownika |
» 2017-05-08 21:34:09 Serdeczne dzięki! Będę starał się o wszystkim pamiętać w środę :) |
|
« 1 » |