Soluzioni esercizi Homework 1
Esercizio 1
#include <stdio.h>
int main () {
int riga, colonna, rimanenti; // contatori cicli
int n; // numero input
int ultimo_bit; // ultimo bit della riga
int curr; // indice sottomatrice di dimensione (n-1) x (n-1)
scanf("%d", &n);
printf("n = %d\n",n);
curr = n;
for (riga = 0; riga < n; riga++) { // scorre le righe
for (colonna = 0; colonna < curr; colonna++) { // scorre le colonne fino a curr
if (((colonna+1)%2) == 0) { // se colonna pari
ultimo_bit = 0;
printf ("%d", ultimo_bit);
}
else { // se colonna dispari
ultimo_bit = 1;
printf ("%d", ultimo_bit);
}
}
if ((curr != n) && (curr > 0)) { // controllo se ci sono elementi rimanenti
for (rimanenti = 0; rimanenti < (n - curr); rimanenti++)
printf("%d", ultimo_bit);
}
printf("\n"); // termina riga corrente e passa alla successiva
curr--; // aggiorna la dimensione della sottomatrice
}
return 0;
}
Eserzicio 2
#include <stdio.h>
int main () {
unsigned long int n; // numero di input
int sin, dest; // mantengono rispettivamente le 3 cifre piu' e meno significative di n
scanf ("%lu", &n); // legge il numero di input
printf ("n = %lu\n", n);
if (n < 1000000) {
printf ("NO\n");
return 0;
}
dest = n % 1000; // des mantiene le 3 cifre meno significative di n
sin = (n - dest)/10000; // sin ora contiene le 3 cifre piu' significative di n
dest = (dest % 10)*100+ ((dest/10)%10)*10+(dest/100); // rovesciamento delle cifre di dest
printf ("sin = %d dest = %d\n", sin,dest);
if (sin == dest) printf ("YES\n");
else printf ("NO\n");
return 0;
} // end main
Esercizio 3
#include <stdio.h>
int main () {
unsigned long int n; // input
unsigned long int f_prec = 1;
unsigned long int f_curr = 1;
unsigned long int aux = 0;
unsigned long int i=2; // contatore while
scanf ("%lu", &n); // legge input
if (n < 0) {
printf ("Input errato\n");
return 1;
}
while(i <= n) {
aux = f_curr; // mantiene f_curr in aux
f_curr = f_prec + f_curr; // aggiorna f_curr
f_prec = aux; // aggiorna f_prec
i++;
} // end while
printf ("n = %lu\n", n);
printf ("%lu\n", f_curr);
return 0;
}
Esercizio 4
#include <stdio.h>
int main () {
unsigned long int n; // input
unsigned long int fact_curr = 1;
unsigned long int i=2; // contatore while
scanf ("%lu",&n); // legge input
if (n < 0) {
printf ("Input errato\n");
return 1;
}
while (i <= n) {
fact_curr = fact_curr * i; // aggiorna f_curr
i++;
} // end while
printf ("n = %lu\n%lu\n",n,fact_curr);
return 0;
}
Esercizio 5
#include <stdio.h>
#include <math.h>
int main () {
float a, b, c; // input
float discriminante;
scanf("%f", &a);
scanf("%f", &b);
scanf("%f", &c);
if ((a + b) == 0.0) return 0; // non ha soluzioni
if (a == 0.0) { // ha una soluzione reale
printf ("x1 = %.3f\n", (-1)*c/b);
return 0;
}
if ((b == 0.0) && (c < 0)) { // caso ax^2 + c = 0 con c < 0
printf ("x1 = 0\n");
printf ("x2 = %.3f\n", sqrt((-1)*c/a));
return 0;
}
discriminante = pow(b, 2)-4*a*c;
if (discriminante < 0) { // caso soluzioni non reali
float parte_reale = ((-1)*b)/(2*a);
float parte_imm = sqrt((-1)*discriminante)/(2*a);
printf ("x1 = %.3f + i%.3f\n", parte_reale, parte_imm);
printf ("x2 = %.3f - i%.3f\n", parte_reale, parte_imm);
return 0;
}
// caso soluzioni reali
printf ("x1 = %.3f\n", (((-1)*b)+sqrt(discriminante))/(2*a));
printf ("x2 = %.3f\n", (((-1)*b)-sqrt(discriminante))/(2*a));
return 0;
} // end main
--
JulindaStefa - 26 Oct 2007