Kilka uwag po kolokwium

Nie sądzę, że ktokolwiek to przeczyta, ale sprawdzanie waszych prac, to prawdziwa mordęga.

  1. 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).
  2. Przepisujcie tylko od tych, którzy coś wiedzą.
  3. Sprawdźcie treść zadania. Bo czasami przepisywana treść zupełnie do zadania nie przystaje. Ale czytanie ze zrozumieniem, nie musi być łatwe.
  4. Nie jest prawdą, że po każdym poleceniu if albo else powinny wystąpić nawiasy klamrowe (dotyczy to również for i while). Jeżeli wykonywane jest tylko jedno polecenie — nawiasów może nie być!
  5. 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ą.
  6. 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ć jako 00000001 & 00000011; wynik ostatniej operacji to 00000001 (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. Gdy i zmienia się od 0 do 9 to 1 & i przyjmuje wartości 0, 1, 0, 1 i tak dalej (zero dla liczb parzystych i 1 dla nieparzystych). W przypadku wyrażenia 1 && 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ści i będzie prawda AND prawda czyli prawda. W przypadku operatorów LUB (OR) jest bardzo podobnie.
  7. 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 tablicy cards wstaw w miejsce drugiego (też numerowanego od zera)”.
  8. 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], gdy i 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;
}
Wojciech Myszka
Wojciech Myszka
dr inż. adiunkt

Tak się tylko rozglądam…