Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Matura z Code::Blocks a standard c++11

Ostatnio zmodyfikowano 2017-05-08 21:34
Autor Wiadomość
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 :)
P-160794
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).
P-160798
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.
P-160801
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.
P-160803
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ę :)
P-160866
« 1 »
  Strona 1 z 1