<h1>Programmazione 1 <small> (P-Z) a.a. 2007-08</small></h1> <br> <big>Docente: R. Silvestri<br> Esercitatore: A. Carosi<br> Tutor: J. Stefa</big> <br> <br> <br> <h2>Esercitazioni del 16 ottobre 2007</h2> <b>Esercizio 1</b> <div align="justify"> <blockquote> Scrivere una funzione che calcola l'elevamento a potenza <tt>base<sup>esp</sup></tt>, con <tt>esp</tt> valore intero. Si richiede di utilizzare la funzione all'interno di un programma <tt>main</tt> che prende entrambi gli input da tastiera e stampa il valore risultato sullo schermo. Per esempio con input <tt>base = 3 </tt> e <tt>esp = 4</tt>, il programma deve stampare <tt>81.00000</tt>; con input <tt>base = 3</tt> e <tt>esp = -4</tt>, stampa <tt>0.01235</tt>. <br><strong>Nota:</strong> si richiede allo studente di non utilizzare le funzioni li libreria matematica <tt>math.h</tt>. </blockquote> </div> <br> <b>Esercizio 2</b> <div align="justify"> <blockquote> Scrivere una funzione che preso in input un array di <tt>n</tt> interi, stampa l'array speculare rispetto all'elemento <tt>k</tt>-esimo (con <tt>k ≤ n</tt>). Integrare la funzione in un programma <tt>main</tt> che genera un array di <tt>n</tt> elementi casuali compresi tra 1 e 20. Per esempio avendo in input <tt>n = 5</tt> e <tt>k = 3</tt>, e supponendo che l'array generato sia <tt>[2, 7, 8, 17, 9]</tt>, stampa <tt>2 7 8 8 7 2</tt>. </blockquote> </div> <br> <b>Esercizio 3</b> <div align="justify"> <blockquote> 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 <tt>n</tt>, si ottiene dividendo progressivamente il numero per 2 e restituendo il resto della divisione. Integrare la funzione in un programma <tt>main</tt> 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). <br> <strong>Nota:</strong> la rappresentazione binaria di <tt>12</tt> è <tt>1100 = 2<small><sup>3</sup></small> * 1 + 2<small><sup>2</sup></small> * 1 + 2<small><sup>1</sup></small> * 0 + 2<small><sup>0</sup></small> * 0</tt>, dove i resti delle divisioni per 2 sono rispettivamente <tt>0</tt> (<tt>12/2</tt>), <tt>0</tt> (<tt>6/2</tt>), <tt>1</tt> (<tt>3/2</tt>) e <tt>1</tt> (<tt>1/2</tt>). </tt> </blockquote> </div> <br> <b>Esercizio 4</b> <div align="justify"> <blockquote> Scrivere due funzioni che, preso in input due stringhe binarie, restituiscono rispettivamente il risultato dell'operazione di <tt>AND</tt> e di <tt>OR</tt> tra le due stringhe. Integrare le due funzioni in un programma <tt>main</tt> che prende in input due numeri interi positivi <tt>x</tt> ed <tt>y</tt> (entrambi < 256), ne calcola le corrispondenti rappresentazioni binarie <tt>x<small><sub>2</sub></small></tt> e <tt>y<small><sub>2</sub></small></tt>, ed infine restituisce in output il risultato dell'operazione di <tt>x<small><sub>2</sub></small> OR (x<small><sub>2</sub></small> AND y<small><sub>2</sub></small>)</tt>.<br><strong>Nota:</strong> L'operazione <tt>AND</tt> applicata ai singoli simboli binari è tale che <tt>AND(0,1) = AND(1,0) = AND(0,0) = 0</tt>, <tt>AND(1,1) = 1</tt>; diversamente l'operazione <tt>OR</tt> è tale che <tt>OR(1,1) = OR(1,0) = OR(0,1) = 1</tt>, <tt>OR(0,0) = 0</tt>. </blockquote> </div> <br> <b>Esercizio 5</b> <div align="justify"> <blockquote> Scrivere una funzione che preso in input un numero intero positivo <tt>n</tt>, stampa i numeri primi <tt>p ≤ n</tt>. Fornire una versione adeguatamente efficiente per la stampa dei numeri primi minori di 1000000. <br><strong>Nota:</strong> usando il comando Linux <tt>time</tt> prima di un eseguibile, è possibile tenere traccia di una stima del tempo di esecuzione del programma eseguibile (ad esempio scrivendo <tt>time ./a.out</tt>). </blockquote> </div> <br> <br> <br> <br> <br> <br> <br> <br> <big><b>Soluzioni (fino all'esercizio 3)</b></big> <br> <br> <br> <br> <b>Esercizio 1</b> <div align="justify"> <blockquote><pre><tt> #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; } </tt></pre></blockquote> </div> <b>Esercizio 2</b> <div align="justify"> <blockquote><pre><tt> #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"); } </tt></pre></blockquote> </div> <b>Esercizio 3</b> <div align="justify"> <blockquote><pre><tt> #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"); } </tt></pre></blockquote> </div> -- Users.RiccardoSilvestri - 17 Oct 2007
This topic: Programmazione1
>
WebHome
>
Prog1PZ
>
DiarioPZ0708
>
Eser161007
Topic revision: r2 - 2007-10-20 - RiccardoSilvestri
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback