Προς το περιεχόμενο

προβλημα C++


eleni1231983

Προτεινόμενες αναρτήσεις

Δημοσ.

λοιπόν και κάτι ακόμα....τελευταίο να μην σας πρήζω και εσάς με την ασχετοσύνη μου άλλο....

 

σε ένα περίπτερο ΥΠΑΡΧΕΙ μια στοίβα με 10 περιοδικά αυτοκίνητου.

περιμένουν 3 πελάτες στην ουρά για να αγοράσουν το περιοδικό. ο πρώτος παίρνει 2,ο δεύτερος 1,και ο τρίτος 2,υλοποιήστε την στοίβα....

 

είναι άσκηση και έχω κολλισει δεν μπορώ να πω ότι δεν προσπάθησα αλλά αυτά μπόρεσα να βγάλω από τις σημειώσεις που έχω.

 

>
#include <iostream.h>
Int stack[10];
Int top;
For (int i=0;i<=9;i++)
{
Cin>> stack [i];
}
top=9; 
For (int i=1;i<=5;i++)
{
If (top==-1)
{
Cout<<“h stoiba einai αδεια”;
}
Else
{
top=top-1;
}
}
Cout<<stack[top];
}

Δημοσ.

Ρίξε μια ματιά εδώ και εδώ για να καταλάβεις τη χρησιμότητα και τη λειτουργία μιας στοίβας. Εάν αντιμετωπίσεις περαιτέρω προβλήματα, εδώ είμαστε.

 

Επιπλέον μπορείς να χρησιμοποιήσεις: [ code]κώδικας[/code] για να είναι πιο ευανάγνωστος ο κώδικάς σου.

Δημοσ.

ευχαριστώ πάρα πολύ τους συνδέσμους άλλα δεν ξέρω καλά αγγλικά....νομίζω οτι αυτο που δεν μπορώ να κάνω είναι π΄ως θα βάλω 3 πελάτες να περιμένουν στην ουρά και πώς να αφαιρώ τα περιοδικά που αγοράζει ο καθένας....

Δημοσ.

ευχαριστώ πάρα πολύ τους συνδέσμους άλλα δεν ξέρω καλά αγγλικά....νομίζω οτι αυτο που δεν μπορώ να κάνω είναι π΄ως θα βάλω 3 πελάτες να περιμένουν στην ουρά και πώς να αφαιρώ τα περιοδικά που αγοράζει ο καθένας....

Δημοσ.

Ρίξε μια ματιά εδώ για τη στοίβα.

 

Ουσιαστικά πρέπει να υλοποιήσεις τις 2 λειτουργίες της, την ώθηση(push) και την απώθηση(pop). Πιστεύω ότι εφόσον καταλάβεις πως λειτουργεί μια στοίβα δε θα έχεις ιδιαίτερο πρόβλημα στην υλοποίησή της.

 

To site που παρέθεσα πιο πάνω περιέχει μία έτοιμη υλοποίηση σε κώδικα :-) , την οποία μπορείς να καταλάβεις!

 

Τέλος μη μπερδεύεσαι με την εκφώνηση. Το λέει ξεκάθαρα νομίζω, υλοποιήστε τη στοίβα.

Δημοσ.

Ρίξε μια ματιά εδώ για τη στοίβα.

 

Ουσιαστικά πρέπει να υλοποιήσεις τις 2 λειτουργίες της, την ώθηση(push) και την απώθηση(pop). Πιστεύω ότι εφόσον καταλάβεις πως λειτουργεί μια στοίβα δε θα έχεις ιδιαίτερο πρόβλημα στην υλοποίησή της.

 

To site που παρέθεσα πιο πάνω περιέχει μία έτοιμη υλοποίηση σε κώδικα :-) , την οποία μπορείς να καταλάβεις!

 

Τέλος μη μπερδεύεσαι με την εκφώνηση. Το λέει ξεκάθαρα νομίζω, υλοποιήστε τη στοίβα.

Δημοσ.

πρέπει να κάνω και ουρά..??σωστά....??

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

#define SIZE 50

void push(int i);
int pop(void);

int  *tos, *p1, stack[size];

int main(void)
{
 int value;

 tos = stack; /* tos επισημαίνει την κορυφή της στοίβας */
 p1 = stack; /* αρχικοποιήση p1 */

 do {
   printf("Enter value: ");
   scanf("%d", &value);

   if(value != 0) push(value);
   else printf("value on top is %d\n", pop());

 } while(value != -1);

 return 0;
}

void push(int i)
{
 p1++;
 if(p1 == (tos+SIZE)) {
   printf("Υπερχείλιση στοίβας.\n");
   exit(1);
 }
 *p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

 

αυτός είναι ο κώδικας που είχε το site που προσθέτει και πού αφαιρεί από την λίστα...? Underflow τι σημαίνει?

να πώ τη ΚΑΤΑΛΑΒΑ εγώ από τον κώδικα..... εχουμε ένα όριο στην λίστα μας...έαν η τιμή που θα δώσουμε υπερβεί αυτην την τιμή να πετάει μήνυμα Υπερχείλιση στοίβας έαν η τιμή είναι μέσα στα πλαίσια τις στοίβας...αυτον τόν κώδικα δέν κατάλαβα τι κάνει...

>
*p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

Δημοσ.

πρέπει να κάνω και ουρά..??σωστά....??

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

#define SIZE 50

void push(int i);
int pop(void);

int  *tos, *p1, stack[size];

int main(void)
{
 int value;

 tos = stack; /* tos επισημαίνει την κορυφή της στοίβας */
 p1 = stack; /* αρχικοποιήση p1 */

 do {
   printf("Enter value: ");
   scanf("%d", &value);

   if(value != 0) push(value);
   else printf("value on top is %d\n", pop());

 } while(value != -1);

 return 0;
}

void push(int i)
{
 p1++;
 if(p1 == (tos+SIZE)) {
   printf("Υπερχείλιση στοίβας.\n");
   exit(1);
 }
 *p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

 

αυτός είναι ο κώδικας που είχε το site που προσθέτει και πού αφαιρεί από την λίστα...? Underflow τι σημαίνει?

να πώ τη ΚΑΤΑΛΑΒΑ εγώ από τον κώδικα..... εχουμε ένα όριο στην λίστα μας...έαν η τιμή που θα δώσουμε υπερβεί αυτην την τιμή να πετάει μήνυμα Υπερχείλιση στοίβας έαν η τιμή είναι μέσα στα πλαίσια τις στοίβας...αυτον τόν κώδικα δέν κατάλαβα τι κάνει...

>
*p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

Δημοσ.
Underflow τι σημαίνει?

 

Σημαίνει ότι πας να βγάλεις στοιχεία που δεν υπάρχουν, ουσιαστικά η στοίβα άδειασε.

 

πρέπει να κάνω και ουρά..??σωστά....??

 

Γι'αυτό λέω μην μπερδεύεσαι. Μην παίρνεις μετρητής τη λέξη ουρά. Ανήκει στην περιγραφή του προβλήματος. Στοίβα θες να φτιάξεις εσύ.

 

Η ουρά είναι μια άλλη δομή δεδομένων.

 

Καλύτερα να αλλάξεις τον τίτλο το θέματος σου σε κάτι που να περιγράφει το πρόβλημά σου.

Δημοσ.
Underflow τι σημαίνει?

 

Σημαίνει ότι πας να βγάλεις στοιχεία που δεν υπάρχουν, ουσιαστικά η στοίβα άδειασε.

 

πρέπει να κάνω και ουρά..??σωστά....??

 

Γι'αυτό λέω μην μπερδεύεσαι. Μην παίρνεις μετρητής τη λέξη ουρά. Ανήκει στην περιγραφή του προβλήματος. Στοίβα θες να φτιάξεις εσύ.

 

Η ουρά είναι μια άλλη δομή δεδομένων.

 

Καλύτερα να αλλάξεις τον τίτλο το θέματος σου σε κάτι που να περιγράφει το πρόβλημά σου.

Δημοσ.
πρέπει να κάνω και ουρά..??σωστά....??

 

Underflow τι σημαίνει?

να πώ τη ΚΑΤΑΛΑΒΑ εγώ από τον κώδικα..... εχουμε ένα όριο στην λίστα μας...έαν η τιμή που θα δώσουμε υπερβεί αυτην την τιμή να πετάει μήνυμα Υπερχείλιση στοίβας έαν η τιμή είναι μέσα στα πλαίσια τις στοίβας...αυτον τόν κώδικα δέν κατάλαβα τι κάνει...

>
*p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

 

To overflow σημαίνει υπερχείληση, δηλ. ότι το stack δεν μπορεί να δεχτεί περισσότερα στοιχεία διότι έχει γεμίσει.

Το underflow σημαίνει υποχείληση, δηλ. ότι από το stack δεν μπορούν να αφαιρεθούν στοιχεία διότι είναι άδειο και δεν περιέχει κανένα.

Ο κώδικας αυτός ελέγχει αν το τρέχον στοιχείο tos (=top of stack) είναι το p1 δηλ. το πρώτο οπότε δεν μπορεί να αφαιρεθεί και παράγει μήνυμα λάθους.

 

Και μην μπερδεύεις τους όρους. Άλλο πράγμα είναι η list (=λίστα), άλλο το stack (=σωρός) και άλλο η ουρά (=que).

 

Στο stack αποθηκεύεις στοιχεία και μετά τα αφαιρείς με την αντίστροφη σειρά.

Αυτό που εισάγεται πρώτο, αφαιρείται τελευταίο (LIFO : last in - first out).

Kαι το τελευταίο αφαιρείται πρώτο. Δηλ. η έξοδος γίνεται ανάποδα από την είσοδό τους.

Όπως όταν πλένεις τα πιάτα :

- ξεπλένεις το 1ο και το ακουμπάς στον πάγκο.

- ξεπλένεις το 2ο και το ακουμπάς στο πρώτο.

- ξεπλένεις το 3ο και το ακουμπάς πάνω στο δεύτερο...όμοια μέχρι το τελευταίο.

Μετά, για να τα σκουπίσεις, προφανώς πιάνεις αυτό που είναι πάνω πάνω δηλ. το τελευταίο που έπλυνες.

Το σκουπίζεις και το βάζεις στο ντουλάπι.

Πιάνεις το προτελευταίο...όμοια...μέχρι το πρώτο.

 

Στην ουρά τα στοιχεία αποθηκεύονται και αφαιρούνται με την ίδια προτεραιότητα.

Όπως κατά την εξυπηρέτηση σε ένα ταμείο τράπεζας. Όποιος μπει πρώτος εξυπηρετείται πρώτος κλπ. σύμφωνα με την σειρά που έχει (FIFO: first in - first out).

 

Η list είναι απλώς ένας τρόπος αποθήκευσης των δεδομένων που βασίζεται σε χρήση δεικτών μνήμης (pointers) για να προσπελαύνονται οι θέσεις μνήμης όπου αποθηκεύονται και ανακτώνται τα στοιχεία.

Σε μια λίστα δεν μπορεί να γίνει άμεση προσπέλαση των στοιχείων της. Πρέπει να ξεκινήσεις από το πρώτο και ακολουθώντας τους δείκτες που συνδέουν τα στοιχεία της να φτάσεις σε αυτό που θέλεις.

Αντίθετα, στον πίνακα μπορείς να βρεις ένα στοιχείο του άμεσα χρησιμοποιώντας τους δείκτες θέσης (indexes) του στοιχείου στον πίνακα.

Eνα stack και μια ουρά μπορούν να φτιαχτούν είτε με πίνακα είτε με λίστα.

Εκείνο που τα διαφοροποιεί είναι η προτεραιότητα που έχουν τα στοιχεία κατά την εξαγωγή τους (LIFO ή FIFO αντίστοιχα) και όχι ο τρόπος (list ή πίνακας) που χρησιμοποιείς για την αποθήκευση.

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

 

Τέλος, γιατί δεν κοιτάς λίγο και σε καμιά βιβλιοθήκη ;

Αυτά είναι πράγματα που τα έχουν όλα τα αντίστοιχα βιβλία πολύ αναλυτικά, να διαβάσεις πρέπει...

Δημοσ.
πρέπει να κάνω και ουρά..??σωστά....??

 

Underflow τι σημαίνει?

να πώ τη ΚΑΤΑΛΑΒΑ εγώ από τον κώδικα..... εχουμε ένα όριο στην λίστα μας...έαν η τιμή που θα δώσουμε υπερβεί αυτην την τιμή να πετάει μήνυμα Υπερχείλιση στοίβας έαν η τιμή είναι μέσα στα πλαίσια τις στοίβας...αυτον τόν κώδικα δέν κατάλαβα τι κάνει...

>
*p1 = i;
}

int pop(void)
{
 if(p1 == tos) {
   printf("Stack Underflow.\n");
   exit(1);
 }
 p1--;
 return *(p1+1);
}

 

To overflow σημαίνει υπερχείληση, δηλ. ότι το stack δεν μπορεί να δεχτεί περισσότερα στοιχεία διότι έχει γεμίσει.

Το underflow σημαίνει υποχείληση, δηλ. ότι από το stack δεν μπορούν να αφαιρεθούν στοιχεία διότι είναι άδειο και δεν περιέχει κανένα.

Ο κώδικας αυτός ελέγχει αν το τρέχον στοιχείο tos (=top of stack) είναι το p1 δηλ. το πρώτο οπότε δεν μπορεί να αφαιρεθεί και παράγει μήνυμα λάθους.

 

Και μην μπερδεύεις τους όρους. Άλλο πράγμα είναι η list (=λίστα), άλλο το stack (=σωρός) και άλλο η ουρά (=que).

 

Στο stack αποθηκεύεις στοιχεία και μετά τα αφαιρείς με την αντίστροφη σειρά.

Αυτό που εισάγεται πρώτο, αφαιρείται τελευταίο (LIFO : last in - first out).

Kαι το τελευταίο αφαιρείται πρώτο. Δηλ. η έξοδος γίνεται ανάποδα από την είσοδό τους.

Όπως όταν πλένεις τα πιάτα :

- ξεπλένεις το 1ο και το ακουμπάς στον πάγκο.

- ξεπλένεις το 2ο και το ακουμπάς στο πρώτο.

- ξεπλένεις το 3ο και το ακουμπάς πάνω στο δεύτερο...όμοια μέχρι το τελευταίο.

Μετά, για να τα σκουπίσεις, προφανώς πιάνεις αυτό που είναι πάνω πάνω δηλ. το τελευταίο που έπλυνες.

Το σκουπίζεις και το βάζεις στο ντουλάπι.

Πιάνεις το προτελευταίο...όμοια...μέχρι το πρώτο.

 

Στην ουρά τα στοιχεία αποθηκεύονται και αφαιρούνται με την ίδια προτεραιότητα.

Όπως κατά την εξυπηρέτηση σε ένα ταμείο τράπεζας. Όποιος μπει πρώτος εξυπηρετείται πρώτος κλπ. σύμφωνα με την σειρά που έχει (FIFO: first in - first out).

 

Η list είναι απλώς ένας τρόπος αποθήκευσης των δεδομένων που βασίζεται σε χρήση δεικτών μνήμης (pointers) για να προσπελαύνονται οι θέσεις μνήμης όπου αποθηκεύονται και ανακτώνται τα στοιχεία.

Σε μια λίστα δεν μπορεί να γίνει άμεση προσπέλαση των στοιχείων της. Πρέπει να ξεκινήσεις από το πρώτο και ακολουθώντας τους δείκτες που συνδέουν τα στοιχεία της να φτάσεις σε αυτό που θέλεις.

Αντίθετα, στον πίνακα μπορείς να βρεις ένα στοιχείο του άμεσα χρησιμοποιώντας τους δείκτες θέσης (indexes) του στοιχείου στον πίνακα.

Eνα stack και μια ουρά μπορούν να φτιαχτούν είτε με πίνακα είτε με λίστα.

Εκείνο που τα διαφοροποιεί είναι η προτεραιότητα που έχουν τα στοιχεία κατά την εξαγωγή τους (LIFO ή FIFO αντίστοιχα) και όχι ο τρόπος (list ή πίνακας) που χρησιμοποιείς για την αποθήκευση.

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

 

Τέλος, γιατί δεν κοιτάς λίγο και σε καμιά βιβλιοθήκη ;

Αυτά είναι πράγματα που τα έχουν όλα τα αντίστοιχα βιβλία πολύ αναλυτικά, να διαβάσεις πρέπει...

Δημοσ.
Σημαίνει ότι πας να βγάλεις στοιχεία που δεν υπάρχουν, ουσιαστικά η στοίβα άδειασε.

 

 

 

Γι'αυτό λέω μην μπερδεύεσαι. Μην παίρνεις μετρητής τη λέξη ουρά. Ανήκει στην περιγραφή του προβλήματος. Στοίβα θες να φτιάξεις εσύ.

 

Η ουρά είναι μια άλλη δομή δεδομένων.

 

Καλύτερα να αλλάξεις τον τίτλο το θέματος σου σε κάτι που να περιγράφει το πρόβλημά σου.

 

τώρα πραγματικά μπερδεύτηκα είχα την εντίπωση οτι πρέπει να κάνω μια στοίβα με 10 περιοδικά π.χ int stack[10]; και μια ουρα με 3 πελατες int [A]={1,2,3} κάθε πελάτης θα τραβάει απο την λίστα 2,1,2 περιοδικά αντίστοιχα λογικά θα γινόταν με μία for και mia cin>>A οπου θα έπερνε την ποσότητα του πελάτη απο το πληκτρολόγιο....και θα εμφάνιζε στο τέλος την νέα στοίβα δηλ, 5! cout<<stack; τώρα χάθηκα δηλ δέν κάνω ουρά?δέν μπορείς να μου δώσεις κάτι σε κώδικα?για να αρχίσω..??

Δημοσ.
Σημαίνει ότι πας να βγάλεις στοιχεία που δεν υπάρχουν, ουσιαστικά η στοίβα άδειασε.

 

 

 

Γι'αυτό λέω μην μπερδεύεσαι. Μην παίρνεις μετρητής τη λέξη ουρά. Ανήκει στην περιγραφή του προβλήματος. Στοίβα θες να φτιάξεις εσύ.

 

Η ουρά είναι μια άλλη δομή δεδομένων.

 

Καλύτερα να αλλάξεις τον τίτλο το θέματος σου σε κάτι που να περιγράφει το πρόβλημά σου.

 

τώρα πραγματικά μπερδεύτηκα είχα την εντίπωση οτι πρέπει να κάνω μια στοίβα με 10 περιοδικά π.χ int stack[10]; και μια ουρα με 3 πελατες int [A]={1,2,3} κάθε πελάτης θα τραβάει απο την λίστα 2,1,2 περιοδικά αντίστοιχα λογικά θα γινόταν με μία for και mia cin>>A οπου θα έπερνε την ποσότητα του πελάτη απο το πληκτρολόγιο....και θα εμφάνιζε στο τέλος την νέα στοίβα δηλ, 5! cout<<stack; τώρα χάθηκα δηλ δέν κάνω ουρά?δέν μπορείς να μου δώσεις κάτι σε κώδικα?για να αρχίσω..??

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...