freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

υλοποιηση στοίβας σε c


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [4 Μηνύματα]      Bookmarks Tags: c Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
smurf2


Μέλος από: 03 Δεκ 2005
Μηνύματα: 6
Περιοχή: Athina&Patra
View users profile
ΜήνυμαΣτις: 09 Δεκ 2005 14:33    Θέμα: υλοποιηση στοίβας σε c
Περιγραφή θέματος: πείτε μου την γνώμη σας...
Απάντηση με παράθεση  Mark this post and the followings unread

Γεια σας...!Προσπαθώ να υλοποιήσω μία στοίβα σε C,αλλά δε γνωρίζω καλά τη γλώσσα και δεν ξέρω κατά πόσο η σκέψη μου είναι σωστή.Αν κάποιοιος θέλει και μπορεί να βοηθήσει ας μου πει μία γνώμη...
Παραθέτω τον κώδικά μου...


#include <stdio.h>
void push( float data);
void pop();
float top();
enum boolean { FALSE, TRUE};
boolean is_empty();
boolean answer = TRUE ;
float data;
float swros[50];
int head = -1 ;
main()
{
int arithmos ;
float data1;
printf (" Dwste ton arithmo tis praxis pou thelete \n");
printf ("1 gia is_empty()\n");
printf ("2 gia push(data)\n");
printf ("3 gia pop()\n");
printf ("4 gia top() \n");
scanf ("%d",&arithmos) ;
if (arithmos==1)
is_empty() ;
else if (arithmos==2)
{printf ("Dwste stoixeio gia to swro \n");
scanf ("%f",&data1);
push(data1);}
else if (arithmos==3)
pop();
else if (arithmos==4)
top();
else
printf ("Lathos arithmos \n");
}
boolean is_empty()
{
return answer ;
}
void push( float data)
{
swros[head] = data;
head = head+1;
}
void pop()
{ swros[head] = 0 ;
head = head -1 ;
}
float top()
{ return swros[head] ;}

[/code]
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 09 Δεκ 2005 18:16    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αρκετά καλή η προσπάθεια σου, και με μερικές βελτιώσεις θα δουλεύει ακόμα καλύτερα.

1) Το πρόγραμμα σου θα πρέπει να λειτουργεί μέχρι ο χρήστης να δώσει κάποια επιλογή για να τερματίσει, και να μην ζητάει μόνο μια επιλογή και μετά να τερματίζει μόνο του. Ετσι θα μπορέσεις και εσύ να το τεστάρεις καλύτερα.

2) Αν η στοίβα είναι άδεια και πας να κάνεις pop ή top (επιλογή 3 ή 4) δεν γίνεται έλεγχος αν η στοίβα είναι άδεια.

3) Αν κάνεις συνέχεια push (επιλογή 2) δεν γίνεται έλεγχος αν η στοίβα σου έχει γεμίσει.

Αν αφήσεις τα 2), 3) όπως έχουν θα έχεις εξασφαλισμένο memory corruption ή στην καλύτερη περίπτωση access violation.

4) Η μεταβλητή answer που επιστρέφει η is_empty() δεν ενημερώνεται μετά από κάθε push και pop ώστε να δείχνει την κατάσταση της στοίβας.

5) Αφού η αρχική τιμή της μεταβλητής head ξεκινάει με -1 (και έχοντας υπόψην ότι οι πίνακες στη C είναι 0 based - το πρώτο στοιχείο του πίνακα είναι το swros[0]) πρέπει στο push() πρώτα να αυξάνεις το head και μετά να καταχωρείς το στοιχείο.

6) Την μεταβλητή data που δηλώνεις στην αρχή (πρίν το swros[50]) δεν την χρησιμοποιείς πουθενά. Οπότε μπορείς να τη σβήσεις.

Ισως αντί να χρησιμοποιείς τα if ... else if ... else if ... δοκίμασε να χρησιμοποιήσεις την switch... case... ο κώδικας είναι πιό συμμαζεμένος.
π.χ.
κώδικας:
switch (arithmos)
{
case 1:
   is_empty();
   break;
case 2:
   printf ("Dwste stoixeio gia to swro \n");
   scanf ("%f",&data1);
   push(data1);
   break;
case 3:
   pop();
   break;
case 4:
   top();
   break;
default:
   printf ("Lathos arithmos \n");
   break;
}
smurf2


Μέλος από: 03 Δεκ 2005
Μηνύματα: 6
Περιοχή: Athina&Patra
View users profile
ΜήνυμαΣτις: 12 Δεκ 2005 01:03    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

eyxaristw poly gia ti voitheia!! tha ta koitaxw osa mou eipes...na sai kala!!
bitMan


Μέλος από: 03 Ιαν 2006
Μηνύματα: 10
Περιοχή: (Patra && Crete);
View users profile Visit posters website
ΜήνυμαΣτις: 03 Ιαν 2006 20:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

tha mporouses na xrhsimopoihseis ylopoihsh me domes anti gia statiko array...
Etsi me thn katallhlh deiktodothsh apo to ena stoixeio sto allo tha mporeis na prostheseis osa stoixeia thleis sto swro xwris na se periorizei to megethos tou pinaka...

_________________
--<>----><----<>----<>-----<>--
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [4 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++


Σχετικά θέματα
 Θέματα   Απ/σεις   Αποστολέας   Τελευταίο μήνυμα 
ενας κωδικας σε C που βγαζει μη αναμενομενο αποτεσμα 1 teresa92 13 Αυγ 2016 21:26
teresa92 Εμφάνιση τελευταίου μηνύματος
 
Τώρα είναι 23 Ιαν 2017 10:24 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos