Kilka uwag po kolokwium
Nie sądzę, że ktokolwiek to przeczyta, ale sprawdzanie waszych prac, to prawdziwa mordęga.
- Jak przepisujecie od kolegi — przetwarzajcie tekst. Żeby się trochę różnił. Chyba, że nie rozumiecie co przepisujecie (obawiam się, że w większości przypadków tak właśnie było).
- Przepisujcie tylko od tych, którzy coś wiedzą.
- Sprawdźcie treść zadania. Bo czasami przepisywana treść zupełnie do zadania nie przystaje. Ale czytanie ze zrozumieniem, nie musi być łatwe.
- Nie jest prawdą, że po każdym poleceniu
if
alboelse
powinny wystąpić nawiasy klamrowe (dotyczy to równieżfor
iwhile
). Jeżeli wykonywane jest tylko jedno polecenie — nawiasów może nie być! - Nie jest prawdą, że
void f(int x)
nie jest funkcją tylko procedurą. W terminologii języka C jest funkcją, którą czasami (przez analogię do innych języków programowania) nazywa się procedurą. - Po raz kolejny zwracam uwagę na operatory (dwuargumentowe)
&
oraz&&
i parę|
oraz||
. Pierwszy (&
to operator logiczny I (AND po angielsku) działający na bitach. Drugi (&&
) I (AND po angielsku) działające na całych wartościach. Zatem ‘1 & 3
’ należy interpretować jako00000001 & 00000011
; wynik ostatniej operacji to00000001
(operator „wynajduje” bity 1 występujące na tych samych pozycjach w obu liczbach. W przypadku operatora&&
wartości nie są rozbijane na poszczególne bity tylko interpretowane jako całość: wartość równa zeru to fałsz (False) a różna od zera — prawda (True). I tak przeprowadzane są obliczenia. Gdyi
zmienia się od 0 do 9 to1 & i
przyjmuje wartości 0, 1, 0, 1 i tak dalej (zero dla liczb parzystych i 1 dla nieparzystych). W przypadku wyrażenia1 && i
— gdy i jest równe zero — wynik całego wyrażenia jest fałsz (bo prawda (1) AND fałsz (0)), dla pozostałych wartościi
będzie prawda AND prawda czyli prawda. W przypadku operatorów LUB (OR) jest bardzo podobnie. - Jeżeli gdzieś Państwo zobaczą coś takiego
cards[2] = cards[3];
to nie interpretujcie tego jako „do tablicy dwuelementowej wpisz tablicę trójelementową” tylko jako „trzeci (choć numerowany od zera) element tablicycards
wstaw w miejsce drugiego (też numerowanego od zera)”. - To:
"abcdef"
to stała tekstowa. Charakter (typ) tej stałej to „tablica znakowa”."abcdef"[5]
to piąty (licząc od zera) element tej tablicy. Tablica ta zawiera sześć znaków (liter), a jej siódmym elementem jest znak o kodzie ASCII 0. W żadnym wypadku"abcdef"[5]
nie jest pytaniem o długość napisu. Choć istotnie,"abcdef"[i]
, gdyi
zmienia się od zera do 5 będzie różne od zera, a"abcdef"[6]
będzie równe 0, natomiast ile wyniesie"abcdef"[7]
nie bardzo wiadomo. Może być, na przykład tak:
"abcdef"[0] = 97
"abcdef"[1] = 98
"abcdef"[2] = 99
"abcdef"[3] = 100
"abcdef"[4] = 101
"abcdef"[5] = 102
"abcdef"[6] = 0
"abcdef"[7] = 0
"abcdef"[8] = 0
"abcdef"[9] = 1
"abcdef"[10] = 27
Jest to wynik działania programu:
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
for(i = 0 ; i < 11 ; i++)
printf("\"abcdef\"[%d] = %d\n", i, "abcdef"[i]);
return 0;
}