Scarica Fondamenti di Informatica e più Schemi e mappe concettuali in PDF di Fondamenti di informatica solo su Docsity! TEORIA INFORMATICA C++ *gedit; Gcc -Wall -o calcio calcio.c; ./pvcheck ./calcio esercizio partendo da staff cd Cammino assoluto (cd /home/users/documenti/…): parte dalla radice Cammino relativo(cd ../../home/users/documenti): parte dalla cartella corrente conoscere permessi d’accesso ls -l ls -l /users/staff/p2 ls -l staff/p2 copiare tutti(*) I file da p2 a p1 cp cp /users/staff/p2/* /users/staff/p1 cp staff/p2/* staff/p1 rinominare: mv vecchio_nome nuovo_nome mv mv /users/staff/p1/file1.txt /users/staff/p1/file1.bck mv staff/p1/file1.txt staff/p1/file1.bck creare una directory /cartella ‘lettere’ mkdir mkdir /user/staff/compiti/lettere mkdir staff/compiti/lettere vettori (array) puntatori dichiarazione int arr[10]; = int lista[10]; 10 sono le caselle/size del vettore l’indice va da [0,9], cioè arr[0]- arr[9]; int *p; punta ad un intero inizializzazione int arr[5] = {1, 2, 3, 4, 5}; p = &x; &x è l’indirizzo di x accesso agli elementi arr[3]; *(p+3) vado all’indirizzo ‘p+3’ e vede che valore ci sta passaggio a funzioni void func(int arr[], int size){ } void func(int *p){ *p=10; } funzione accetta un intero aritmetica NO p++; p--; p+=2; p-=2; mi sposto di 1 o 2 q2-q1; q1+2 restituisce valore int; restituisce un indirizzo; q1+q2 q1/q2 q1 x q2 NO void non restituisce un valore return int *q1, *q2, y=7; int lista[10]; q1=&lista[3]; q2=&lista[5]; indirizzo della lista è 1F04 e ogni int occupa 4 byte: la prima casella va da 1F04-1F07 e così via. q1∈[1F16-1F19]q2∈[1F24-1F27] - q1>q2 : gli indirizzi di memoria vanno diminuendo - q1-q2: sottrazione tra indici/posizione dei puntatori - q1-q2 == 5 (intendeva contrario?): - q2-q1= 1F24-1F19 ==5 - q1+2 = 1F16+2 = 1F18 - q1+q2 , q1/q2, q1*q2 NO - q1+y == q2 = 1F16+7=1F23 int *p, num = 42; int num2; p = # l’indirizzo di num è 1F04; p conterrà 1F04; l’indirizzo a cui punta p prenderà il valore 3; num = 423 num2=?3 *p=3; num2 = *p; int val, x = 50; switch (val) { case 10 : { x = val % 7; } case 25 : { x -= 3; break; } case 35 : {x=val/2; break; }{ case 40 : /* ... */ } case 50 : { x = (x == val); break; } default : { x++; break; } Switch è un if con vari casi: in base al val in ingresso (10, 25, o 35…) va in uno dei 5 casi. - Se non c’è break, continuo (faccio anche case 25; il case 25 va poi ripetuto di nuovo ripartendo da capo) - /* ... */ non significa niente, passo alla funzione successiva pk non ho break - x==val dice che 50==40 (falso: 0) o se 50==50 (vero: 1) - se metto un valore val che non è nei case (ex. 60) faccio operazione default. - Ogni volta che c’è break, x ritorna 50 int a[8]={1,4,1,2}, *q=a+6; *q=a+6=0+6=a[6]=0 pk{1,4,1,2,0,0,0,0} - a[8]={1,4,1,2,0,0,0, 0} - a array e q un puntatore: no operazioni fra i due a meno che non ci sia * - * “valore” (*q valore puntato da; *a valore che sta in posizione 0 sottinteso) - a da solo è in posizione 0! - q[1] sta nella posizione a[6+1]=7° - q[0]=2 non è una domanda, ma significa che sto mettendo 2 nella 6° posizione int x=10; int fun1(int *p) { x--; *p += 2; return x % *p; } int main() { int x, y; /* linea 1 */ x = 4; /* linea 2 */ y = 2; /* linea 3 */ y = fun1(&y); /* linea 4 */ return x; } line a 1 2 3 4 x ? 4 4 4 y ? ? 2 1 la fun1 non funziona solo quando la main la richiama!