Show Menu
Cheatography

TPSIT - C++ Cheat Sheet (DRAFT) by

Cheat Sheet in preparazione della verifica

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Nozioni

exit(n)
Termino il processo in cui mi trovo
 
n è il codice di uscita ()
 
0 < n < 255
getpid()
Restit­uisce il PID del processo
kill(p, SIGNKILL);
Faccio terminare immedi­​ata​ mente il processo con PID=p
wait()
Restit­​uisce il PID del figlio terminato
int status; int pid = wait(&st­atus);
Qui status prende tutte le inform­​azioni di come è terminato il processo figlio
WIFEXI­​TE­D​(­st​­atus)
True se il figlio è terminato normal­​mente
WEXITS­​TA­T​U­S(​­status)
Codice di uscita passato a exit()
WIFSIG­​NA­L​E­D(​­status)
True se il figlio è terminato da un segnale
WTERMS­​IG­(​s­tatus)
Segnala quale segnale ha terminato il figlio

Tipi di dati e array

int
Intero (-1,0,­​1,­2...)
float
Numero con la virgola
bool
True o False
char
Carattere ('a','­​b'...)
array
int arr[5] = {1, 2, 3, 4, 5};

Input/­Output

using namespace std;
Evita di specif­​icare std::
cin>>v­​ar­i​a­bile;
Inserire a schermo un valore
cout<<­​va­r​i­abile;
Stampa a schermo variabile
cout<<­​"​f­ra​­se";
Mostra a schermo "­​fra​ se"
cout<<­​"..."​<­​<endl;
Consente di andare a capo

Struttura ciclo while

while(​con​dizione == true) {
‎ ‎ ‎ // istruzioni eseguite fino a quando
‎ ‎ ‎ // la condizione è vera
}

Struttura ciclo for

for (int i = 0; i < n; i++){
‎ ‎ ‎ // ...
‎ ‎ ‎ // istruzioni eseguite n volte
}

Struttura funzione

int funzio­​ne­(​p­ar​­ame­​tri){
‎ ‎ ‎ ‎ //Codice
‎ ‎ ‎ ‎ return 0
}

/*
Uso void se la funzione non restit­​uisce
niente
altrimenti uso int se restit­​uisce un intero
oppure bool o char..
*/

Pipe

int fd[2];
pipe(fd);
Crea pipe: fd[0]=­let­tura, fd[1]=­scr­ittura
write(­fd[1], &data, size);
Scrive nel pipe
read(f­d[0], &data, size);
Legge dal pipe
close(­fd[0]);
Chiude lato lettura
close(­fd[1]);
Chiude lato scrittura
Errore!
if(pip­e(fd) == -1) { / gestione / }
 

Struttura If

if (condizione) {
‎ ‎ ‎ //istr​uzioni
}
else {
‎ ‎ ‎ //istruzioni
}

Condizioni

A==B
Se A è uguale a B, restit­​uisce vero
A!=B
Se A è diverso da B, restit­​uisce vero
A<B
Se A è minore di B, restit­​uisce vero
A>B
Se A è maggiore di B, restit­​uisce vero
A<=B
Se A è minore o uguale di B, restit​ uisce vero
A>=B
Se A è maggiore o uguale di B, restit­​uisce vero
A!B
A not B
A&­-&B
A and B, vero se entrambe le condizioni sono vere
A || B
A or B, vero se almeno una condizione è vera

Operatori

+
Addizione
a + b
-
Sottra­zione
a - b
*
Moltip­lic­azione
a * b
/
Divisione
a / b
%
Modulo (resto)
a % b
++
Incremento
a++
--
Decremento
a--

Struttura classe

class NomeClasse {
private: // Access­ibile solo dentro la classe
int privato;
public: // Access­ibile da ovunque
int pubblico;

// Costru­ttore
NomeCl­asse() : pubbli­co(0) {}

// Distru­ttore
~NomeC­lasse() { / libera memoria / }

// Metodo
void metodo() { cout << pubblico; }
};
 

fork()

int p = fork()‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ Crea un processo figlio
 
Restit­​uisce:
‎‎ ‎ ‎ ‎ 0 se sei nel processo figlio
‎ > 0 se sono nel padre,p è il PID del figlio
‎ ‎ -‎ 1 se il figlio non è stato creato

Pipe + classi

// Per inviare oggetti via pipe:
class Studente {
    char nome[20];  // NO string, meglio char[]
    int voto;
};
// sizeof(Studente) funziona, sizeof(string) NO

Librerie

#include <io­​st­r​e­am>
#include <un­​is­t​d.h>
per fork() ...
#include <sy­​s/­w​a­it.h­>
per wait() ...
#include <si­​gn­a​l.h>
per kill()...
#include <cs­​td­l​i­b>
per rand()

Random

srand(­tim­e(N­ULL));
n = rand()%max + min;

/*
n va da min fino a min + max-1
Senza min va da 0 a max-1

esempio:
da 30 a 50 faccio rand()­%21+30
metto come primo numero la differenza e
come secondo numero il minimo
*/

Codice

#include <iostream>
#include <unistd.h>
#include <sys/wait.h>

using namespace std;

int dim_array=10;
int main(){

    srand(time(NULL));

    int pf[2];
    int fp[2];

    pipe(pf);
    pipe(fp);


    int pid = fork();

    if (pid==0){

        close(pf[1]);
        close(fp[0]);

        int array_figlio[dim_array];
        int valore;
        int array_padre[dim_array];

        int somma=0;

        read(pf[0], array_padre, sizeof(array_padre));
        for (int i=0; i< dim_array; i++){

            valore=array_padre[i];
            array_figlio[i]=valore;
            somma=somma+valore;
        }

        write(fp[1], &somma, sizeof(int));

        close(pf[0]);
        close(fp[1]);

        exit(0);

    }
    else{

        close(pf[0]);
        close(fp[1]);

        int array_padre[dim_array];
        int somma;
        
        for (int i = 0; i< dim_array; i++){
            array_padre[i]=rand()%101;
        }

        write(pf[1], array_padre, sizeof(array_padre));

        read(fp[0], &somma, sizeof(int));

        cout<<endl<<"La somma dei valori è:"<<somma;

        close(pf[1]);
        close(fp[0]);
    }

    return 0;
}