SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
arrayInsert.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: inserimento di un elemento in un vettore
Si implementi in C la seguente funzione:
int insert (int vet[VET_SIZE], int *elemN, int key);
che inserisce un elemento intero key in un vettore vet
ordinato in ordine crescente. Si noti che il vettore
deve essere mantenuto ordinato e che *elemN indica il
numero di elementi effettivamente presenti (e significativi)
nel vettore e va opportunamente aggiornato. In caso di
vettore pieno l'elemento di valore maggiore può essere
eliminato dal vettore e venire perduto. La funzione
restituisce 1 se l'inserimento non causa la perdita di dati
e 0 in caso contrario.
Esempio.
Vettore prima dell'inserzione (VET_SIZE = 5): 1 2 3 4 5
Vettore dopo l'inserzione di key = 4: 1 2 3 4 4
*/
#include <stdio.h>
#include <stdlib.h>
#define VET_SIZE 6
#define SUCCESS 1
#define FAILURE 0
int insert (int vet[VET_SIZE], int *elemN, int key);
int
main (
void
)
{
int key, i, elemN;
int vet[VET_SIZE];
elemN = 0;
do {
fprintf (stdout, "Elemento da inserire (<0 per terminare): ");
scanf ("%d", &key);
if (key>=0) {
insert (vet, &elemN, key);
fprintf (stdout, "Vettore risultante:n");
for (i=0; i<elemN; i++) {
fprintf (stdout, "%d ", vet[i]);
}
fprintf (stdout, "n");
}
} while (key >=0);
-1-
arrayInsert.c
return (SUCCESS);
}
/*
* Per gestire in maniera univoca il caso di vettore pieno
* memorizzo un elemento effettivo in meno ... perdo un elemento
* del vettore
*/
int
insert (
int vet[VET_SIZE],
int *elemN,
int key
)
{
int i, retValue;
i=*elemN;
while (i>0 && vet[i-1]>key) {
vet[i] = vet[i-1];
i--;
}
vet[i] = key;
if ((*elemN) < VET_SIZE-1) {
retValue = SUCCESS;
*elemN = *elemN + 1;
} else {
retValue = FAILURE;
}
return (retValue);
}
-2-
binaryNumber.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: visualizzazione di un numero binario di n bit
Si scriva una funzione ricorsiva che riceva come parametro
un numero intero n e generi e visualizzi su video tutti i
numeri binari di n bit.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void binaryNumberIte (int n);
void binaryNumberRic (int i, int *vet, int n);
int
main (
void
)
{
int n, *vet;
fprintf (stdout, "Numero di bit: ");
scanf ("%d", &n);
vet = (int *) malloc (n * sizeof (int));
if (vet==NULL) {
fprintf (stderr, "Errore di allocazione.n");
exit (1);
}
fprintf (stdout, "Numeri Iterativo:n");
binaryNumberIte (n);
fprintf (stdout, "Numeri Ricorsivo:n");
binaryNumberRic (0, vet, n);
return (1);
}
void
binaryNumberIte (
int n
)
{
int i, j, k, nDec, bit;
nDec = pow (2, n);
for (i=0; i<nDec; i++) {
k = i;
for (j=0; j<n; j++) {
bit = k%2;
/*k = k/2;*/
k = k >> 1;
fprintf (stdout, "%d", bit);
}
-1-
binaryNumber.c
fprintf (stdout, "n");
}
return;
}
void
binaryNumberRic (
int i,
int *vet,
int n
)
{
int j;
if (i>=n) {
for (j=0; j<n; j++) {
fprintf (stdout, "%d", vet[j]);
}
fprintf (stdout, "n");
return;
}
vet[i] = 0;
binaryNumberRic (i+1, vet, n);
vet[i] = 1;
binaryNumberRic (i+1, vet, n);
return;
}
-2-
listInsert.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: inserzione in lista ordinata
Sia data la seguente struttura:
- key (numero intero)
- nome (stringa di massimo 30 caratteri)
- puntatore auto-referenziante
Si:
a. definisca tale struttura in linguaggio C
b. implementi in C la funzione che, ricevendo quali parametri
key, nome e il puntatore pHead a una lista supposta ordinata
secondo il campo key, inserisce un elemento di tale tipo
nella lista contenente i parametri indicati.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXC 30
#define SUCCESS 1
#define FAILURE 0
typedef struct nodo {
int key;
char nome[MAXC];
struct nodo *next;
} nodo_t;
nodo_t *inserisci (nodo_t *headP, int key, char *nome);
void stampaLista (nodo_t *headP);
void
stampaLista (
nodo_t *headP
)
{
fprintf (stdout, "Lista:n");
while (headP != NULL) {
fprintf (stdout, "%d %sn", headP->key, headP->nome);
headP = headP->next;
}
return;
}
nodo_t
*inserisci (
nodo_t *headP,
int key,
char *nome
)
-1-
listInsert.c
{
nodo_t *p, *p0, *p1;
p = (nodo_t *) malloc (sizeof (nodo_t));
if (p==NULL) {
fprintf (stderr, "Errore di allocazione.n");
exit (1);
}
p->key = key;
strcpy (p->nome, nome);
/* Lista vuota */
if (headP == NULL) {
p->next = NULL;
return (p);
}
/* Inserimento in testa */
if (key < headP->key) {
p->next = headP;
return (p);
}
/* Inserimento in mezzo o in coda. Percorrimento con doppio puntatore:
p0 e p1 puntano a due nodi consecutivi, al momento dell'inserimento
p0 punta al nodo precedente, p1 al successivo
*/
p0 = headP; p1 = headP->next;
/* cerca posizione - eventualmente fine lista (p1 == NULL) */
while ((p1 != NULL)&&(p1->key<key)) {
p0 = p1;
p1 = p1->next;
}
/* inserisce */
p0->next = p;
p->next = p1;
/* headP non viene modificato */
return (headP);
}
int
main (
void
)
{
nodo_t *headP;
int key;
char riga[MAXC], nome[MAXC];
headP = NULL;
do {
fprintf (stdout, "(f)ine: ");
scanf ("%s", riga);
if (riga[0] != 'f') {
fprintf (stdout, "Key: ");
-2-
listInsert.c
scanf ("%d", &key);
fprintf (stdout, "Nome: ");
scanf ("%s", nome);
headP = inserisci (headP, key, nome);
stampaLista (headP);
}
} while (riga[0] != 'f');
return (SUCCESS);
}
-3-
multiFusione.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: fusione di array
Fusione di N_VET vettori ordinati di dimensione N_EL
*/
#include <stdio.h>
#define N_VET 5
#define N_EL 3
#define N N_VET*N_EL
void minimo (int mat[N_VET][N_EL], int vet_i[N_VET], int vet[N_VET*N_EL],
int *k);
char fine (int vet_i[N_VET]);
main ()
{
char flag;
int i, j, k, l, mat[N_VET][N_EL], vet_i[N_VET], vet[N];
/* ciclo di lettura dei vettori */
for (i=0; i<N_VET; i++) {
fprintf (stdout, "INTRODUCI IL VETTORE %d (ordinato):n", i);
for (j=0; j<N_EL; j++) {
fprintf (stdout, "vet%1d[%d] = ", i, j);
scanf ("%d", &mat[i][j]);
if (j>0) {
if (mat[i][j]<mat[i][j-1]) {
fprintf (stderr, "!!! VETTORE NON ORDINATO !!!");
exit(1);
}
}
}
fprintf (stdout, "n");
}
fprintf (stdout, "n");
for (l=0; l<N; l++) {
fprintf (stdout, "[%2d]", l);
}
fprintf (stdout, "n");
for (i=0; i<N_VET; i++) {
vet_i[i] = 0;
}
k = 0;
flag = 0;
while (!flag) {
minimo (mat, vet_i, vet, &k);
flag = fine (vet_i);
-1-
multiFusione.c
for (l=0; l<k; l++) {
fprintf (stdout, " %2d ",vet[l]);
}
fprintf (stdout, "n");
}
flag = 0;
for (i=0; (i<N_VET)&&(!flag); i++) {
if ( vet_i[i]<(N_EL-1) ) {
while ( vet_i[i]<N_EL ) {
vet[k] = mat[i][vet_i[i]];
k++; vet_i[i]++;
}
flag = 1;
}
}
/* stampa vettore */
fprintf (stdout, "nRISULTATO :n");
for (l=0; l<N; l++) {
fprintf (stdout, " %2d ",vet[l]);
}
fprintf (stdout, "n");
return;
}
/* Determina se tutti i vettori, tranne uno, sono terminati */
char
fine (
int vet_i[N_EL]
)
{
char flag;
int i;
flag = 0;
for (i=1; i<N_VET; i++) {
if ( vet_i[i]<N_EL ) {
flag++;
}
}
if (flag==1) {
return (1);
} else {
return (0);
}
}
/* Determina il nuovo minimo, lo assegna e ripristina
i contatori */
void minimo (
int mat[N_VET][N_EL],
int vet_i[N_VET],
-2-
multiFusione.c
int vet[N],
int *k
)
{
char flag;
int i, j, min;
flag = 0;
for (i=0; i<N_VET; i++) {
if ( vet_i[i]<N_EL ) {
if (flag) {
if ( mat[i][vet_i[i]]<min ) {
j = i;
min = mat[i][vet_i[i]];
}
} else {
j = i;
min = mat[i][vet_i[i]];
flag = 1;
}
}
}
vet[*k] = min;
(*k)++;
vet_i[j]++;
return;
}
-3-
giocoVita.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: simulazione del gioco della vita
La configurazione inziale si introduce specificando
indice di riga e di colonna di ciascun elemento.
Indice di riga e/o colonna negativi interrompono
la fase di input. L'evoluzione avviene sino a
interrompere il programma.
*/
#include <stdio.h>
#define DIM1 5 /* Righe Mat */
#define DIM2 5 /* Colonne Mat */
char mat[2][DIM1][DIM2];
/* vettori per il calcolo delle coordinate dei vicini */
int a[8] = { 0, 1, 1, 1, 0, -1, -1, -1},
b[8] = { 1, 1, 0, -1, -1, -1, 0, 1};
/* prototipi */
void update (char flag);
void reset (char flag);
int alive (int x, int y, char flag);
int neighbour (int x, int y, char flag);
void display (char flag);
main ()
{
char c, flag=0;
int x, y;
printf ("Formato di Input:n");
printf (" IndiceRiga<spazio>IndiceColonna<return>n");
printf (" IndiceRiga = 0..%dn", DIM1);
printf (" IndiceColonna = 0..%dn", DIM2);
/* acquisizione della configurazione iniziale */
do {
printf ("IndiceRiga<spazio>IndiceColonna<return> : ");
scanf ("%d %d", &x, &y);
if ((x>=0) && (y>=0)) {
mat[flag][x][y] = 1;
}
} while ( (x>=0) && (y>=0) );
display (0);
/* ciclo infinito (di evoluzione) */
while (1) {
update (flag);
display (!flag);
printf ("nBatti RETURN per continuare n");
-1-
giocoVita.c
c = getchar ();
flag = !flag;
}
return;
}
/*
calcola di una nuova generazione
*/
void
update (
char flag
)
{
int i, j, n;
for (i=0; i<DIM1; i++) {
for (j=0; j<DIM2; j++) {
n = neighbour( i, j, flag);
if ( alive (i, j, flag) ) {
if ( (n == 2) || (n == 3) )
mat[!flag][i][j] = 1;
} else {
if ( (n == 3) )
mat[!flag][i][j] = 1;
}
}
}
reset (flag);
return;
}
/*
azzera la matrice relativa alla generazione futura
preparandola a contenere nuovi dati
*/
void
reset (
char flag
)
{
int i, j;
for (i=0; i<DIM1; i++)
for (j=0; j<DIM2; j++)
mat[flag][i][j] = 0;
return;
}
/*
determina se una casella e' viva
*/
-2-
giocoVita.c
int
alive (
int x,
int y,
char flag
)
{
if ( mat[flag][x][y] )
return (1);
else
return (0);
}
/*
calcola il numero di vicini vivi all'elemento x, y
*/
int
neighbour (
int x,
int y,
char flag
)
{
int i, xx, yy, count=0;
for (i=0; i<8; i++) {
xx = x + a[i];
yy = y + b[i];
if ( xx >= 0 && xx < DIM1 && yy >= 0 && yy < DIM2 )
if ( alive( xx, yy, flag) )
count++;
}
return (count);
}
/*
visualizza una generazione
*/
void
display (
char flag
)
{
int i, j;
printf ("n");
for (i=0; i<DIM1+2; i++)
printf ("#");
printf ("n#");
for (i=0; i<DIM1; i++) {
for (j=0; j<DIM2; j++)
if ( mat[flag][i][j])
printf ("*");
else
printf (" ");
-3-
giocoVita.c
printf ("#n#");
}
for (i=0; i<DIM1+1; i++)
printf ("#");
return;
}
-4-

Weitere ähnliche Inhalte

Was ist angesagt?

Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
STELITANO
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
STELITANO
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazza
Fabiano Dalla Piazza
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
STELITANO
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
STELITANO
 

Was ist angesagt? (20)

Corso c++
Corso c++Corso c++
Corso c++
 
2008 python
2008 python2008 python
2008 python
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Eccezioni in java
Eccezioni in javaEccezioni in java
Eccezioni in java
 
Qt Concurrent
Qt ConcurrentQt Concurrent
Qt Concurrent
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Costrutti linguistici
Costrutti linguisticiCostrutti linguistici
Costrutti linguistici
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazza
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)Esercitazione 4 (19 marzo 2012)
Esercitazione 4 (19 marzo 2012)
 
Js intro
Js introJs intro
Js intro
 
Il simulatore NS-2
Il simulatore NS-2Il simulatore NS-2
Il simulatore NS-2
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 

Andere mochten auch (10)

Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086
 
Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086
 
Assembly1
Assembly1Assembly1
Assembly1
 
Array
ArrayArray
Array
 
C Esercizi Indirizzamento
C Esercizi IndirizzamentoC Esercizi Indirizzamento
C Esercizi Indirizzamento
 
Elementi architetturali dell'8086
Elementi architetturali dell'8086Elementi architetturali dell'8086
Elementi architetturali dell'8086
 
Assembler 8086
Assembler 8086Assembler 8086
Assembler 8086
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUS
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088
 
Assembly
AssemblyAssembly
Assembly
 

Ähnlich wie Algoritmi e Programmazione Avanzata - Esercizi propedeutici

5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
guest60e9511
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
guest60e9511
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
guest60e9511
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
STELITANO
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
Majong DevJfu
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
STELITANO
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
guest60e9511
 

Ähnlich wie Algoritmi e Programmazione Avanzata - Esercizi propedeutici (20)

5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
 
8 Algoritmi
8   Algoritmi8   Algoritmi
8 Algoritmi
 
Metodo di Newton
Metodo di NewtonMetodo di Newton
Metodo di Newton
 
13 Puntatori E Memoria Dinamica
13   Puntatori E Memoria Dinamica13   Puntatori E Memoria Dinamica
13 Puntatori E Memoria Dinamica
 
Selection sort
Selection sortSelection sort
Selection sort
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
08 mapreduce
08   mapreduce08   mapreduce
08 mapreduce
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Insertion sort
Insertion sortInsertion sort
Insertion sort
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
La Grafica Con Java
La Grafica Con JavaLa Grafica Con Java
La Grafica Con Java
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Graphics Lezione1
Graphics Lezione1Graphics Lezione1
Graphics Lezione1
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
6 Vettori E Matrici
6   Vettori E Matrici6   Vettori E Matrici
6 Vettori E Matrici
 
Workshop su Arduino
Workshop su ArduinoWorkshop su Arduino
Workshop su Arduino
 

Mehr von Sergio Porcu (12)

Investimenti
InvestimentiInvestimenti
Investimenti
 
Costi, break even point, analisi make or buy
Costi, break even point, analisi make or buyCosti, break even point, analisi make or buy
Costi, break even point, analisi make or buy
 
Analisi degli scostamenti
Analisi degli scostamentiAnalisi degli scostamenti
Analisi degli scostamenti
 
Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253Il temporizzatore d'intervalli 8253
Il temporizzatore d'intervalli 8253
 
Il Turbo Debugger
Il Turbo DebuggerIl Turbo Debugger
Il Turbo Debugger
 
L'interrupt nell'8086
L'interrupt nell'8086L'interrupt nell'8086
L'interrupt nell'8086
 
Reti di Calcolatori - Crittografia
Reti di Calcolatori - CrittografiaReti di Calcolatori - Crittografia
Reti di Calcolatori - Crittografia
 
Mappe di Karnaugh
Mappe di KarnaughMappe di Karnaugh
Mappe di Karnaugh
 
Gestione date in PL/SQL
Gestione date in PL/SQLGestione date in PL/SQL
Gestione date in PL/SQL
 
Traduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionaleTraduzione dal modello ER al relazionale
Traduzione dal modello ER al relazionale
 
Soluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ERSoluzione generalizzazioni in diagrammi ER
Soluzione generalizzazioni in diagrammi ER
 
Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)Diagrammi Entità/Relazioni (ER)
Diagrammi Entità/Relazioni (ER)
 

Kürzlich hochgeladen

Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 

Kürzlich hochgeladen (20)

Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 

Algoritmi e Programmazione Avanzata - Esercizi propedeutici

  • 1. arrayInsert.c /* Algoritmi e Programmazione Avanzata Tutore: Sergio Porcu Argomento: inserimento di un elemento in un vettore Si implementi in C la seguente funzione: int insert (int vet[VET_SIZE], int *elemN, int key); che inserisce un elemento intero key in un vettore vet ordinato in ordine crescente. Si noti che il vettore deve essere mantenuto ordinato e che *elemN indica il numero di elementi effettivamente presenti (e significativi) nel vettore e va opportunamente aggiornato. In caso di vettore pieno l'elemento di valore maggiore può essere eliminato dal vettore e venire perduto. La funzione restituisce 1 se l'inserimento non causa la perdita di dati e 0 in caso contrario. Esempio. Vettore prima dell'inserzione (VET_SIZE = 5): 1 2 3 4 5 Vettore dopo l'inserzione di key = 4: 1 2 3 4 4 */ #include <stdio.h> #include <stdlib.h> #define VET_SIZE 6 #define SUCCESS 1 #define FAILURE 0 int insert (int vet[VET_SIZE], int *elemN, int key); int main ( void ) { int key, i, elemN; int vet[VET_SIZE]; elemN = 0; do { fprintf (stdout, "Elemento da inserire (<0 per terminare): "); scanf ("%d", &key); if (key>=0) { insert (vet, &elemN, key); fprintf (stdout, "Vettore risultante:n"); for (i=0; i<elemN; i++) { fprintf (stdout, "%d ", vet[i]); } fprintf (stdout, "n"); } } while (key >=0); -1-
  • 2. arrayInsert.c return (SUCCESS); } /* * Per gestire in maniera univoca il caso di vettore pieno * memorizzo un elemento effettivo in meno ... perdo un elemento * del vettore */ int insert ( int vet[VET_SIZE], int *elemN, int key ) { int i, retValue; i=*elemN; while (i>0 && vet[i-1]>key) { vet[i] = vet[i-1]; i--; } vet[i] = key; if ((*elemN) < VET_SIZE-1) { retValue = SUCCESS; *elemN = *elemN + 1; } else { retValue = FAILURE; } return (retValue); } -2-
  • 3. binaryNumber.c /* Algoritmi e Programmazione Avanzata Tutore: Sergio Porcu Argomento: visualizzazione di un numero binario di n bit Si scriva una funzione ricorsiva che riceva come parametro un numero intero n e generi e visualizzi su video tutti i numeri binari di n bit. */ #include <stdio.h> #include <stdlib.h> #include <math.h> void binaryNumberIte (int n); void binaryNumberRic (int i, int *vet, int n); int main ( void ) { int n, *vet; fprintf (stdout, "Numero di bit: "); scanf ("%d", &n); vet = (int *) malloc (n * sizeof (int)); if (vet==NULL) { fprintf (stderr, "Errore di allocazione.n"); exit (1); } fprintf (stdout, "Numeri Iterativo:n"); binaryNumberIte (n); fprintf (stdout, "Numeri Ricorsivo:n"); binaryNumberRic (0, vet, n); return (1); } void binaryNumberIte ( int n ) { int i, j, k, nDec, bit; nDec = pow (2, n); for (i=0; i<nDec; i++) { k = i; for (j=0; j<n; j++) { bit = k%2; /*k = k/2;*/ k = k >> 1; fprintf (stdout, "%d", bit); } -1-
  • 4. binaryNumber.c fprintf (stdout, "n"); } return; } void binaryNumberRic ( int i, int *vet, int n ) { int j; if (i>=n) { for (j=0; j<n; j++) { fprintf (stdout, "%d", vet[j]); } fprintf (stdout, "n"); return; } vet[i] = 0; binaryNumberRic (i+1, vet, n); vet[i] = 1; binaryNumberRic (i+1, vet, n); return; } -2-
  • 5. listInsert.c /* Algoritmi e Programmazione Avanzata Tutore: Sergio Porcu Argomento: inserzione in lista ordinata Sia data la seguente struttura: - key (numero intero) - nome (stringa di massimo 30 caratteri) - puntatore auto-referenziante Si: a. definisca tale struttura in linguaggio C b. implementi in C la funzione che, ricevendo quali parametri key, nome e il puntatore pHead a una lista supposta ordinata secondo il campo key, inserisce un elemento di tale tipo nella lista contenente i parametri indicati. */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define MAXC 30 #define SUCCESS 1 #define FAILURE 0 typedef struct nodo { int key; char nome[MAXC]; struct nodo *next; } nodo_t; nodo_t *inserisci (nodo_t *headP, int key, char *nome); void stampaLista (nodo_t *headP); void stampaLista ( nodo_t *headP ) { fprintf (stdout, "Lista:n"); while (headP != NULL) { fprintf (stdout, "%d %sn", headP->key, headP->nome); headP = headP->next; } return; } nodo_t *inserisci ( nodo_t *headP, int key, char *nome ) -1-
  • 6. listInsert.c { nodo_t *p, *p0, *p1; p = (nodo_t *) malloc (sizeof (nodo_t)); if (p==NULL) { fprintf (stderr, "Errore di allocazione.n"); exit (1); } p->key = key; strcpy (p->nome, nome); /* Lista vuota */ if (headP == NULL) { p->next = NULL; return (p); } /* Inserimento in testa */ if (key < headP->key) { p->next = headP; return (p); } /* Inserimento in mezzo o in coda. Percorrimento con doppio puntatore: p0 e p1 puntano a due nodi consecutivi, al momento dell'inserimento p0 punta al nodo precedente, p1 al successivo */ p0 = headP; p1 = headP->next; /* cerca posizione - eventualmente fine lista (p1 == NULL) */ while ((p1 != NULL)&&(p1->key<key)) { p0 = p1; p1 = p1->next; } /* inserisce */ p0->next = p; p->next = p1; /* headP non viene modificato */ return (headP); } int main ( void ) { nodo_t *headP; int key; char riga[MAXC], nome[MAXC]; headP = NULL; do { fprintf (stdout, "(f)ine: "); scanf ("%s", riga); if (riga[0] != 'f') { fprintf (stdout, "Key: "); -2-
  • 7. listInsert.c scanf ("%d", &key); fprintf (stdout, "Nome: "); scanf ("%s", nome); headP = inserisci (headP, key, nome); stampaLista (headP); } } while (riga[0] != 'f'); return (SUCCESS); } -3-
  • 8. multiFusione.c /* Algoritmi e Programmazione Avanzata Tutore: Sergio Porcu Argomento: fusione di array Fusione di N_VET vettori ordinati di dimensione N_EL */ #include <stdio.h> #define N_VET 5 #define N_EL 3 #define N N_VET*N_EL void minimo (int mat[N_VET][N_EL], int vet_i[N_VET], int vet[N_VET*N_EL], int *k); char fine (int vet_i[N_VET]); main () { char flag; int i, j, k, l, mat[N_VET][N_EL], vet_i[N_VET], vet[N]; /* ciclo di lettura dei vettori */ for (i=0; i<N_VET; i++) { fprintf (stdout, "INTRODUCI IL VETTORE %d (ordinato):n", i); for (j=0; j<N_EL; j++) { fprintf (stdout, "vet%1d[%d] = ", i, j); scanf ("%d", &mat[i][j]); if (j>0) { if (mat[i][j]<mat[i][j-1]) { fprintf (stderr, "!!! VETTORE NON ORDINATO !!!"); exit(1); } } } fprintf (stdout, "n"); } fprintf (stdout, "n"); for (l=0; l<N; l++) { fprintf (stdout, "[%2d]", l); } fprintf (stdout, "n"); for (i=0; i<N_VET; i++) { vet_i[i] = 0; } k = 0; flag = 0; while (!flag) { minimo (mat, vet_i, vet, &k); flag = fine (vet_i); -1-
  • 9. multiFusione.c for (l=0; l<k; l++) { fprintf (stdout, " %2d ",vet[l]); } fprintf (stdout, "n"); } flag = 0; for (i=0; (i<N_VET)&&(!flag); i++) { if ( vet_i[i]<(N_EL-1) ) { while ( vet_i[i]<N_EL ) { vet[k] = mat[i][vet_i[i]]; k++; vet_i[i]++; } flag = 1; } } /* stampa vettore */ fprintf (stdout, "nRISULTATO :n"); for (l=0; l<N; l++) { fprintf (stdout, " %2d ",vet[l]); } fprintf (stdout, "n"); return; } /* Determina se tutti i vettori, tranne uno, sono terminati */ char fine ( int vet_i[N_EL] ) { char flag; int i; flag = 0; for (i=1; i<N_VET; i++) { if ( vet_i[i]<N_EL ) { flag++; } } if (flag==1) { return (1); } else { return (0); } } /* Determina il nuovo minimo, lo assegna e ripristina i contatori */ void minimo ( int mat[N_VET][N_EL], int vet_i[N_VET], -2-
  • 10. multiFusione.c int vet[N], int *k ) { char flag; int i, j, min; flag = 0; for (i=0; i<N_VET; i++) { if ( vet_i[i]<N_EL ) { if (flag) { if ( mat[i][vet_i[i]]<min ) { j = i; min = mat[i][vet_i[i]]; } } else { j = i; min = mat[i][vet_i[i]]; flag = 1; } } } vet[*k] = min; (*k)++; vet_i[j]++; return; } -3-
  • 11. giocoVita.c /* Algoritmi e Programmazione Avanzata Tutore: Sergio Porcu Argomento: simulazione del gioco della vita La configurazione inziale si introduce specificando indice di riga e di colonna di ciascun elemento. Indice di riga e/o colonna negativi interrompono la fase di input. L'evoluzione avviene sino a interrompere il programma. */ #include <stdio.h> #define DIM1 5 /* Righe Mat */ #define DIM2 5 /* Colonne Mat */ char mat[2][DIM1][DIM2]; /* vettori per il calcolo delle coordinate dei vicini */ int a[8] = { 0, 1, 1, 1, 0, -1, -1, -1}, b[8] = { 1, 1, 0, -1, -1, -1, 0, 1}; /* prototipi */ void update (char flag); void reset (char flag); int alive (int x, int y, char flag); int neighbour (int x, int y, char flag); void display (char flag); main () { char c, flag=0; int x, y; printf ("Formato di Input:n"); printf (" IndiceRiga<spazio>IndiceColonna<return>n"); printf (" IndiceRiga = 0..%dn", DIM1); printf (" IndiceColonna = 0..%dn", DIM2); /* acquisizione della configurazione iniziale */ do { printf ("IndiceRiga<spazio>IndiceColonna<return> : "); scanf ("%d %d", &x, &y); if ((x>=0) && (y>=0)) { mat[flag][x][y] = 1; } } while ( (x>=0) && (y>=0) ); display (0); /* ciclo infinito (di evoluzione) */ while (1) { update (flag); display (!flag); printf ("nBatti RETURN per continuare n"); -1-
  • 12. giocoVita.c c = getchar (); flag = !flag; } return; } /* calcola di una nuova generazione */ void update ( char flag ) { int i, j, n; for (i=0; i<DIM1; i++) { for (j=0; j<DIM2; j++) { n = neighbour( i, j, flag); if ( alive (i, j, flag) ) { if ( (n == 2) || (n == 3) ) mat[!flag][i][j] = 1; } else { if ( (n == 3) ) mat[!flag][i][j] = 1; } } } reset (flag); return; } /* azzera la matrice relativa alla generazione futura preparandola a contenere nuovi dati */ void reset ( char flag ) { int i, j; for (i=0; i<DIM1; i++) for (j=0; j<DIM2; j++) mat[flag][i][j] = 0; return; } /* determina se una casella e' viva */ -2-
  • 13. giocoVita.c int alive ( int x, int y, char flag ) { if ( mat[flag][x][y] ) return (1); else return (0); } /* calcola il numero di vicini vivi all'elemento x, y */ int neighbour ( int x, int y, char flag ) { int i, xx, yy, count=0; for (i=0; i<8; i++) { xx = x + a[i]; yy = y + b[i]; if ( xx >= 0 && xx < DIM1 && yy >= 0 && yy < DIM2 ) if ( alive( xx, yy, flag) ) count++; } return (count); } /* visualizza una generazione */ void display ( char flag ) { int i, j; printf ("n"); for (i=0; i<DIM1+2; i++) printf ("#"); printf ("n#"); for (i=0; i<DIM1; i++) { for (j=0; j<DIM2; j++) if ( mat[flag][i][j]) printf ("*"); else printf (" "); -3-
  • 14. giocoVita.c printf ("#n#"); } for (i=0; i<DIM1+1; i++) printf ("#"); return; } -4-