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

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

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

  • 0
gms20

provlhma me c++

Ερώτηση

geia sas paidia!

8a h8ela th voh8eia sas!

>Θεματολογία: Λίστες -Στοίβες

ΜΕΡΟΣ 1
α) Υλοποιήστε τη δομή απλά συνδεδεμένης λίστας.
β) Υλοποιήστε τη δομή στοίβας χρησιμοποιώντας απλά συνδεδεμένη λίστα.
γ) Για να ελέγξετε τη λειτουργία της στοίβας τρέξτε την εφαρμογή της μετατροπής δεκαδικού σε δυαδικό με την καινούργια υλοποίηση της στοίβας.

ΜΕΡΟΣ 2
Φτιάξετε την ακόλουθη εφαρμογή. Δημιουργήστε σε αρχείο 1000 Φοιτητές(ΑΜ, όνομα, επμο, έτος_εγγραφής). Τα ΑΜ θα είναι διαδοχικά (1, 2, 3, κλπ.), το όνομα και το επμο θα είναι random char[10] και το έτος random από 1990-2007. Δημιουργήστε σε αρχείο 3000 εγγραφές Τηλνα(ΑΜ, αριθμός_τηλ) και βάλτε κάθε φοιτητή να έχει 3 τηλέφωνα (τυχαίοι int[10]). Φορτώστε τους φοιτητές και τα τηλνα σε δύο ξεχωριστές απλά συνδεδεμένες λίστες. Απαντήστε στα ακόλουθα ερωτήματα.
- Σβήστε από τις δομές τις εγγραφές των φοιτητών και τηλ/νων που αντιστοιχούν σε ΑΜ που είναι πολλαπλάσια του 10. 
- Βρες τα τηλνα του φοιτητή με επμο=..(κάποιο επμο που υπάρχει και κάποιο που δεν υπάρχει)
- Βρες τα τηλνα των φοιτητών με έτος εγγραφής 2006.  

Σημείωση:
Στα παραδοτέα στείλτε και τα αρχεία των φοιτητών και τηλ/νων.

auth einai mia askhsh pou mas exei dw8ei.to provlhma einai oti gia thn ulopoihsh listas,stoivas kai ouras,mas exoun dw8ei mono se algori8mous!mporei kapoios na mou steilei ton kwdika gia na tis ulopoihsw sthn c++?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

8 απαντήσεις σε αυτή την ερώτηση

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

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

 

Αν σου στείλει ο άλλος τον κώδικα δεν είναι υλοποίηση, αντιγραφή είναι.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
paidia kai egw exw thn idia askhsh kai exw kai egw kapoia provlhmata!

mporeite na ri3ete mia matia?

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

struct node {
int val;
struct node *next;
};

struct list {
struct node *head;
int elements;
};

struct stack {
struct list *L;
int elements;
};

int insertAtHead(struct list *L, int x){
struct node *cur;
cur=(struct node*) malloc(sizeof(struct node));
if (cur==NULL) return 0;
cur->val=x;
cur->next=L->head; 
L->head=cur;
L->elements++;
return 1;	
}

void initList(struct list *L ){
L->head=NULL;
L->elements=0;
}

void displayList(struct list *L){
struct node *cur;
cur=L->head;
while (cur!=NULL){
	printf("%d ", cur->val);
	cur=cur->next;
}
}

int deleteFromHead(struct list *L,int *x){
struct node *cur;
if(L->head==NULL) return 0;
*x=L->head->val;
cur=L->head;
L->head=L->head->next;
free(cur);
L->elements--;
return 1;
}

int push(struct stack *S, int x){
if (insertAtHead(S->L, x)) {
	S->elements++;
	return 1;
}
else {
	printf("Overflow");
	return 0;
}
}

int pop(struct stack *S, int *x){
if (deleteFromHead(S->L, x)) {
	S->elements--;
	return 1;
}
else{
	printf("Underflow");
	return 0;
}
}
void initStack(struct stack *S){
S->L = (struct list*) malloc(sizeof(struct list));
initList(S->L);
S->elements=0;
}
void displayStack(struct stack *S){
displayList(S->L);
}


void main(){
/*
struct list L;
int x;
initList(&L);
insertAtHead(&L, 1);
insertAtHead(&L, 2);
insertAtHead(&L, 3);
insertAtHead(&L, 4);
insertAtHead(&L, 5);
displayList(&L);
deleteFromHead(&L, &x);
printf("\n%d\n", x);
deleteFromHead(&L, &x);
printf("\n%d\n", x);
displayList(&L);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
displayList(&L);
*/

int x;
struct stack S;
initStack(&S);
push(&S, 1);
push(&S, 2);
push(&S, 3);
push(&S, 4);
displayStack(&S);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
displayStack(&S);
}

bokarinho mporeis na me voh8hseis?

 

Όπα εσένα δεν σε είδα, το θέμα είναι ότι γράφεις σε C και όχι σε C++, αν όντως έχεις την ίδια άσκηση δεν θα πιάσεις καμία μονάδα γιατί είναι άλλη η έννοια του αντικειμενοστραφούς προγραμματισμού. Τώρα όσον αφορά την άσκηση σου αν και της λείπουν πολλά typedef που θα σε βοηθούσαν απίστευτο θα την δω και θα σου πω αργότερα γιατί τώρα κάνω και την πτυχιακή μου.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

paidia kai egw exw thn idia askhsh kai exw kai egw kapoia provlhmata!

mporeite na ri3ete mia matia?

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

struct node {
int val;
struct node *next;
};

struct list {
struct node *head;
int elements;
};

struct stack {
struct list *L;
int elements;
};

int insertAtHead(struct list *L, int x){
struct node *cur;
cur=(struct node*) malloc(sizeof(struct node));
if (cur==NULL) return 0;
cur->val=x;
cur->next=L->head; 
L->head=cur;
L->elements++;
return 1;	
}

void initList(struct list *L ){
L->head=NULL;
L->elements=0;
}

void displayList(struct list *L){
struct node *cur;
cur=L->head;
while (cur!=NULL){
	printf("%d ", cur->val);
	cur=cur->next;
}
}

int deleteFromHead(struct list *L,int *x){
struct node *cur;
if(L->head==NULL) return 0;
*x=L->head->val;
cur=L->head;
L->head=L->head->next;
free(cur);
L->elements--;
return 1;
}

int push(struct stack *S, int x){
if (insertAtHead(S->L, x)) {
	S->elements++;
	return 1;
}
else {
	printf("Overflow");
	return 0;
}
}

int pop(struct stack *S, int *x){
if (deleteFromHead(S->L, x)) {
	S->elements--;
	return 1;
}
else{
	printf("Underflow");
	return 0;
}
}
void initStack(struct stack *S){
S->L = (struct list*) malloc(sizeof(struct list));
initList(S->L);
S->elements=0;
}
void displayStack(struct stack *S){
displayList(S->L);
}


void main(){
/*
struct list L;
int x;
initList(&L);
insertAtHead(&L, 1);
insertAtHead(&L, 2);
insertAtHead(&L, 3);
insertAtHead(&L, 4);
insertAtHead(&L, 5);
displayList(&L);
deleteFromHead(&L, &x);
printf("\n%d\n", x);
deleteFromHead(&L, &x);
printf("\n%d\n", x);
displayList(&L);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
deleteFromHead(&L, &x);
displayList(&L);
*/

int x;
struct stack S;
initStack(&S);
push(&S, 1);
push(&S, 2);
push(&S, 3);
push(&S, 4);
displayStack(&S);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
printf("\n%d\n", x);
pop(&S,&x);
displayStack(&S);
}

bokarinho mporeis na me voh8hseis?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

ΠΑΡΑΚΑΛΟΥΜΕ ΔΕΙΞΤΕ ΠΡΟΣΟΧΗ ΧΡΕΙΑΖΟΜΑΣΤΕ ΤΗΝ ΒΟΗΘΕΙΑ ΣΑΣ , ΣΧΕΤΙΚΑ ΜΕ ΤΗΝ ΥΛΟΠΟΙΗΣΗ ΜΙΑΣ ΣΤΟΙΒΑΣ(ΜΕ ΔΥΝΑΜΙΚΗ ΔΕΣΜΕΥΣΗ ΜΝΗΜΗΣ ) : ΟΠΟΥ ΑΡΧΙΚΑ ΤΗΝ ΚΑΤΑΣΚΕΥΑΖΟΥΜΕ , ΜΕΤΑ PUSH ,ΜΕΤΑ POP,ΜΕΤΑ ΑΝΑΓΝΩΣΗ ΤΗΣ ΚΟΡΥΦΗΣ ΚΑΙ ΚΑΤΑΣΤΡΟΦΗ ΤΗΣ STACK.ΟΛΑ ΑΥΤΑ ΣΕ C++

ΕΥΧΑΡΙΣΤΟΥΜΕ!!!!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

ψάξε στο google για single linked list (δομή απλά συνδεδεμένης λίστας) και για stack struct with single linked list (δομή στοίβας χρησιμοποιώντας απλά συνδεδεμένη λίστα), και θα βρείς πολλά παραδείγματα.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Θα δώσω ένα tip:

Πάντως το να φτιάξεις μία στοίβα από μία λίστα αρχικά υλοποίησε την λίστα σου με τους κόμβους που θέλεις να αποθηκεύει είτε δίνοντας τον τύπο τους κατευθείαν, είτε χρησιμοποιώντας templates πχ: template <class ItemType> και κατόπιν με βάση την κληρονομικότητα παρήγαγε την στοίβα σου,

πχ:

Σαν pop μπορείς να έχεις μία συνάρτηση που από την λίστα σου να αφαιρεί την ουρά, δηλαδή τον τελευταίο κόμβο κάθε φορά. Ανάλογα και για την push.

πχ:

 

Κώδικας γράφτηκε τώρα δεν είναι καν δοκιμασμένος....

 

Αν αποθηκεύεις ακεραίους λοιπόν:

 

>
int pop()
{
if(!isEmpty())
	return -1;
int retVal = back->data;
NODE *temp = back;
if(back->previous == NULL)
{
	back = NULL;
	front = NULL;
}
else
{
	back = back->previous;
	back->next = NULL;
}
	/* Free the tops element. */
	delete temp;
	/* Return the tops element. */
	return retVal;
}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ένα πράγμα που με προβλημάτισε με την απορία σου είναι η παραγωγή τυχαίων strings. Το παρακάτω κομμάτι κώδικα ίσως σε βοηθήσει στο να δημιουργήσεις το αρχείο σου που θα περιέχει την δομή σου με τα ονόματα των φοιτητών. Για να μην κάθεσαι λοιπόν να φτιάχνεις ένα τέτοιο αρχείο by hand ορίστε μία μικρή ρουτίνα που ευέλικτα δημιουργεί τυχαία strings. Ελπίζω να σε βοηθήσει για τον υπόλοιπο κώδικα σου.

 

>
//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma hdrstop

//---------------------------------------------------------------------------

/* Function to create a random string */

char *str_rand(char *str, int size)
{
static const char *alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned short int i = 0;
/* Get a random length. */
unsigned short int length = rand() % (size-1)+1;
/* Now fill the string with lenght less than size with letters. */
for(i = 0; i < length; i++)
	str[i] = alphabet[rand() % (strlen(alphabet)-1)];
/* Terminate and return it. */
str[i] = '\0';
return str;
}

#pragma argsused
int main(int argc, char* argv[])
{
int c;
char str[10] = "";
srand(time(0));
while(1)
{
	str_rand(str, 10);
	printf("%s\n", str);
	printf("Hit 's' to stop...\n");
	if((c = getchar()) == 's')
		break;

}
printf("Hit enter to continue....\n");
getchar();
return 0;
}
//---------------------------------------------------------------------------

 

Το πρόγραμμα είναι γραμμένο σε C και δοκιμασμένο στον TurboC++ Compiler της Borland, Windows XP Pro SP2 Greek.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...