Estratto del documento

Strutture di controllo in programmazione

La programmazione prevede l'utilizzo di diverse strutture di controllo per gestire il flusso del codice. Le principali sono:

if-else

La struttura if-else permette di deviare il codice verso due o più possibili direzioni, a seconda che una condizione sia vera o falsa.

if (condizione) {
   // Codice da eseguire se la condizione fosse vera
} else {
   // Codice da eseguire se la condizione fosse falsa
}

if

Quando non è necessario specificare cosa accade se la condizione è falsa, è possibile utilizzare la struttura if senza il blocco else.

if (condizione) {
   // Codice da eseguire se la condizione fosse vera
}

switch

La struttura switch permette l'esecuzione condizionata di codice, sulla base del valore di un'espressione intera.

switch (espressione) {
   case const_espressione_1:
      // Blocco di istruzioni 1
      break;
   case const_espressione_2:
      // Blocco di istruzioni 2
      break;
   case const_espressione_n:
      // Blocco di istruzioni n
      break;
   default:
      // Blocco di istruzioni di default
}

L'espressione è un'espressione intera e le const_espressione_i sono costanti intere. Se l'espressione è uguale a const_espressione_i, il programma salta all'inizio del blocco di istruzioni_i. Se l'espressione è diversa da tutte le costanti, viene eseguito il blocco di istruzioni di default.

const_espressione_i salta all'inizio del blocco_istruzioni. Poi esegue tutte le istruzioni fin quando incontra l'espressione break.
#include <iostream>
using namespace std;
int main () {
    // Local variable declaration:
    int a = 10;
    // do loop execution
    do {
        if( a == 15) {
            // skip the iteration.
            a = a + 1;
            continue;
        }
        cout << "value of a: " << a << endl;
        a = a + 1;
    } while( a < 20 );
    return 0;
}
BREAK L'istruzione break determina l'interruzione immediata di un ciclo (for, while, do) o dell'istruzione switch. CONTINUE L'istruzione continue fa passare immediatamente alla prossima iterazione di un ciclo (for, while, do). GOTO L'istruzione goto manda direttamente all'istruzione identificata da un'etichetta: #include <iostream> using namespace std; int main () { // Local variable declaration: int a = 10; // do loop execution loop:do { // label if( a == 15) { // skip

the iteration.
12 a = a + 1;
13 goto loop;
14 }
15 cout << "value of a: " << a << endl;
16 a = a + 1;
17 }
while( a < 20 );
19 return 0;
}

COSTANTI non verranno più cambiate dal programma
const tipo NOME es: const int MIN = 0, MAX = 120;

LEGGERE DALL' INPUT:
#include <iostream>
using namespace std;
int main() {
char letterin; // dichiaro variabile carattere letterin
cout << "Please enter a lower case letter: ";
cin >> letterin; // inserisco ciò che digito nella variabile letterin

FUNZIONI tipo nome_funzione (tipo1 arg1, tipo2 arg2 /*, ecc...*/ ){
... qui il codice ...
return (valore restituito);
}

Devono essere dichiarate prima di essere utilizzate:
tipo nome_funzione (tipo1, tipo2 /*, etc... )

Le funzioni sono richiamate dal programma con il loro nome e lista argomenti.
nome_funzione(arg1, arg2 /*, ecc...*/)
#include <iostream>
using namespace std;
int power(int, int); // DICHIARO LA FUNZIONE POWER
int main() {


const int b = 2;
for (int i = 0; i < 10; i++)
    cout << power(b,i) << '\n'; // RICHIAMO L FUNZIONE POWER CON I DUE ARGOMENTI
return 0;
}

int power(int x, int n){ // SCRIVO COSA DEVE FARE LA FUNZIONE
    int ret = 1;
    for(int i=1; i <= n; i++)
        ret = ret * x;
    return ret;
}

ALLE FUNZIONI VENGONO PASSATE DELLE COPIE DELLE VARIABILI DEL PROGRAMMA PRINCIPALE, QUINDI SE
CAMBIO LE VARIBILI ALL'INTERNO DELL FUNZIONE NON CAMBIERA' NIENTE NEL PROGRAMMA PRINCIPALE.

POSSO USARE & PER PASSARE DIRETTAMENTE LE VARIABILI DAL PROGRAMMA ALLE FUNZIONI SENZA CREARE UNA
COPIA: tipo Nomefunzione (tipo1& arg1, tipo2& arg2 /*, ecc...*/ ){ ... qui il codice .. return (valore di ritorno); }

CONST tipo variabile lo uso per evitare che avvengano modifiche involontarie della variabile

SCAMBIARE DUE VARIABILI uso VOID= la funzione non restituisce nulla (in questo caso scambia solo)

#include <iostream>
using namespace std;

void swap(int&, int&);

uso & per passare i valori di int direttamente dentro la funzione. Dichiaro la funzione swap.

int main(){
    int a = 5, b = 7;
    cout << "a = " << a << "\tb ="<< b << "\n swap \n";
    swap(a,b); // Richiamo la funzione swap
    cout << "a = " << a << "\tb ="<< b << endl; // mando in output a e b dopo aver fatto la funzione
    return 0;
}

void swap (int& x, int& y) { // dico cosa deve fare la funzione swap ( in questo caso scambia a e b)
    int z; // x e y prendono direttamente i valori di a e b, z è variabile temporanea per scambiare
    z = x;
    x = y;
    y = z;
}

LA FUNZIONE è VOID QUINDI NON METTO RETURN ALLA FINE

ARRAY permettono di memorizzare un gran numero di valori in una lista. Un array di dimensione n, è indicizzato da 0 a (n - 1), dove n è una const int:

tipo nome_array[n]
int evn[2]={2,4}

La dimensione deve essere nota subito.

prima che il programma parta!PUNTATORI variabili che contengono l'indirizzo di una variabile.

Dichiarare un puntatore :

int c = 5; // Dichiarazione di un intero
int *p1; // Dichiarazione di un puntatore ad un intero (p1)
p1 = &c; // p1 viene puntato a c

FORMA COMPATTA:

int *p2 = &c; // Si dichiara un puntatore ad un intero (p2) e lo si punta a c
&p1 mi restituisca l'indirizzo di memoria in cui è salvata la variabile c
*p1 mi restituisce il contenuto dell'indirizzo di c (area puntata) quindi 5

MUOVERSI CON UN PUNTATORE IN UN ARRAY

I puntatori possono essere incrementati per muoversi lungo gli array di i blocchi. Poi si può accedere al contenuto con *(pb+i)

ESEMPIO ALFABETO AL CONTRARIO

#include <iostream>
using namespace std;
int main(){
char b[] = "abcdefghijklmnopqrstuvwxyz"; // DICHIARO UN ARRAY b
char *ipc = &b[0]; // PUNTO UN PUNTATORE AL PRIMO ELEMRNTO DELL'ARRAY b[0]
for(int i = sizeof(b) - 2; i>=0; i--) // MI MUOVO CON

UN CICLO FOR: i VA DA 0 ALLA DIMENSIONE DI b E DECREMENTO7 cout << *(ipc+i); SCRIVO LA VARIABILE A CUI PUNTO INCREMENTATA DI 1 OGNI VOLTA8 cout << endl ; sizeof(b) MI LEGGE LA DIMENSIONE DI b9 } L’ULTIMO CARATTERE DI UNA STRINGA E’ /0 QUINDI DEVO METTERE UN -2 PER LEGGERE SOLO LE LETTERESizeof(b)-2ALLOCAZIONE MEMORIASingola Variabile: new tipo; delete puntatoreArray: new tipo array[n]; delete [] nome array#include <iostream>using namespace std;int main()6 {7 int n = 4; //DICHIARO LA DIMENSIONE n8 char* A; //CREO UN PUNTATORE AD UN CARATTERE9 A = new char[n]; //ALLOCO UNA MEMORIA DI GRANDEZZA n (4 bytes)11 for(int i = 0; i < n; i++)12 {13 A[i] = (char)('a' + i); }16 for(int i = 0; i < 4; i++)17 {18 cout << A[i] << endl; }21 delete [] A; LIBERO LA MEMORIA ALLOCATA23 return 0; }STRINGHETipo di classe (variabile). La dichiaro così string nome; le posso sommare così string nome=nome +nome;#include <cstring>2

#include <iostream>
using namespace std;

int main() {
    string a, b;
    a = "Hi there";
    b = "how are you doing";
    string c = a + ", " + b;
    cout << c << endl;

    #include <iostream>
    #include <string>
    #include <cstring>
    using namespace std;

    void toLower(string*);

    int main() {
        string str;
        cout << "Insert one string: ";
        getline(cin, str);
        toLower(&str);
        cout << "String converted to lower case: " << str << endl;
        return 0;
    }

    void toLower(string *s) {
        for (int i=0; i < s->size(); i++){
            if ((...
        }
    }
}
>at(i) >= 'A'&& (s->at(i) <= 'Z' ) ) SE IL CARATTERE è MAIUSCOLO32 s->at(i) += 32; TRASFORMA IN MINUSCOLE34 }35 }ARRAY DI PUNTATORI, ORDINAREQUESTA FUNZIONE ORDINA IN ORDINE ALFABETICO L'ARRAY DI STRINGHE#include <iostream>2 #include <cstring>3 #include <algorithm>using namespace std;int main() {8 string wordlist[6] = {"cat","dog","caterpillar","fish","catfish"}; ARRAY DI STRINGHR9 wordlist[5] = "bat"; ULTIMO ELEMENTO ARRAY11 for(bool swapped=false; !swapped; swapped = !swapped)12 for(int i = 1; i < 6; i++)13 if (wordlist[i-1] > wordlist[i]) { SE L'ELEMENTO I-1 è MAGIORE DI I ALLORA NON SONO IN ORDINE, QUINDI LI SCAMBIO14 swap(wordlist[i-1],wordlist[i]);15 swapped = true; }18 for(int i = 0 ; i<6; i++) cout << wordlist[i] << endl;19 return 0; }ARRAY MULTIDIMENSIONALESTATICO const int n, m; definisce costanti intere lenamespace std; int main() { const int n = 2, m = 2; char A[n][m]; for (int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { A[i][j] = (char)('a' + i*m +j); } } for (int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cout << setw(2) << A[i][j]; } cout << endl; } return 0; }

namespace std;
int main()
{
    int n = 2, m = 2;
    char **A;
    A = new char*[n];
    for(int i = 0; i < n; i++)
    {
        A[i] = new char[m];
    }
}

Anteprima
Vedrai una selezione di 4 pagine su 12
Riassunto Fondmenti C++ Pag. 1 Riassunto Fondmenti C++ Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Riassunto Fondmenti C++ Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Riassunto Fondmenti C++ Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher landguido di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bologna o del prof Teodori Francesco.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community