Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    3

    esercizio in C - vett-mat

    salve a tutti!
    sono nuovo del forum, avrei un quesito da proporre a voi che sicuramente siete più esperti.
    Ho quest'esercizio:
    In un file binario è memorizzata una sequenza non ordinata di numeri(pari e dispari);
    il numero di questi interi è dispari;
    dichiarare, chiamare e definire opportune funzioni che sono in grado di allocare in memoria dinamica, una matrice quadrata la cui dimensione è uguale all'elemento che sta al centro della sequenza;
    inizializzare la matrice con tutti gli interi presenti nel file (escluso l'intero che stabilisce la dimensione);
    riempire le restanti celle della matrice allocata con zero.

    ho abbozzato qualche riga di codice ma... non funge; qualcuno di voi può darmi una mano?
    vi ringrazio in anticipo

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    int** carica(int*,int***);
    void stampa(int,int***);  
    
    int main(void)
    {
    	
    	int** matrice=NULL;
    	int dim=0;
    	matrice=carica(&dim,&matrice);
    	stampa(dim,&matrice);
    	return 0;
    }
    
    int** carica(int* dim, int*** mat)
    {
    FILE* fp;
    int i,j,ele;
    int conta=0;
    int k=0;
    int z=0;  // indice del vettore
    int* vett;
    
    fp=fopen("immagine.dat","rb");
    
    while(!feof(fp))
    	conta++;  //voglio sapere il numero degli elementi
    
    conta= conta/2;  // ho il numero degli elementi della prima parte
    
    rewind(fp); 
    
    for(i=0;i<conta+1;i++)
    	fread(dim,sizeof(int), 1, fp);
    
    rewind(fp);
    
    //allocazione dinamica vettore
    conta=conta*2;    // vettore di soli elementi escluso l'elemento centrale del file binario
    vett=malloc(sizeof(int)*conta);
    i=0;
    
    for(;i<conta/2;i++)
    	fread(&vett[i],sizeof(int),1,fp);
    
    	fseek(fp,4,1); //salto i 4 byte dell'elemento centrale
    
    	for(;i<conta/2;i++)
    		fread(&vett[i],sizeof(int),1,fp);
    
    	fclose(fp);
    //allocazione dinamica matrice
    
    *mat=malloc((*dim)*sizeof(int*));
    
    	for(i=0;i<*dim;i++)
    		*mat[i]=malloc(sizeof(int)*(*dim));
    
    
    /*inserimento in matrice*/
    
    
    for(i=0;i<*dim && z<conta;i++)
    	{
    		
    		for(j=0;j<*dim && z<conta;j++)
    			{
    			(*mat)[i][j]=vett[z];
    			z++;
    			}
    		
    	}
    
    	if(z==(*dim)*(*dim))     //caso particolare in cui il numero degli elementi dell'array concide esattamente con gli elementi della matrice
    		return *mat;
    
    		
    	else if(j==*dim)
    			{
    				i++;    // altrimenti passa alla nuova  riga
    				j=0;
    				if(i==*dim)
    					return *mat;
    			}
    
    // ora avrò i e j corrispondenti alla posizione dove comincia l'assegnamento degli zeri
    
    
    	while(j!=*dim)
    	{
    		(*mat)[i][j]= 0; // completo la riga di zeri
    		j++;
    	}
    
    
    for(;i<*dim;i++)
    	{
    		for(j=0;j<*dim ;j++)
    			{
    			(*mat)[i][j]=0;
    			}
    	}
    return *mat;
     
    }
    
    void stampa(int dim, int*** mat)
    {
    	int i,j;
    	for(i=0;i<dim;i++)
    	{
    		for(j=0;j<dim;j++)
    		{
    			printf("%d\t", (*mat)[i][j]);
    		}
    		printf("\n\n");
    	}
    
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: esercizio in C - vett-mat

    Originariamente inviato da dodo154
    ho abbozzato qualche riga di codice ma... non funge;
    Cioè?
    Dà errori in compilazione? Quali?
    Dà errori in esecuzione? Quali?
    Dà risultati errati? Quali?

    Non si può lasciare il problema all'immaginazione di chi legge. Si deve essere quanto più precisi possibile, riportando tutti i messaggi di errore che si hanno.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    3
    errore di segmentazione...

  4. #4
    Originariamente inviato da dodo154
    errore di segmentazione...
    Con il debugger non riesci a capire almeno dove ha luogo questo errore?
    Nelle allocazioni dinamiche non metti mai il casting dei puntatori ma non penso sia quello...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Tanto per dirne una dato che non ho letto per intero tutto il codice, sbagli l'allocazione dinamica della memoria per la matrice all'interno della funzione. Qui c'è una discussione utile su questo problema. Correggi quello, poi magari riposta il codice corretto se ti dà ancora problemi (possibilmente con un'indentazione migliore )
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.