Perfezionamento esercizio in C

di il
2 risposte

Perfezionamento esercizio in C

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++;
		}
}

2 Risposte

  • Re: Perfezionamento esercizio in C

    Da come leggo io la traccia, direi che si richiedono cose in parte diverse da come le hai impostate.

    "una tabella bidimensionale non ordinata di numeri reali"

    Il tuo programma fa riferimento a una tabella di numeri interi. Volevano dei float (o double)?

    "Si deve realizzare un programma costituito da 3 funzioni (oltre al main)"

    Ne hai fatte solo due, di funzioni oltre al main.

    "la prima che legge da file di testo “tabelle.txt” N tabelle"

    Secondo me la richiesta è che la funzione analizzi il file per determinare quante sono le tabelle e le loro dimensioni, quindi le carichi tutte quante (magari in memoria dinamica? è un argomento che avete trattato?).

    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 tua funzione non ha quei tre parametri in input, ne ha uno solo (poi ricava gli altri dati chiedendoli all'utente, ma non credo possa essere considerata la stessa cosa, particolarmente in un compito di scuola).

    "la terza che stampa a video, per ogni tabella letta, il risultato della funzione trova_target"

    Parrebbe che si voglia che la funzione che stampa il risultato della ricerca non sia la funzione di ricerca stessa, bensì un'altra.

    Scusa la pedanteria, e tieni presente che potrei anche sbagliarmi.
  • Re: Perfezionamento esercizio in C

    Sarebbe molto utile avere a disposizione un file dei dati di esempio. Chiarirebbe molte cose.
Devi accedere o registrarti per scrivere nel forum
2 risposte