• Non ci sono risultati.

IEIM 2015-2016

N/A
N/A
Protected

Academic year: 2021

Condividi "IEIM 2015-2016"

Copied!
28
0
0

Testo completo

(1)

IEIM 2015-2016

Esercitazione XII

“Ripasso generale”

Alessandro A. Nacci

[email protected] - www.alessandronacci.it

1

Tratto da:

IEIM Lab 2014

Gianluca Durelli – [email protected]

Marco D. Santambrogio – [email protected]

(2)

Exe 1: Valori Circostanti

Si scriva una funzione in C che:

Ricevuta in ingresso una matrice di

dimensione NxM (con dimensioni scelte dall’utente) ed una posizione (i,j) della

matrice

Restituisca la somma dei valori connessi alla posizione scelta

Nota: Due valori sono connessi se sono adiacenti in orizzontale, verticale oppure obliquo.

2

(3)

Exe 1: Valori Circostanti

3

#include <stdio.h>

#define DIM 10

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0, r=0, c=0;

int riga, colonna;

int sum;

do{

printf("Numero righe [al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [al massimo %d]: ", DIM);

scanf("%d", &cols);

} while(rows>DIM || cols>DIM);

for(r=0; r<rows; r++)

for(c=0; c<cols; c++){

printf("Inserisci valore in posizione %d-%d: ", r, c);

scanf("%d", &M[r][c]);

}

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

sum = circostanti(M, riga, colonna, rows, cols);

printf("La sommma dei valori circostanti alla posizione %d-%d e': %d\n", riga, colonna, sum);

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

(4)

Exe 1: Valori Circostanti

3

#include <stdio.h>

#define DIM 10

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0, r=0, c=0;

int riga, colonna;

int sum;

do{

printf("Numero righe [al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [al massimo %d]: ", DIM);

scanf("%d", &cols);

} while(rows>DIM || cols>DIM);

for(r=0; r<rows; r++)

for(c=0; c<cols; c++){

printf("Inserisci valore in posizione %d-%d: ", r, c);

scanf("%d", &M[r][c]);

}

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

sum = circostanti(M, riga, colonna, rows, cols);

printf("La sommma dei valori circostanti alla posizione %d-%d e': %d\n", riga, colonna, sum);

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

(5)

Exe 1: Valori Circostanti

4

#include <stdio.h>

#define DIM 10

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0, r=0, c=0;

int riga, colonna;

int sum;

do{

printf("Numero righe [al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [al massimo %d]: ", DIM);

scanf("%d", &cols);

} while(rows>DIM || cols>DIM);

for(r=0; r<rows; r++)

for(c=0; c<cols; c++){

printf("Inserisci valore in posizione %d-%d: ", r, c);

scanf("%d", &M[r][c]);

}

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

sum = circostanti(M, riga, colonna, rows, cols);

printf("La sommma dei valori circostanti alla posizione %d-%d e': %d\n", riga, colonna, sum);

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

(6)

Exe 2: Linea Spezzata

Si scriva una funzione che:

Ricevuto un ingresso un vettore di

elementi che rappresentano dei punti in un piano cartesiano

Calcoli la lunghezza della linea spezzata che li collega

Nota: Si definiscano opportune strutture dati per risolvere l’esercizio

5

(7)

Exe 2: Linea Spezzata

6

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

(8)

Exe 2: Linea Spezzata

7

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

(9)

Exe 2: Linea Spezzata

8

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

(10)

Exe 2: Linea Spezzata

9

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

(11)

Exe 2: Linea Spezzata

10

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

float lunghezzaLineaRic(Punto *p, int i, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

float lunghezzaRic;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

printf("\n\n\n\n");

lunghezzaRic = lunghezzaLineaRic(p, 0, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezzaRic);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti) {

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

float lunghezzaLineaRic(Punto *p, int i, int numPunti) {

// o---o---o---o 4 punti, 3 hop, la i è da 0 a 2

if (i == numPunti - 2) {

return lunghezzaSegmento(&p[i], &p[i+1]);

} else {

return lunghezzaSegmento(&p[i], &p[i+1]) + lunghezzaLineaRic(p, i+1, numPunti);

} }

versione ricorsiva

(12)

\

11

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

float lunghezzaLineaRic(Punto *p, int i, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

float lunghezzaRic;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

printf("\n\n\n\n");

lunghezzaRic = lunghezzaLineaRic(p, 0, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezzaRic);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti) {

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

float lunghezzaLineaRic(Punto *p, int i, int numPunti) {

// o---o---o---o 4 punti, 3 hop, la i è da 0 a 2

if (i == numPunti - 2) {

return lunghezzaSegmento(&p[i], &p[i+1]);

} else {

return lunghezzaSegmento(&p[i], &p[i+1]) + lunghezzaLineaRic(p, i+1, numPunti);

}

} versione ricorsiva

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

} versione iterativa

(13)

12

#include <stdio.h>

#include <math.h>

#define DIM 10

typedef struct{

float X;

float Y;

} Punto;

void leggiPunto(Punto *p);

float lunghezzaSegmento(Punto *p1, Punto *p2);

float lunghezzaLinea(Punto *p, int numPunti);

int main(){

Punto p[DIM];

int numPunti;

float lunghezza;

int i;

printf("Da quanti punti e' formata la linea? ");

scanf("%d", &numPunti);

for(i=0; i<numPunti; i++) leggiPunto(&p[i]);

lunghezza = lunghezzaLinea(p, numPunti);

printf("La lunghezza della line spezzata e' pari a %f\n", lunghezza);

return 0;

}

void leggiPunto(Punto *p){

printf("Inserisci le coordinate del punto");

printf("\tX: ");

scanf("%f", &p->X);

printf("\tY: ");

scanf("%f", &p->Y);

}

float lunghezzaSegmento(Punto *p1, Punto *p2){

float lunghezza = (p1->X - p2->X) * (p1->X - p2->X) + (p1->Y - p2->Y) * (p1->Y - p2->Y);

return sqrt(lunghezza);

}

float lunghezzaLinea(Punto *p, int numPunti){

float lunghezza = 0;

int i;

for(i=0; i<numPunti-1; i++)

lunghezza += lunghezzaSegmento(&p[i], &p[i+1]);

return lunghezza;

}

(14)

Exe 3: Media Studenti

Si realizzi una struttura dati per la gestione dell’anagrafica degli studenti

Per ogni studente ci interessa:

Nome, cognome e media (con decimali)

Si scrivano quindi due funzione in C:

La prima per inserire gli studenti nell’anagrafica

La seconda che permetta di salvare in un array tutti e soli gli studenti che hanno una media compresa tra un intervallo scelto dall’utente

13

(15)

Exe 3: Media Studenti

14

#include <stdio.h>

#define LEN 100

#define STUDS 50

typedef struct{

char nome[LEN];

int matricola;

float media;

} Studente;

void leggiStudente(Studente *studente);

int leggiStudenti(Studente *studenti);

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti);

int main(){

Studente studenti[STUDS], studentiScelti[STUDS];

int istogrammaMedie[30];

int numeroStudenti = 0, numeroStudentiScelti = 0;

int s;

float minMedia, maxMedia;

numeroStudenti = leggiStudenti(studenti);

printf("Minima Media: ");

scanf("%f", &minMedia);

printf("Massima Media: ");

scanf("%f", &maxMedia);

numeroStudentiScelti = getStudenti(studenti, numeroStudenti, minMedia, maxMedia, studentiScelti);

for(s=0; s<numeroStudentiScelti; s++)

printf("%s\t%d\t%f\n", studentiScelti[s].nome, studentiScelti[s].matricola, studentiScelti[s].media);

return 0;

}

void leggiStudente(Studente *studente){

printf("Dati studente: \n");

printf("\tNome: ");

scanf("%s", studente->nome);

printf("\tMatricola: ");

scanf("%d", &(studente->matricola));

do{

printf("\tMedia: ");

scanf("%f", &(studente->media));

}while(studente->media<0 || studente->media>30);

}

int leggiStudenti(Studente *studenti){

int N, n;

do{

printf("Quanti studenti vuoi inserire [al massimo %d]? ", STUDS);

scanf("%d", &N);

}while(N>STUDS);

for(n=0; n<N; n++)

leggiStudente(&studenti[n]);

return N;

}

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti){

int s;

int pos;

int numStudentiScelti = 0;

for(s=0; s<numStudenti; s++){

if(studenti[s].media>=minMedia && studenti[s].media<=maxMedia){

studentiScelti[numStudentiScelti] = studenti[s];

numStudentiScelti++;

} }

return numStudentiScelti;

}

(16)

Exe 3: Media Studenti

15

#include <stdio.h>

#define LEN 100

#define STUDS 50

typedef struct{

char nome[LEN];

int matricola;

float media;

} Studente;

void leggiStudente(Studente *studente);

int leggiStudenti(Studente *studenti);

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti);

int main(){

Studente studenti[STUDS], studentiScelti[STUDS];

int istogrammaMedie[30];

int numeroStudenti = 0, numeroStudentiScelti = 0;

int s;

float minMedia, maxMedia;

numeroStudenti = leggiStudenti(studenti);

printf("Minima Media: ");

scanf("%f", &minMedia);

printf("Massima Media: ");

scanf("%f", &maxMedia);

numeroStudentiScelti = getStudenti(studenti, numeroStudenti, minMedia, maxMedia, studentiScelti);

for(s=0; s<numeroStudentiScelti; s++)

printf("%s\t%d\t%f\n", studentiScelti[s].nome, studentiScelti[s].matricola, studentiScelti[s].media);

return 0;

}

void leggiStudente(Studente *studente){

printf("Dati studente: \n");

printf("\tNome: ");

scanf("%s", studente->nome);

printf("\tMatricola: ");

scanf("%d", &(studente->matricola));

do{

printf("\tMedia: ");

scanf("%f", &(studente->media));

}while(studente->media<0 || studente->media>30);

}

int leggiStudenti(Studente *studenti){

int N, n;

do{

printf("Quanti studenti vuoi inserire [al massimo %d]? ", STUDS);

scanf("%d", &N);

}while(N>STUDS);

for(n=0; n<N; n++)

leggiStudente(&studenti[n]);

return N;

}

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti){

int s;

int pos;

int numStudentiScelti = 0;

for(s=0; s<numStudenti; s++){

if(studenti[s].media>=minMedia && studenti[s].media<=maxMedia){

studentiScelti[numStudentiScelti] = studenti[s];

numStudentiScelti++;

} }

return numStudentiScelti;

}

(17)

Exe 3: Media Studenti

16

#include <stdio.h>

#define LEN 100

#define STUDS 50

typedef struct{

char nome[LEN];

int matricola;

float media;

} Studente;

void leggiStudente(Studente *studente);

int leggiStudenti(Studente *studenti);

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti);

int main(){

Studente studenti[STUDS], studentiScelti[STUDS];

int istogrammaMedie[30];

int numeroStudenti = 0, numeroStudentiScelti = 0;

int s;

float minMedia, maxMedia;

numeroStudenti = leggiStudenti(studenti);

printf("Minima Media: ");

scanf("%f", &minMedia);

printf("Massima Media: ");

scanf("%f", &maxMedia);

numeroStudentiScelti = getStudenti(studenti, numeroStudenti, minMedia, maxMedia, studentiScelti);

for(s=0; s<numeroStudentiScelti; s++)

printf("%s\t%d\t%f\n", studentiScelti[s].nome, studentiScelti[s].matricola, studentiScelti[s].media);

return 0;

}

void leggiStudente(Studente *studente){

printf("Dati studente: \n");

printf("\tNome: ");

scanf("%s", studente->nome);

printf("\tMatricola: ");

scanf("%d", &(studente->matricola));

do{

printf("\tMedia: ");

scanf("%f", &(studente->media));

}while(studente->media<0 || studente->media>30);

}

int leggiStudenti(Studente *studenti){

int N, n;

do{

printf("Quanti studenti vuoi inserire [al massimo %d]? ", STUDS);

scanf("%d", &N);

}while(N>STUDS);

for(n=0; n<N; n++)

leggiStudente(&studenti[n]);

return N;

}

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti){

int s;

int pos;

int numStudentiScelti = 0;

for(s=0; s<numStudenti; s++){

if(studenti[s].media>=minMedia && studenti[s].media<=maxMedia){

studentiScelti[numStudentiScelti] = studenti[s];

numStudentiScelti++;

} }

return numStudentiScelti;

}

(18)

Exe 3: Media Studenti

17

#include <stdio.h>

#define LEN 100

#define STUDS 50

typedef struct{

char nome[LEN];

int matricola;

float media;

} Studente;

void leggiStudente(Studente *studente);

int leggiStudenti(Studente *studenti);

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti);

int main(){

Studente studenti[STUDS], studentiScelti[STUDS];

int istogrammaMedie[30];

int numeroStudenti = 0, numeroStudentiScelti = 0;

int s;

float minMedia, maxMedia;

numeroStudenti = leggiStudenti(studenti);

printf("Minima Media: ");

scanf("%f", &minMedia);

printf("Massima Media: ");

scanf("%f", &maxMedia);

numeroStudentiScelti = getStudenti(studenti, numeroStudenti, minMedia, maxMedia, studentiScelti);

for(s=0; s<numeroStudentiScelti; s++)

printf("%s\t%d\t%f\n", studentiScelti[s].nome, studentiScelti[s].matricola, studentiScelti[s].media);

return 0;

}

void leggiStudente(Studente *studente){

printf("Dati studente: \n");

printf("\tNome: ");

scanf("%s", studente->nome);

printf("\tMatricola: ");

scanf("%d", &(studente->matricola));

do{

printf("\tMedia: ");

scanf("%f", &(studente->media));

}while(studente->media<0 || studente->media>30);

}

int leggiStudenti(Studente *studenti){

int N, n;

do{

printf("Quanti studenti vuoi inserire [al massimo %d]? ", STUDS);

scanf("%d", &N);

}while(N>STUDS);

for(n=0; n<N; n++)

leggiStudente(&studenti[n]);

return N;

}

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti){

int s;

int pos;

int numStudentiScelti = 0;

for(s=0; s<numStudenti; s++){

if(studenti[s].media>=minMedia && studenti[s].media<=maxMedia){

studentiScelti[numStudentiScelti] = studenti[s];

numStudentiScelti++;

} }

return numStudentiScelti;

}

(19)

Exe 3: Media Studenti

18

#include <stdio.h>

#define LEN 100

#define STUDS 50

typedef struct{

char nome[LEN];

int matricola;

float media;

} Studente;

void leggiStudente(Studente *studente);

int leggiStudenti(Studente *studenti);

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti);

int main(){

Studente studenti[STUDS], studentiScelti[STUDS];

int istogrammaMedie[30];

int numeroStudenti = 0, numeroStudentiScelti = 0;

int s;

float minMedia, maxMedia;

numeroStudenti = leggiStudenti(studenti);

printf("Minima Media: ");

scanf("%f", &minMedia);

printf("Massima Media: ");

scanf("%f", &maxMedia);

numeroStudentiScelti = getStudenti(studenti, numeroStudenti, minMedia, maxMedia, studentiScelti);

for(s=0; s<numeroStudentiScelti; s++)

printf("%s\t%d\t%f\n", studentiScelti[s].nome, studentiScelti[s].matricola, studentiScelti[s].media);

return 0;

}

void leggiStudente(Studente *studente){

printf("Dati studente: \n");

printf("\tNome: ");

scanf("%s", studente->nome);

printf("\tMatricola: ");

scanf("%d", &(studente->matricola));

do{

printf("\tMedia: ");

scanf("%f", &(studente->media));

}while(studente->media<0 || studente->media>30);

}

int leggiStudenti(Studente *studenti){

int N, n;

do{

printf("Quanti studenti vuoi inserire [al massimo %d]? ", STUDS);

scanf("%d", &N);

}while(N>STUDS);

for(n=0; n<N; n++)

leggiStudente(&studenti[n]);

return N;

}

int getStudenti(Studente *studenti, int numStudenti, int minMedia, int maxMedia, Studente *studentiScelti){

int s;

int pos;

int numStudentiScelti = 0;

for(s=0; s<numStudenti; s++){

if(studenti[s].media>=minMedia && studenti[s].media<=maxMedia){

studentiScelti[numStudentiScelti] = studenti[s];

numStudentiScelti++;

} }

return numStudentiScelti;

}

(20)

Exe 4: Propagazione

Scrivere una funzione in C che:

Riceva in ingresso una matrice di dimensioni NxM (scelte dall’utente) inizializzata a 0

Riceva in ingresso una posizione della matrice (I,j) da inizializzare ad un valore X

Propaghi il valore iniziale secondo le seguenti regole:

La matrice va sempre scorsa da sinistra verso destra e dall’alto verso il basso

Se una cella ha valore 0 questa assumera’ un valore pari alla somma dei valori contenuti nelle celle adiacenti

L’algoritmo si ferma quando non esistono piu’ celle con valore 0.

19

(21)

Exe 4: Propagazione

20

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(22)

Exe 4: Propagazione

21

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(23)

Exe 4: Propagazione

22

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(24)

Exe 4: Propagazione

23

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(25)

Exe 4: Propagazione

24

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(26)

Exe 4: Propagazione

25

void stampaMatrice(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++){

for(c=0; c<cols; c++){

printf("%d\t", M[r][c]);

}

printf("\n");

} }

(27)

Exe 4: Propagazione

26

#include <stdio.h>

#define DIM 10

typedef struct{

int riga;

int colonna;

} Posizione;

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna);

void stampaMatrice(int M[][DIM], int rows, int cols);

int zero(int M[][DIM], int rows, int cols);

int getValue(int [][DIM], int, int, int, int);

int circostanti(int [][DIM], int, int, int, int);

int main(){

int M[DIM][DIM];

int rows=0, cols=0;

int riga, colonna;

do{

printf("Numero righe [ al massimo %d]: ", DIM);

scanf("%d", &rows);

printf("Numero colonne [ al massimo %d]: ", DIM);

scanf("%d", &cols);

}while(rows>DIM || cols>DIM);

printf("Inserisci la riga: ");

scanf("%d", &riga);

printf("Inserisci la colonna: ");

scanf("%d", &colonna);

propaga(M, rows, cols, riga, colonna);

stampaMatrice(M, rows, cols);

return 0;

}

int zero(int M[][DIM], int rows, int cols){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

return 1;

return 0;

}

int getValue(int M[][DIM], int riga, int colonna, int rows, int cols){

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return 0;

else

return M[riga][colonna];

}

int circostanti(int M[][DIM], int riga, int colonna, int rows, int cols){

int sum = 0;

int i,j;

for(i=-1; i<=1; i++)

for(j=-1; j<=1; j++) if(i!=0 || j!=0)

sum+=getValue(M, riga+i, colonna+j, rows, cols);

return sum;

}

void propaga(int M[][DIM], int rows, int cols, int riga, int colonna){

int r,c;

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) M[r][c] = 0;

if(riga<0 || riga>rows-1 || colonna<0 || colonna>cols-1) return;

M[riga][colonna] = 1;

while(zero(M, rows, cols)){

for(r=0; r<rows; r++)

for(c=0; c<rows; c++) if(M[r][c] == 0)

M[r][c] = circostanti(M, r, c, rows, cols);

} }

(28)

27

Tutte il materiale sarà

disponibile sul mio sito internet!

alessandronacci.it

Riferimenti

Documenti correlati

• espresso espresso espresso espresso: non può essere desunto per facta concludentia e non è sufficiente se tacito, pur non occorrendo formule sacramentali; è

131 del 1986 (TUR), che àncora la base imponibile delle imposte di registro, ipotecaria e.. catastale al valore venale del bene o del diritto trasferito, individuando detta

Consorzio Metis

[r]

La prima fase del concorso prevede una selezione delle migliori iniziative imprenditoriali sulla base di un business plan che descriva dettagliatamente l’idea d’impresa che si intende

I boxplot, nelle pagine seguenti, rappresentatano la variabilità intra e interregionale: i rettangoli mostrano la variabilità intra-regionale e rappresentano i valori

Il contributo allo sviluppo delle risorse umane da parte di Novartis avviene anche attraverso l’erogazione di attività formative e di crescita professionale: nel 2017, sono

In aggiunta al valore creato dalla presenza e attività di Lilly in tutte le dimensioni sopra analizzate, le parole evidenziate nella figura seguente rappresentano una chiave