Laboratorio Informatica – 24-11-2020

Premi qui per scaricare il PDF

[adinserter block="7"]

Esercizio 1

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:
  • Calcolare l’area di un rettangolo premendo 1;
  • Calcolare l’area di un triangolo premendo 2;
  • Calcolare l’area di un trapezio premendo 3;
  • Uscire dal programma premendo 0.
Tale funzionalità (presentazione del menu e relativa scelta) dovrà essere implementata attraverso una funzione mostraMenu che mostra il menu all’utente come descritto e ritorna la scelta dell’utente. A seconda dell’opzione selezionata 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 all’utente (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;
  do
  {
    printf("Inserisci la base del rettangolo\n");
    scanf("%d", &b);
    if(b <= 0)
      printf("Attenzione, inserisci una base positiva\n");
  }while(b <= 0);

  do
  {
    printf("Inserisci l'altezza del rettangolo\n");
    scanf("%d", &h);
    if(h <= 0)
      printf("Attenzione, inserisci un'altezza positiva\n");
  }while (h <= 0);
  
  area = (b * h);
  printf("L'area del rettangolo e' %f\\n\n", area);
}

void triangolo()
{
  int b, h;
  float area;
  do
  {
    printf("Inserisci la base del triangolo\n");
    scanf("%d", &b);
    if(b <= 0)
      printf("Attenzione, inserisci una base positiva\n");
  }while(b <= 0);

  do
  {
    printf("Inserisci l'altezza del triangolo\n");
    scanf("%d", &h);
    if(h <= 0)
      printf("Attenzione, inserisci un'altezza positiva\n");
  }while(h <= 0);
  
  area = (b * h);
  printf("L'area del triangolo e' %f\n\n", area);
}

void trapezio()
{
  int b, B, h;
  float area;
  do
  {
    printf("Inserisci la base minore del trapezio\n");
    scanf("%d", &b);
    if(b <= 0)
        printf("Attenzione, inserisci una base minore positiva\n");
  }while(b <= 0);

  do
  {
    printf("Inserisci la base maggiore del trapezio\n");
    scanf("%d", &B);
    if(b <= 0)
      printf("Attenzione, inserisci una base maggiore positiva\n");
  }while(B <= 0);
  
  do
  {
    printf("Inserisci l'altezza del trapezio\n");
    scanf("%d", &h);
    if(h <= 0)
      printf("Attenzione, inserisci un'altezza positiva\n");
  }while(h <= 0);

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

Esercizio 2

Scrivere una funzione in C strsearch che riceve in input una stringa s (source) e una seconda stringa t (target). La funzione deve ricercare la stringa t all’interno della stringa s e ritornare l’indice del primo carattere in s se la stringa viene trovata, -1 in caso contrario. Scrivere quindi un programma che richiede all’utente le due stringhe, richiama la funzione strsearch e stampa a video il risultato. La lunghezza massima delle stringhe è 20 caratteri.
#include <'stdio.h>
#include <'string.h>

#define DIM 20
int strsearch(char x[], char y[]);

int main()
{
  char s1[DIM+1], s2[DIM+1];
  int ris;
  printf("Inserisci la stringa source:\n");
  gets(s1);
  printf("Inserisci la stringa target:\n");
  gets(s2);

  ris = strsearch(s1, s2);
  if (ris == -1)
    printf("La stringa %s, non e' contenuta nella stringa %s. Indice: %d", s2, s1, ris);
  else
    printf("La stringa %s, e' contenuta nella stringa %s dalla posizione %d", s2, s1, ris);
  return 0;
}

int strsearch(char x[], char y[])
{
  int dimy = strlen(y);
  int dimx = strlen(x);

  int i, j, z, n, indice;
  for (i = 0; i < dimy; i++)
    for(j = i; j < dimx; j++)
      if (x[j] == y[i])
      {
        indice = j;
        for (z = indice, n = i; z < dimx && n < dimy; z++, n++)
        {
          if(x[z] == y[n])
          {

          }
          else
          {
            indice = -1;
            return indice;
          }
        }
        return indice + 1;
      }
}
[adinserter block="7"]

Esercizio 3

Scrivere una funzione in C arrord che riceve in input un array di numeri interi di massimo 50 elementi e ritorna vero (1) se gli elementi sono ordinati in senso crescente, falso (0) altrimenti. Scrivere quindi un programma che richiede all’utente di inserire gli elementi dell’array (l’utente potrebbe inserire anche meno di 50 elementi, ma ne deve inserire almeno 1), richiama la funzione arrord e stampa a video il risultato. Nota: Aggiungere tutti i parametri necessari alla funzione per una corretta implementazione.
#include <'stdio.h>

int arrord (int *x, int lenght);

int main()
{
  int dim;
  printf("Quanti numeri vuoi inserire?\n");
  scanf("%d", &dim);
  int num[dim], i, ris;
  for(i = 0; i < dim; i++)
  {
    printf("Inserisci il %d numero\n", i+1);
    scanf("%d", &num[i]);
  }
  ris = arrord(num, dim);
  if (ris == 0)
    printf("L'array non e' in ordine crescente\n");
  else if (ris == 1)
    printf("L'array e' in ordine crescente\n");
  return 0;
}

int arrord (int *x, int lenght)
{
  int i, j;
  for (i = 0; i < lenght; i++)
  {
    for(j = i+1; j < lenght; j++)
    {
      if(*(x+i) < *(x+j))
      {}
      else
        return 0;
    }  
  }
  return 1;
}
[adinserter block="7"]

Premi qui per scaricare il PDF