[ verden @ 17.09.2005. 13:53 ] @
cao,svima!potrebna mi je pomoc u vezi sljedeceg zadatka:u tekstualnoj datoteci se u prvom redu nalaze broj vrsta i kolona matrice,a u sljedecim redovima su elementi matrice!potrebno je te elemente iscitati,ubaciti u binarno drvo i zatim drvo odstampati u inorder redosljedu!
morate priznati da je zadatak vrlo jednostavan,ali moj kod ipak ne funkcionise!tacnije,uvijek mi javlja poruku da se datoteka ne moze otvoriti!
ako neko ima vremena neka neka pogleda kod i javi mi u cemu grijesim!!!
unaprijed hvala!
a evo i koda:



#include<stdio.h>
#include<stdlib.h>
struct tree
{
float value;
struct tree* left;
struct tree* right;
};
void insert(tree* tr,float data)
{
if(tr==NULL)
{
struct tree* New=(struct tree*)malloc(sizeof(struct tree));
New->value=data;
New->left=NULL;
New->right=NULL;
tr=New;
}
else
{
if(data<tr->value)
insert(tr->left,data);
else insert(tr->right,data);
}
}
void FileToTree(struct tree** tr,char* FileName)
{
FILE* fp;
int m,n,i,j;
float a;
if((fp=fopen(FileName,"r"))==NULL)
{
printf("datoteka se ne moze otvoriti!\n");
return;
}
else
{
fscanf(fp,"%d",&m);
fscanf(fp,"%d",&n);
while(!feof(fp))
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
fscanf(fp,"%f",&a);
insert(*tr,a);
}
}
}
fclose(fp);
}
void inorder(struct tree* tr)
{
if(tr!=NULL)
{
inorder(tr->left);
printf("%f ",tr->value);
inorder(tr->right);
}
}
void main()
{
char* FileName="Matrix.txt";
struct tree* tr=(struct tree*)malloc(sizeof(struct tree));
FileToTree(&tr,FileName);
inorder(tr);
}
[ _VampiR_ @ 17.09.2005. 16:57 ] @
Onako od oka, eksperimentisi malo s imenom datoteke i vidi zasto se ne moze otvoriti. Mozda je do putanje, mozda ime datoteke pocinje malim slovom...
[ leka @ 18.09.2005. 00:46 ] @
Moze biti bas svasta u pitanju... Trebalo je da nam posaljes gresku koju javlja kompajler/linker...
Primecujem gresku u "void insert(tree* tr,float data)" liniji. Druga "greska" je u void main() - prema standardu main() treba da vraca celobrojnu vrednost (int)...
Ako se kod posalje na forum u malo boljem izdanju (nazubljen) onda se mozda vide i neke druge potencijalne greske.
Code:

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

struct tree {
  float value;
  struct tree *left;
  struct tree *right;
};

void insert( struct tree* tr, float data ) 
{
  if ( tr == NULL ) {
    struct tree * New = ( struct tree * ) malloc ( sizeof ( struct tree ) );
    New->value = data;
    New->left = NULL;
    New->right = NULL;
    tr = New;
  } else {
    if ( data < tr->value )
      insert ( tr->left, data );
    else
      insert ( tr->right, data );
  }
}

void FileToTree( struct tree **tr, char *FileName ) 
{
  FILE *fp;
  int m, n, i, j;
  float a;

  if ( ( fp = fopen ( FileName, "r" ) ) == NULL ) {
    printf ( "datoteka se ne moze otvoriti!\n" );
    return ;
  } else {
    fscanf ( fp, "%d", &m );
    fscanf ( fp, "%d", &n );
    while ( !feof ( fp ) ) {
      for ( i = 0; i < m; i++ )
        for ( j = 0; j < n; j++ ) {
          fscanf ( fp, "%f", &a );
          insert ( *tr, a );
        }
    }
  }

  fclose ( fp );
}

void inorder ( struct tree *tr ) 
{
  if ( tr != NULL ) {
    inorder ( tr->left );
    printf ( "%f ", tr->value );
    inorder ( tr->right );
  }
}

int main() 
{
  char * FileName = "Matrix.txt";

  struct tree *tr = ( struct tree * ) malloc ( sizeof ( struct tree ) );
  FileToTree ( &tr, FileName );
  inorder ( tr );
}


Jedna od mogucih gresaka je da u direktorijumu gde je izvrsni fajl nemas Matrix.txt fajl. Takodje, ako ovaj program koristis na UNIX masinama, onda treba da primetis da imas veliko slovo na pocetku. UNIX nije Windows, tamo se pravi razlika izmedju velikih i malih slova, te "Matrix.txt" nije isto sto i "matrix.txt" ...