Informatica esercitazione 9 – 26-11-2020

Premi qui per scaricare il PDF

[adinserter block="7"]

In questa esercitazione di programmazione in C, risolveremo alcuni esercizi sulla concatenazione di stringhe, sull’ordinamento dell’array

Esercizio 1: Concatenazione stringhe

Scrivere una funzione in C denominata strconcat che riceve in ingresso due stringhe e ne esegue la concatenazione ritornando al chiamante: la stringa concatenata attraverso un parametro della funzione e la lunghezza della stringa concatenata attraverso il valore di ritorno. Scrivere quindi un programma che richiede all’utente le due stringhe, di lunghezza massima rispettivamente 10 e 20 caratteri, le concatena utilizzando l’apposita funzione e stampa a video il risultato.

#include <stdio.h> 
#define MAXLEN1 10 
#define MAXLEN2 20 
 
int Strconcat (char[], int, char[], int, char[], int); 
 
int main()
{ 
	char str1 [MAXLEN1 + 1], str2 [MAXLEN2 + 1]; 
	char strResult [MAXLEN1 + MAXLEN2 + 1]; 
	int len; 
	 
	printf ("inserire la prima stringa: "); 
	gets (str1); 
	 
	printf ("inserire la seconda stringa: "); 
	gets (str2); 
	 
	len = strconcat (str1, MAXLEN1, str2, MAXLEN2, strResult, MAXLEN1 + MAXLEN2); 
	 
	printf ("la stringa concatenata e': %s (%d)", strResult, len); 
	 
	return 0; 
} 
 
int Strconcat(char str1[], int str1MaxLen, char str2[], int str2MaxLen, char strResult[], int strResultMaxLen)
{ 
	int i, strLen1, strLen2; 

	strLen1 = 0; 
	for (i = 0; str1[i] != '\\0' && i < str1MaxLen && i < strResultMaxLen; i ++)
	{ 
		strResult[i] = str1[i]; 
		strLen1 ++;  
	} 
 
	strLen2 = 0; 
	for (i = 0; str2[i] != '\\0' && i < str2MaxLen && (i + strLen1) < strResultMaxLen; i ++)
	{ 
		strResult [i + strLen1] = str2[i]; 
		strLen2 ++; 
	} 
	 
	strResult [strLen1 + strLen2] = '\\0' ; 

	return strLen1 + strLen2; 
}
[adinserter block="7"]

Esercizio 2: Ordinamento vettore

Scrivere una procedura in C denominata ordint che riceve in ingresso un vettore di numeri interi, e altre variabili eventualmente necessarie, e lo ordina in senso crescente utilizzando l’algortimo Bubble Sort. Scrivere quindi un programma che richiede all’utente l’inserimento di massimo 50 numeri interi, ordina il vettore utilizzando la procedura ordint e stampa a video il risultato. L’inserimento dei valori termina quando l’utente inserisce il numero 0 che deve comunque essere considerato nel vettore.

#include <stdio.h>

#define MAXDIM 50

void ordint (int[], int);

int main() {
  int v[MAXDIM];
  int i, numValori;
  int finito;

  printf("\\nInserire i valori, 0 per terminare\\n");
  finito = 0;
  numValori = 0;

  do
  {
    scanf("%d", (v+numValori));

    if (*(v+numValori) == 0)
      finito = 1;
    
    numValori++;

  }while(!finito && numValori < MAXDIM);

  ordint(v, numValori);

  for(i = 0; i < numValori; i++)
    printf("\\n%d", *(v + i));
  
  return 0;
}

void ordint(int v[], int numValori)
{
  int i, k, temp;
  for(k = 0; k < numValori - 1; k++)
    for(i = 0; i < numValori - k - 1; i++)
      if (v[i] > v[i+1])
      {
        temp = v[i];
        v[i] = v[i+1];
        v[i+1] = temp;
      }
}
[adinserter block="7"]

Esercizio 3: Determinante

Il determinante di una matrice quadrata è un numero reale associato alla matrice stessa che ne esprime alcune proprietà algebriche e geometriche. Il determinante di una matrice quadrata 2×2 (matrice di ordine 2) è dato dalla differenza tra il prodotto degli elementi della diagonale principale e il prodotto degli elementi dell’antidiagonale:

Scrivere una funzione in C denominata detmatr che riceve in ingresso una matrice 2×2 e ritorna il determinante. Scrivere quindi un programma che richiede all’utente i dati della matrice, calcola il determinante utilizzando la funzione detmatr e stampa a video il risultato.

#include <stdio.h>

#define MAXDIM 2

int detmat(int[][MAXDIM], int);

int main()
{
  int determinante, i, j;
  int mat[MAXDIM][MAXDIM];

  for(i = 0; i < MAXDIM; i++)
    for(j = 0; j < MAXDIM; j++)
    {
      printf("\\n%d-%d", i+1,j+1);
      scanf("%d", &mat[i][j]);
    }

  determinante = detmat(mat, MAXDIM);

  printf("\\ndet: %d", determinante);
  return 0;
}

int detmat(int mat[][MAXDIM], int num)
{
  return mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
}
[adinserter block="7"]

Esercizio 4: Cronometraggio

Un sistema di cronometraggio per la Formula 1 registra i tempi in millisecondi. Tuttavia tali tempi devono essere presentati in termini di minuti, secondi e millisec agli utenti. Creare una procedura che, ricevuti in ingresso un tempo dato in millisecondi, renda disponibile al chiamante l’equivalente in termini di minuti, secondi, millisec. (tramite eventuali parametri passati per riferimento). Si realizzi quindi un main che, dopo aver chiesto all’utente un valore indicante una durata in millisecondi, stampi a video il tempo nel formato min:sec.millisec.

#include <stdio.h>

void fromMillisec(int, int *, int *, int *);

int main()
{
    int millisec, mm, sec, min;

    printf("Inserisci un tempo in millisecondi: ");
    scanf("%d", &millisec);

    fromMillisec(millisec, &mm, &sec, &min);

    printf("\\nTempo: %d:%d.%d\\n", min, sec, mm);

    return 0;
}

void fromMillisec(int millisec, int * mm, int * sec, int * min)
{
    //63600
    *mm = millisec % 1000; // --> 600
    *sec = millisec / 1000; // --> 63
    *min = *sec / 60; // --> 1
    *sec = *sec % 60; // --> 3
}
[adinserter block="7"]

Premi qui per scaricare il PDF