vuoi
o PayPal
tutte le volte che vuoi
Modulo di Fondamenti di Informatica (9 CFU)
Prova del 21/01/2014 - n. 1
per allievi CdL Ingegneria Informatica
Prof. C. Sansone (durata: 1 ora e mezza)
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Salvare periodicamente il proprio lavoro.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Testo della prova
Sia data una matrice quadrata M di interi positivi memorizzata in un file di testo (Mat.txt),
che contiene nella prima riga il riempimento (riemp) e nelle successive gli elementi della
matrice (come illustrato negli esempi che seguono). Si ipotizzi che gli elementi della matrice
contengano tutti valori diversi.
Il “punto di sella” di una matrice quadrata è definito come l’elemento minimo della riga e
massimo della colonna a cui appartiene. Nel caso in cui tutti i valori della matrice sono
diversi, il punto di sella, è unico.
se esiste,
Si progettino (almeno) tre funzioni:
- leggi_mat, che legge da file il riempimento ed i valori di una matrice quadrata di interi
positivi;
- calc_ind_min, che riceve in ingresso un vettore e restituisce come parametro di uscita
l'indice del valore minimo in esso contenuto;
- trova_punto_sella, che riceve in ingresso una matrice quadrata M ed il suo riempimento
e, sfruttando (almeno) la funzione calc_ind_min, restituisce come parametro d'uscita una
struttura contenente due campi: un campo booleano (sella) che indica se esiste o meno il
punto di sella ed un campo di tipo intero (val) che rappresenta il valore del punto di sella. Nel
caso in cui il punto di sella non esiste (e quindi sella è uguale a false) il valore val sarà
indefinito. La funzione trova_punto_sella può anche utilizzarne altre, opportunamente
definite;
e si scriva un programma che, utilizzando queste funzioni, legga M da file, verifichi se esista
o meno il punto di sella e ne stampi il valore in caso affermativo, o un opportuno messaggio
nel caso in cui il punto di sella non esiste (vedi esempi - nel primo il valore del punto di sella
è riportato in grassetto).
---------------------------------------------------------------------------------------------------------------------------
Esempi
INPUT:
Mat.txt
4 2 17 19 22
3 20 7 9
25 23 32 40
13 21 27 39
OUTPUT:
Punto di sella: 23
INPUT:
Mat.txt
4 1 6 6 4
7 18 4 2
1 2 13 7
12 4 3 7
OUTPUT:
La matrice non ha un punto di sella
#include <iostream>
#include <fstream>
std;
using namespace
MAX=20;
int const matrice[MAX][MAX];
typedef int vettore[MAX];
typedef int
//Prototipi
leggi(matrice,
void int&);
stampa(matrice,
void int);
minimo(vettore,
int int);
massimo(vettore,
int int);
sella(matrice,int);
void
main(){
int
matrice m;
riemp=0;
int
leggi(m,riemp);
cout<<"LETTURA ESEGUITA! "<<"\n";
stampa(m,riemp);
sella(m,riemp);
system("pause");
} leggi(matrice m, riemp){
void int&
r,c;
int cont=0;
int
ifstream input;
input.open("dati.txt");
if(input.fail())
exit(1); // equivale a input.eof()==false
(!input.eof()){
while
if(cont==0){
input>>riemp;
cont++;
} else
{ for(r=0;r<riemp;r++)
for(c=0;c<riemp;c++)
input>>m[r][c];
}
}
input.close();
} stampa(matrice m, riemp){
void int
r,c;
int
r=c=0;
for(r=0;r<riemp;r++){
for(c=0;c<riemp;c++){
cout<<m[r][c]<<" ";
}
cout<<"\n";
}
}