Βοηθεια για C  Το θέμα επιλύθηκε

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Βοηθεια για C  Το θέμα επιλύθηκε

Δημοσίευσηαπό ertyuiopos » 22 Μάιος 2013, 20:33

καλησπερα εχω φτιαξει το ακολουθο προγραμμα

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct dedomena {
        char word[20];
} TStoixeioyTree;

typedef struct typos_komboy * typos_deikti;

typedef struct typos_komboy
{   TStoixeioyTree dedomena;
   typos_deikti apaidi;
   typos_deikti dpaidi;
} typos_komboy;

void Tree_dimiourgia(typos_deikti *tree)
{     
   *tree=NULL;
}
int Tree_keno(typos_deikti tree)
{   
   return (tree==NULL);
}
int TStree_mikrotero(TStoixeioyTree s1, TStoixeioyTree s2)
{
   if( strcmp(s1.word,s2.word) >0 )
          return 1;
   else
          return 0;      
}

int TStree_megalytero( TStoixeioyTree s1, TStoixeioyTree s2)
{
   if( strcmp(s1.word,s2.word) <0 )
           return 1;
   else
          return 0;
}

void TStree_setValue (TStoixeioyTree *target,TStoixeioyTree source)
{   
     strcpy(target->word,source.word);
}

void Tree_eisagogi(typos_deikti *tree, TStoixeioyTree stoixeio, int *error)
{
   if(Tree_keno(*tree))
   { *tree=malloc(sizeof(typos_komboy));
        if(*tree==NULL)
      {   *error=1;
         return;
      }
      TStree_setValue(&((*tree)->dedomena), stoixeio);
      (*tree)->apaidi=NULL;
      (*tree)->dpaidi=NULL;
   }
   else if(TStree_mikrotero(stoixeio, (*tree)->dedomena))
      Tree_eisagogi(&((*tree)->apaidi), stoixeio, error);
   else if(TStree_megalytero(stoixeio, (*tree)->dedomena))
      Tree_eisagogi(&((*tree)->dpaidi), stoixeio, error);
   else
      *error=1;
}

int search(typos_komboy *tree,char *word)
{
   if (tree==NULL)
             return 0;
 
   if (!strcmp(tree->dedomena.word,word))
             return 1;

   if (strcmp(tree->dedomena.word,word)>0) return search(tree->apaidi,word);
            return search(tree->dpaidi,word);
}

int main(void){

   typos_deikti tree;

   Tree_dimiourgia(&tree);

   TStoixeioyTree s;

   char t[256];

   FILE *file1,*f2;

   int i=0,error=0,r=0,j=0,k=0;

      if ((file1=fopen("file1.txt","r"))==NULL)
      {
           printf("Unable to open file1.txt\n");
           getchar();
           return 1;
      }

     if((f2=fopen("file2.txt","r"))==NULL)
     {
           printf("Unable to open data2.txt\n");
           getchar();
          return 0;
     }

       while (fscanf(file1,"%s",s)!=EOF)
       {
             Tree_eisagogi(&tree,s,&error);
                    i++;
        }

       while(fscanf(f2,"%s",t)!=EOF)
       {
             if(search(tree,t))
            {
                 r++;
             printf("%s found\n",t);
           }
              else
           {
            j++;
            printf("%s not found\n",t);
          }
            k++;
      }

   printf("%d items was stored in tree\n",i);

   printf("%d found %d not found %d searched\n",r,j,k);

getchar();
return 0;
}


το προβλημα ειναι οτι για καποιο λογο δεν μου αποθηκευεται τιποτα στο tree πιστευω οτι καλο λαθος την Tree_eisagogi(&tree,s,&error);..οποια βοηθεια εχετε ευπροσδεκτη! ευχαριστω εκ των προτερων

Υ.Γ:Μην αναρωτιεστε για τα structs ετσι ειναι απο την ασκηση δεν μπορω να τα αλλαξω
Τελευταία επεξεργασία από ertyuiopos και 23 Μάιος 2013, 12:33, έχει επεξεργασθεί 6 φορά/ες συνολικά
ertyuiopos
babeTUX
babeTUX
 
Δημοσιεύσεις: 11
Εγγραφή: 22 Μάιος 2013, 20:19
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό Ilias95 » 22 Μάιος 2013, 21:06

Βήμα 1.
Φτιάξε την στοίχιση σου. Ο κώδικας έτσι όπως είναι δεν διαβάζεται.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό ertyuiopos » 22 Μάιος 2013, 21:10

Ilias95 έγραψε:Βήμα 1.
Φτιάξε την στοίχιση σου. Ο κώδικας έτσι όπως είναι δεν διαβάζεται.


τι εννοεις? τι παραπανω να κανω?
ertyuiopos
babeTUX
babeTUX
 
Δημοσιεύσεις: 11
Εγγραφή: 22 Μάιος 2013, 20:19
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό Ilias95 » 22 Μάιος 2013, 21:16

Πχ. το:
Κώδικας: Επιλογή όλων
int search(typos_komboy *tree,char *word)
{
if (tree==NULL) return 0;
if (!strcmp(tree->dedomena.word,word)) return 1;
if (strcmp(tree->dedomena.word,word)>0) return search(tree->apaidi,word);
return search(tree->dpaidi,word);
}


Πρέπει να γίνει:
Κώδικας: Επιλογή όλων
int search(typos_komboy *tree,char *word)
{
    if (tree==NULL)
        return 0;
    if (!strcmp(tree->dedomena.word,word))
        return 1;
    if (strcmp(tree->dedomena.word,word)>0)
        return search(tree->apaidi,word);
    return search(tree->dpaidi,word);
}

Αντίστοιχα όλος ο υπόλοιπος κώδικας.
Κάνε τις διορθώσεις και επεξεργάσου την αρχική σου δημοσίευση.
Στην main() σου δεν υπάρχει στοίχιση πουθενά!
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό ertyuiopos » 22 Μάιος 2013, 21:29

Ilias95 έγραψε:Πχ. το:
Κώδικας: Επιλογή όλων
int search(typos_komboy *tree,char *word)
{
if (tree==NULL) return 0;
if (!strcmp(tree->dedomena.word,word)) return 1;
if (strcmp(tree->dedomena.word,word)>0) return search(tree->apaidi,word);
return search(tree->dpaidi,word);
}


Πρέπει να γίνει:
Κώδικας: Επιλογή όλων
int search(typos_komboy *tree,char *word)
{
    if (tree==NULL)
        return 0;
    if (!strcmp(tree->dedomena.word,word))
        return 1;
    if (strcmp(tree->dedomena.word,word)>0)
        return search(tree->apaidi,word);
    return search(tree->dpaidi,word);
}

Αντίστοιχα όλος ο υπόλοιπος κώδικας.
Κάνε τις διορθώσεις και επεξεργάσου την αρχική σου δημοσίευση.
Στην main() σου δεν υπάρχει στοίχιση πουθενά!
ελπιζω να βοηθεισα τωρα :)
ertyuiopos
babeTUX
babeTUX
 
Δημοσιεύσεις: 11
Εγγραφή: 22 Μάιος 2013, 20:19
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό Ilias95 » 22 Μάιος 2013, 21:46

Εξακολουθεί να μην είναι σωστά στοιχισμένος.
Κώδικας: Επιλογή όλων
int main(void){

      typos_deikti tree;

     Tree_dimiourgia(&tree);

   TStoixeioyTree s;

  char t[256];
  FILE *file1,*f2;
  int i=0,error=0,r=0,j=0,k=0;

if ((file1=fopen("file1.txt","r"))==NULL)
{
    printf("Unable to open file1.txt\n");
    getchar();
    return 1;
}
...
}

Το παραπάνω κομμάτι ας πούμε πρέπει να είναι κάπως έτσι:
Κώδικας: Επιλογή όλων
int main(void){

    typos_deikti tree;

    Tree_dimiourgia(&tree);

    TStoixeioyTree s;

    char t[256];
    FILE *file1,*f2;
    int i=0,error=0,r=0,j=0,k=0;

    if ((file1=fopen("file1.txt","r"))==NULL)
    {
        printf("Unable to open file1.txt\n");
        getchar();
        return 1;
    }
...
}

Και πολλά άλλα κομμάτια.

Όχι τίποτα άλλο, αλλά όσοι έχουν την διάθεση και την όρεξη να βοηθήσουν βλέποντας τον κώδικα έτσι κατά πάσα πιθανότητα δεν θα μπουν καν στον κόπο να προσπαθήσουν να τον διαβάσουν.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό ertyuiopos » 22 Μάιος 2013, 22:03

Ilias95 έγραψε:Εξακολουθεί να μην είναι σωστά στοιχισμένος.
Κώδικας: Επιλογή όλων
int main(void){

      typos_deikti tree;

     Tree_dimiourgia(&tree);

   TStoixeioyTree s;

  char t[256];
  FILE *file1,*f2;
  int i=0,error=0,r=0,j=0,k=0;

if ((file1=fopen("file1.txt","r"))==NULL)
{
    printf("Unable to open file1.txt\n");
    getchar();
    return 1;
}
...
}

Το παραπάνω κομμάτι ας πούμε πρέπει να είναι κάπως έτσι:
Κώδικας: Επιλογή όλων
int main(void){

    typos_deikti tree;

    Tree_dimiourgia(&tree);

    TStoixeioyTree s;

    char t[256];
    FILE *file1,*f2;
    int i=0,error=0,r=0,j=0,k=0;

    if ((file1=fopen("file1.txt","r"))==NULL)
    {
        printf("Unable to open file1.txt\n");
        getchar();
        return 1;
    }
...
}

Και πολλά άλλα κομμάτια.

Όχι τίποτα άλλο, αλλά όσοι έχουν την διάθεση και την όρεξη να βοηθήσουν βλέποντας τον κώδικα έτσι κατά πάσα πιθανότητα δεν θα μπουν καν στον κόπο να προσπαθήσουν να τον διαβάσουν.
Ευχαριστω! τον ξαναδιωρθωσα ελπιζω τωρα να ειναι μια χαρα :)
ertyuiopos
babeTUX
babeTUX
 
Δημοσιεύσεις: 11
Εγγραφή: 22 Μάιος 2013, 20:19
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό maenolis » 22 Μάιος 2013, 23:32

Κάνε την μικρότερο σαν την μεγαλύτερο γιατί έχεις κάνει λάθος στην strcmp.(γραμμή 27)
Δίνεις s(δέντρο) αντί για char* στην γραμμή 106 στην fscanf.
Επίσης στην 108 δίνεις char* στην εισαγωγή ενώ περιμένει TsStoixeiouTree.
Άλλο που κάνεις διαβάζεις 256 χαρακτήρες και πάς να τους βάλεις μέσα σε 20 όπως το κάνεις.
Επίσης όπως υλοποιείς την Tree_eisagogi είναι void και όχι typos_komvou.
1 Γνώσεις → Linux: Αρχάριος ┃ Προγραμματισμός: c,c++,sql,html,css ┃ Αγγλικά: Μέτριος
2 Λειτουργικό →Dual boot Ubuntu 12.04 64-bit (en_US.UTF-8) & Windows 7 Professional 64-bit
3 Προδιαγραφές → Intel® Core™ i3-2330M CPU @ 2.20GHz × 4 ‖ RAM 7.7 Gb
4 Κάρτες γραφικών: Intel® HD3000
5 Σκληρός Δίσκος: → OCZ Vertex4 Sata III 128Gb
Άβαταρ μέλους
maenolis
punkTUX
punkTUX
 
Δημοσιεύσεις: 261
Εγγραφή: 12 Μάιος 2011, 09:56
Τοποθεσία: Ν.Κόσμος
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό konnn » 23 Μάιος 2013, 00:10

Είναι καλύτερα να χρησιμοποιούμε το z_code tag για γλώσσες προγραμματισμού.

1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Βοηθεια για C

Δημοσίευσηαπό ertyuiopos » 23 Μάιος 2013, 01:14

maenolis έγραψε:Κάνε την μικρότερο σαν την μεγαλύτερο γιατί έχεις κάνει λάθος στην strcmp.(γραμμή 27)
Δίνεις s(δέντρο) αντί για char* στην γραμμή 106 στην fscanf.
Επίσης στην 108 δίνεις char* στην εισαγωγή ενώ περιμένει TsStoixeiouTree.
Άλλο που κάνεις διαβάζεις 256 χαρακτήρες και πάς να τους βάλεις μέσα σε 20 όπως το κάνεις.
Επίσης όπως υλοποιείς την Tree_eisagogi είναι void και όχι typos_komvou.


Τα διορθωσα ολα εκτος απο καποιου που δεν καταλαβα οπως αυτο στην 106 και στην 108 που λες...Πως θα το κανω? Πως θα δωσω TSstoixeioytree στην eisagwgi..εχω δηλωσει το s TSstoixeioytree ετσι TSstoixeioytree s;... και πως θα κανω στην fscanf να μην δινει δεντρο?


!

Μήνυμα συντονισμού πρός τον/την ertyuiopos

Σε παρακαλούμε να διαβάσεις τις οδηγίες προς νεοεισερχόμενους προσεκτικά. Όλες οι δημοσιεύσεις πρέπει να είναι σε λιτά πεζά ελληνικά, δηλ. όχι greeklish (εκτός αν δεν λειτουργούν τα ελληνικά), όχι κεφαλαία (φαίνεται ότι φωνάζεις), όχι ξένη γλώσσα (εκτός αν υπάρχει ανάγκη), όχι χωρίς λόγο πολλά χρώματα, bold, κλπ. Για αυτούς τους λόγους, κάνε τις απαραίτητες αλλαγές στην δημοσίευση σου.
η
Τελευταία επεξεργασία από konnn και 23 Μάιος 2013, 01:21, έχει επεξεργασθεί 2 φορά/ες συνολικά
Αιτία: Ενημέρωση.
ertyuiopos
babeTUX
babeTUX
 
Δημοσιεύσεις: 11
Εγγραφή: 22 Μάιος 2013, 20:19
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι