Programmazione 1    (P-Z) a.a. 2007-08


Docente: R. Silvestri
Esercitatore: A. Carosi
Tutor: J. Stefa



Esercitazioni del 16 ottobre 2007

Esercizio 1

Scrivere una funzione che calcola l'elevamento a potenza baseesp, con esp valore intero. Si richiede di utilizzare la funzione all'interno di un programma main che prende entrambi gli input da tastiera e stampa il valore risultato sullo schermo. Per esempio con input base = 3 e esp = 4, il programma deve stampare 81.00000; con input base = 3 e esp = -4, stampa 0.01235.
Nota: si richiede allo studente di non utilizzare le funzioni li libreria matematica math.h.

Esercizio 2

Scrivere una funzione che preso in input un array di n interi, stampa l'array speculare rispetto all'elemento k-esimo (con k ≤ n). Integrare la funzione in un programma main che genera un array di n elementi casuali compresi tra 1 e 20. Per esempio avendo in input n = 5 e k = 3, e supponendo che l'array generato sia [2, 7, 8, 17, 9], stampa 2 7 8 8 7 2.

Esercizio 3

Scrivere una funzione che dato in input un numero intero positivo, restituisce la sua rappresentazione binaria (in base 2). La rappresentazione binaria di un numero intero positivo decimale n, si ottiene dividendo progressivamente il numero per 2 e restituendo il resto della divisione. Integrare la funzione in un programma main che prende in input un numero intero positivo da tastiera, e stampa su schermo la sequenza binaria e la sua lunghezza (numero di simboli necessari alla rappresentazione).
Nota: la rappresentazione binaria di 12 è 1100 = 23 * 1 + 22 * 1 + 21 * 0 + 20 * 0, dove i resti delle divisioni per 2 sono rispettivamente 0 (12/2), 0 (6/2), 1 (3/2) e 1 (1/2).

Esercizio 4

Scrivere due funzioni che, preso in input due stringhe binarie, restituiscono rispettivamente il risultato dell'operazione di AND e di OR tra le due stringhe. Integrare le due funzioni in un programma main che prende in input due numeri interi positivi x ed y (entrambi < 256), ne calcola le corrispondenti rappresentazioni binarie x2 e y2, ed infine restituisce in output il risultato dell'operazione di x2 OR (x2 AND y2).
Nota: L'operazione AND applicata ai singoli simboli binari è tale che AND(0,1) = AND(1,0) = AND(0,0) = 0, AND(1,1) = 1; diversamente l'operazione OR è tale che OR(1,1) = OR(1,0) = OR(0,1) = 1, OR(0,0) = 0.

Esercizio 5

Scrivere una funzione che preso in input un numero intero positivo n, stampa i numeri primi p ≤ n. Fornire una versione adeguatamente efficiente per la stampa dei numeri primi minori di 1000000.
Nota: usando il comando Linux time prima di un eseguibile, è possibile tenere traccia di una stima del tempo di esecuzione del programma eseguibile (ad esempio scrivendo time ./a.out).









Soluzioni (fino all'esercizio 3)



Esercizio 1


#include <stdio.h>

float esp(float, int );

int main(void) {
  float b;
  int e;

  printf ("Inserisci la base: ");
  scanf ("%f", &b);

  printf ("Inserisci l'esponente: ");
  scanf ("%d", &e);

  printf ("Risultato: %.5f\n", esp(b,e));

  return 0;
}

float esp(float b, int e) {
  float temp_b = 1.0;
  
  while (e < 0) {
    temp_b *= 1.0/b;
    e++;
  }

  while (e > 0) {
    temp_b *= b;
    e--;
  }

  return temp_b;
}

Esercizio 2


#include <stdio.h>
#include <stdlib.h>

void mirror(int[], int );

int main(void) {
  int n, k;

  do {
    printf ("Inserisci un intero: ");
    scanf ("%d", &n);

    printf ("Inserisci un intero (minore o uguale a %d): ", n);
    scanf ("%d", &k);
  } while (n < k);

  srand(time(NULL));

  int value[n], counter;
  
  for (counter = 0; counter < n; counter++) { 	
    value[counter] = (rand() % 20) + 1;
    printf ("%d ", value[counter]);
  }
  printf ("\n");

  mirror(value, k);

  return 0;
}

void mirror(int array[], int k) {
  int counter;

  for (counter = 0; counter < k; counter++) {
    printf ("%d ", array[counter]);
  }
  
  for (counter = k - 1; counter >= 0; counter--) {
    printf ("%d ", array[counter]);
  }

  printf ("\n");
}

Esercizio 3


#include <stdio.h>

#define MAX_LEN 32

void toBin(int );

int main(void) {
  int n;

  printf ("Inserisci un intero positivo: ", n);
  scanf ("%d", &n);
  
  toBin(n);

  return 0;
}

void toBin(int k) {
  int index = 0, i;
  short int value[MAX_LEN];
  
  while (k > 0) {
    value[index] = k % 2;
    k = k/2;
    index++;
  }
  
  for (i = index - 1; i >= 0; i--) {
    printf ("%d ", value[i]);
  }
  printf ("\n");
}
-- RiccardoSilvestri - 17 Oct 2007
Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r2 - 2007-10-20 - RiccardoSilvestri






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback