Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 26-04-2007, 12.35.58   #1
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
[C]Dove sbaglio?

Salve ho dei problemi con questo codice(quando chiamo la funzione stampa mi stampa tutti 0)
void video(int** A,int n);


int main(int argc, char *argv[])
{
int m;
int i,j;
double **matrice;

printf("Inserisci la dimensione della matrice: \n");
scanf("%d",&m);
int n=m+1;
double b[n+1]; //vettore dei termini noti
matrice=calloc(n,sizeof(double*));

double cont;

for (i=0;i<=n;++i){
matrice[i]=calloc(n+1,sizeof(double));
}

for(i=1;i<n;i++)
{
for (j=1;j<n;j++)
{
matrice[i][j]=cont;
// printf("%f\t",matrice[i][j]);
cont++;
}

// printf("\n\n\n");
}
video(matrice,n);


system("PAUSE");
return 0;
}
void video(int** A,int n)
{
int i;
int j;
for(i=1;i<n;i++)
{

for (j=1;j<n;j++)
{
printf("%f\t",A[i][j]);
}
printf("\n\n\n");
}
}


AIUTO!
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 16.20.27   #2
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
Ragazzi ho risolto, avevo sbagliato il prototipo delle funzione era double!


PS: qualcuno sa come si passa un file ad una funzione?

Non l'ho trovato da nessuna parte!
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 16.40.34   #3
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Quota:
Inviato da comm64
PS: qualcuno sa come si passa un file ad una funzione?
Non l'ho trovato da nessuna parte!
Beh, prima devi aprire il file. Per farlo devi avere un puntatore a variabile di tipo FILE:
FILE *pDati;

Poi usare la funzione fopen:
pDati = fopen("modalità", "nomefile");

A questo punto il file sarà aperto ed utilizzabile tramite il puntatore pDati.

http://www.acm.uiuc.edu/webmonkeys/b...uide/2.12.html
UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 17.20.47   #4
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
ciao Ugo, grazie per avermi risposto,

ho quasi sistemato....

devo solo capire come fare a contare gli elementi che sono contenuti del file( nel mio caso è una matrice quadrata di double) e quindi mi basterebbe sapere solo le righe o solo le colonne per poi andare a creare dinamicamente una matrice pari a righe o colonne
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 17.34.04   #5
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
1.189207 1.259921 1.414214 2.000000
1.259921 1.414214 2.000000 4.000000
1.414214 2.000000 4.000000 8.000000
2.000000 4.000000 8.000000 16.000000


questo è un esempio di fle

4righe *4 colonne
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 17.42.50   #6
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Beh, se è un file binario contenente esclusivamente double puoi usare la funzione stat e vederne la dimensione... poi dividi per il numero di byte occupati da un double.

Oppure potrebbe essere più semplice sapendo come è stato salvato il file
UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 17.44.00   #7
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Quota:
Inviato da comm64
questo è un esempio di fle

4righe *4 colonne
Ah ma allora... il file è di testo?

Se così fosse basta contare il numero di caratteri newline al suo interno (codice ASCII 10) e il gioco è fatto

Ultima modifica di UG0_BOSS : 26-04-2007 alle ore 17.47.04
UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 17.51.42   #8
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
si è un file TXT
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 18.07.49   #9
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Quota:
Inviato da comm64
si è un file TXT
Allora dovrebbe bastare un ciclo

int contatore=0;
char c;
while( (c=fgetc(pDati)) !=EOF){
if(c==10){contatore++;}
}

in pratica:
bisogna dichiarare una variabile (contatore) che conti il numero di righe del file e un carattere c;
fgetc ottiene il carattere dal file passato come parametro e restituisce "EOF" se siamo arrivati in fondo al file;
Finchè non arriviamo in fondo al file viene letto il carattere c, se questo carattere è uguale a 10 (newline), il contatore viene incrementato di 1.

Alla fine contatore conterrà il numero di righe del file e quindi della matrice
UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 18.22.09   #10
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
TU SEI UN MAGO!!!!


ALTRO CHE!!!


FUNZIONA TUTTO!"!!


POTRESTI ANALIZZARMI SOLO UN ALTRA COSA?

TI FACCIO VEDERE IL CODICE COMPLETO che mi stampa tutti zero però il numero degli elementi gli ha azzeccati!

Codice:
#include <stdio.h>
#include <stdlib.h>

void stampa_matrice(double** val,int n);

int main(int argc, char *argv[])
{
    int i,j;
    int n;
    FILE*fp;
    char buf[256];
   
    double **A;
    char* filename="C:\\matrice.txt";
    int riga=0;
    
    if((fp=fopen(filename,"r+"))==NULL)
    {
         printf("Impossibile aprire il file");
         return;
    }
    else
    {
        //devo allocare una matrice pari alla dimensione degli elementi presenti nel file;
        int contatore=0;
        char c;
        while( (c=fgetc(fp)) !=EOF)
        {
               if(c==10){contatore++;}
}
        n=contatore-1;
        printf("%d",n);
        A=calloc(n+1,sizeof(double*));
        
        
         for (i=0;i<n;++i)
         {
          A[i]=calloc(n+1,sizeof(double));
         }
        do
       {
                 for (i=0;i<n;i++)
                 {
                     for(j=0;j<n;j++)
                     fgets(buf,256,fp);
                     sscanf(buf,"%lf",&A[i][j]);
                     
                     
                 }
       
       }
        while(!feof(fp));
       fclose(fp);
     }
     
stampa_matrice(A,n);


system("PAUSE");	
  return 0;
}
void stampa_matrice(double **val,int n) {
                      int i,j;
                      for (i=0;i<n;i++)
                      {
                          printf("\n");
                          for (j=0;j<n;j++)
                          printf("%lf\t",val[i][j]);
                          }
                          printf("\n\n\n");
                      }

Ultima modifica di comm64 : 26-04-2007 alle ore 18.30.12
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 19.44.03   #11
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Quota:
Inviato da comm64
TU SEI UN MAGO!!!!
Esagerato

Uhm... andiamo per passi
Finora posso solo dire che la funzione stampa_matrice è ok
UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 19.59.10   #12
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
si però quando la va a chiamare mi stampa tutti 0 ah... sono un fesso... ti dovevo passare il file matrix.txt da mettere in C:
cosi potevi vedere il contenuto che doveva stampare a video(se il programma riuscisse a leggere e memorizzare quei dati in A[][]

ti ho allegato il file:!


CIAO MITICO!
comm64 non è collegato   Rispondi citando
Vecchio 26-04-2007, 21.49.03   #13
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
Vediamo... non ho ancora capito dov'è il problema centrale però nel frattempo ho notato alcune linee migliorabili:

Codice:
char* filename="C:\\matrice.txt";
In questo modo il nome del file è "prefissato", se invece usassi
Codice:
char* filename=argv[1];
Il nome del file potrebbe essere deciso dall'utente, passandolo come argomento al programma (quindi basterebbe trascinare il file di testo sull'icona del programma);

Codice:
        do{
                 for (i=0;i<n;i++){
                     for(j=0;j<n;j++){
                           fgets(buf,256,fp);
                           sscanf(buf,"%lf",&A[i][j]);
                           }
                     }
             }while(!feof(fp));
Il do{}while non serve perchè comunque il ciclo si ferma già dopo aver letto n*n valori;
Codice:
                           fgets(buf,256,fp);
                           sscanf(buf,"%lf",&A[i][j]);
Si può cambiare con un più immediato
Codice:
      fscanf( fp, "%lf", &A[i][j]);

UG0_BOSS non è collegato   Rispondi citando
Vecchio 26-04-2007, 22.17.12   #14
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
Ti ringrazio UGO! mi stai dando un aiuto grandissimo...
adesso ci resta sempre capire perchè stampa tutti zero.... forse non riusciamo a memorizzare bene gli elementi dentro gli array...
comm64 non è collegato   Rispondi citando
Vecchio 27-04-2007, 23.09.32   #15
comm64
Newbie
 
Registrato: 26-04-2007
Messaggi: 24
comm64 promette bene
ciao ugo finalmente ho risolto ti volevo chiedere sai come fare in C per far eseguire un file da console?
ad esempio:
MENU:

1)vuoi vedere il file della matrice?

praticamente se l'utente preme 1 dovrebbe aprire il file.txt a schermo
comm64 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Hamachi...dove sbaglio? taco Internet e Reti locali 1 16-01-2006 20.47.33
Multiserver in GrabIt. Dove sbaglio? Zievatron Software applicativo 0 03-07-2005 21.44.01
Format ( per sbaglio ) Annibale36® Windows 7/Vista/XP/ 2003 9 23-03-2005 08.35.49
Ditemi se sbaglio per favore melchizedek Windows 7/Vista/XP/ 2003 3 30-12-2004 20.17.14
Certamente sbaglio! andrea70 Chiacchiere in libertà 23 03-03-2004 10.19.33

Orario GMT +2. Ora sono le: 18.02.11.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.