Salve, secondo voi va bene o posso perfezionarlo?
Traccia:
Costruire una funzione trova_target che ha in input: una tabella bidimensionale non ordinata di numeri reali, un numero intero j (indice di colonna), un numero reale (il target).
La funzione restituisce: l’indice di riga relativo al primo elemento il cui valore è uguale al target (se il target è presente nella colonna j della tabella) oppure il valore -1 (se il target non è presente nella colonna j della tabella).
Si deve realizzare un programma costituito da 3 funzioni (oltre al main): la prima che legge da file di testo “tabelle.txt” N tabelle, la seconda che cerca il target (come descritto sopra), e la terza che stampa a video, per ogni tabella letta, il risultato della funzione trova_target
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int matriceTab[100][100];
int nColonne;
int nRighe;
}matrice;
void trovaTarget(matrice *findTab);
void stampaMatrice(matrice *findtab);
int main(void)
{
FILE *fp;
int i, j, k;
int numTabelle;
int searchTab;
int flag;
matrice findTab;
fp=fopen("tabelle.txt", "r");
fscanf(fp, "%d", &numTabelle);
printf("le tabelle sono %d\n", numTabelle);
flag = 0;
while(flag == 0)
{
printf("In quante tabelle vuoi cercare il target?\n");
scanf("%d", &searchTab);
if(searchTab > numTabelle)
{
printf("Attenzione, le tabelle presenti in questo file sono solo %d \n", numTabelle);
} else
{
// La variabile flag assumerà il valore 1 nel momento in cui vogliamo uscire dal ciclo
// L'uscita dal ciclo avverrà nel momento in cui l'utente inserirà un numero corretto di tabelle
// Tale condizione avviene nell'else
flag = 1;
}
}
k = 0;
while(k < searchTab)
{
fscanf(fp, "%d %d", &findTab.nRighe, &findTab.nColonne);
printf("La matrice ha %d righe e %d colonne\n", findTab.nRighe, findTab.nColonne);
i=0;
while(i < findTab.nRighe)
{
j=0;
while ( j < findTab.nColonne)
{
fscanf(fp, "%d ", &findTab.matriceTab[i][j]);
printf("%d \n", findTab.matriceTab[i][j]);
j++;
}
i++;
}
stampaMatrice(&findTab);
trovaTarget(&findTab);
k++;
}
fclose(fp);
system("pause");
return 0;
}
void trovaTarget(matrice *findTab) {
int flag;
int i;
int indiceUtente;
int target;
printf("In quale colonna della matrice vuoi trovare il target:");
scanf("%d", &indiceUtente);
printf("Inserisci un valore target da trovare nella matrice: \n");
scanf("%d", &target);
flag = 0;
i=0;
while(i < findTab->nRighe)
{
if(target == findTab->matriceTab[i][indiceUtente-1])
{
printf("L'indice di riga in cui si trova il target e': %d\n", i+1);
flag=1;
}
i++;
}
if(flag == 0)
{
printf("Il target non e' presente: %d\n", -1);
}
}
void stampaMatrice(matrice *findTab){
int i;
int j;
printf("La mat e': \n");
i=0;
while(i < findTab->nRighe)
{
j=0;
while ( j < findTab->nColonne)
{
printf("| %d ", findTab->matriceTab[i][j]);
j++;
}
printf("|\n");
i++;
}
}