Esercitazione 8 – Funzioni e procedure

Premi qui per scaricare il PDF

[adinserter block="7"]

In questa esercitazione in C, risolveremo alcuni esercizi con funzioni e procedure, gestiremo un menu e diverse operazioni di controllo.

Esercizio 1

Scrivere una funzione in C denominata mcd che riceve in ingresso due numeri interi, ne calcola il massimo comun divisore e restituisce il risultato al chiamante. Scrivere quindi un programma che richiede all’utente due numeri interi, calcola il massimo comun divisore utilizzando l’apposita funzione e stampa a video il risultato.

#include <stdio.h>

int mcd (int x, int y);

int main() {
    int a, b, result;
    printf("Inserisci il primo numero intero\\n");
    scanf("%d", &a);
    printf("Inserisci il secondo numero intero\\n");
    scanf("%d", &b);
    
    result = mcd(a, b);
    printf("Il MCD tra %d e %d è %d\\n", a,b,result);
    return 0;
}

int mcd (int x, int y)
{
    int n1, n2, r;
    n1 = x;
    n2 = y;
    while (n2 > 0)
    {
        r = n1 % n2;
        n1 = n2;
        n2 = r;
    }
    return n1;
}
[adinserter block="7"]

Esercizio 2

Scrivere una funzione in C denominata strlenfast che riceve in ingresso una stringa e ritorna al chiamante la lunghezza della stringa. Scrivere quindi un programma che richiede all’utente l’inserimento di una stringa di massimo 20 caratteri e stampi a video la lunghezza effettiva della stringa utilizzando la funzione strlenfast.

Nota: Per il calcolo della lunghezza della stringa non utilizzare la funzione predefinita strlen.

#include <stdio.h>
#define DIM 20

int strlenfast(char a[]);

int main()
{
    char string[DIM + 1];
    int n_caratteri;
    printf("Inserisci una stringa di al massimo 20 caratteri\\n");
    gets(string);
    
    n_caratteri = strlenfast(string);
    printf("La stringa contiene %d caratteri\\n", n_caratteri);
    return 0;
}

int strlenfast(char a[])
{
    int i, result = 0;
    for (i = 0; i < DIM && a[i] != '\\0'; i++)
        result += 1;
        
    return result;
}
[adinserter block="7"]

Esercizio 3

Si scriva un programma che acquisisce 2 vettori di interi, aventi dimensione massima pari a 10. L’utente può terminare l’inserimento inserendo 0. I vettori ed il numero di elementi validi, per ogni vettore, sono passati in ingresso ad una funzione arrcmp che ritorna vero(1) o falso(0) a seconda che la somma degli elementi dei vettori sia o meno uguale. Il programma deve stampare il risultato a video.

#include <stdio.h>
#define DIM 10

int arrcmp(int a[], int b[], int x, int y);
int main()
{
    int v1[DIM], v2[DIM];
    int numvalori1, numvalori2, result, finito;
    printf("Primo array:\\n");
    finito = 1;
    numvalori1 = 0;
    do 
    {
      printf("Inserisci il %d numero, 0 per terminare\\n", numvalori1+1);
      scanf("%d", &v1[numvalori1]); 
      if (v1[numvalori1] == 0)
        finito = 0;
      else 
        numvalori1++;  
    }while(finito && numvalori1 < DIM);
    
    printf("Secondo array:\\n");
    numvalori2 = 0;
    finito = 1;
    do 
    {
      printf("Inserisci il %d numero, 0 per terminare\\n", numvalori2+1);
      scanf("%d", &v2[numvalori2]); 
      if (v2[numvalori2] == 0)
        finito = 0;
      else 
        numvalori2++;  
    }while(finito && numvalori2 < DIM);

    result = arrcmp(v1, v2, numvalori1, numvalori2);
    if (result)
        printf("La somma degli elementi dei due array e' uguale\\n");
    else 
        printf("La somma degli elementi dei due array e' diversa\\n");
    return 0;
}

int arrcmp(int a[], int b[], int x, int y)
{
    int somma_a = 0, somma_b = 0;
    int i;
    for (i = 0; i < x; i++)
      somma_a += a[i];
      
    for (i = 0; i < y; i++)
      somma_b += b[i];
    
    if (somma_a == somma_b)
        return 1;
        
    return 0;
}
[adinserter block="7"]

Esercizio 4

Scrivere un programma in C per il calcolo dell’area di alcune figure geometriche quali rettangoli, triangoli e trapezi. Il programma deve presentare un menu di scelta all’utente che gli permetta di:

  1. Calcolare l’area di un rettangolo premendo 1;
  2. Calcolare l’area di un triangolo premendo 2;
  3. Calcolare l’area di un trapezio premendo 3;
  4. Uscire dal programma premendo 0.

A seconda dell’opzione scelta da parte dell’utente, il programma chiamerà una funzione per il calcolo dell’area per la tipologia di figura geometrica selezionata. Implementare quindi tre funzioni per il calcolo. Ogni funzione richiede i parametri necessari per il calcolo (numeri interi maggiori di 0), esegue il calcolo e ritorna il valore dell’area al chiamante che si dovrà occupare della stampa a video del risultato.

#include <stdio.h>

void menu();
void rettangolo();
void triangolo();
void trapezio();

int main()
{
  int scelta, finito;
  finito = 1;
  while (finito)
  {
    menu();
    scanf("%d", &scelta);
    switch (scelta)
    {
      case 1:
        rettangolo();
      break;
      case 2:
        triangolo();
      break;
      case 3:
        trapezio();
      break;
      case 0:
        finito = 0;
      break;
      default:
        printf("ATTENZIONE, Inserire un numero compreso tra 1 e 4\\n");
    }
  }
  return 0;
}

void menu()
{
  printf("1. Calcolare l’area di un rettangolo\\n");
  printf("2. Calcolare l’area di un triangolo\\n");
  printf("3. Calcolare l’area di un trapezio\\n");
  printf("0. Per uscire\\n");
}

void rettangolo()
{
  int b, h;
  float area;
  printf("Inserisci la base del rettangolo\\n");
  scanf("%d", &b);
  printf("Inserisci l'altezza del rettangolo\\n");
  scanf("%d", &h);

  area = (b * h);
  printf("L'area del rettangolo e' %f\\n\\n", area);
}

void triangolo()
{
  int b, h;
  float area;
  printf("Inserisci la base del triangolo\\n");
  scanf("%d", &b);
  printf("Inserisci l'altezza del triangolo\\n");
  scanf("%d", &h);

  area = (b * h);
  printf("L'area del triangolo e' %f\\n\\n", area);
}

void trapezio()
{
  int b, B, h;
  float area;
  printf("Inserisci la base minore del trapezio\\n");
  scanf("%d", &b);
  printf("Inserisci la base maggiore del trapezio\\n");
  scanf("%d", &B);
  printf("Inserisci l'altezza del trapezio\\n");
  scanf("%d", &h);

  area = ((b + B) * h)/2;
  printf("L'area del trapezio e' %f\\n\\n", area);
}
[adinserter block="7"]

Premi qui per scaricare il PDF