1 Востаннє редагувалося Kiriago (28.04.2018 12:20:59)

Тема: Стек, need some help!!

Ситуація наступна: сказали нам вивчити самостійно дії з стеками, викладача дав нам наступний код як приклад, тільки вот, він не працює, підкажіть будь ласка в чому тут помилка, а ще якщо можна посилання на статтю пов'язану з даною темою(перелазив десятки статей і не знайшов якоїсь толкової).

[code=C++]
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "iostream"
#include "stdlib.h"
#include "conio.h"

struct MAN {
    char Surname[15];
};

struct {
    struct MAN M;
    struct STACK *next;
};

void sorting(struct STACK **head);
void add(struct STACK**head);
void іnput(struct MAN *w);
void display(struct STACK *wk);

using namespace std;

void main(void)
{
    struct STACK *head = NULL;
    while(1) {
        cout << "Operations: " << endl;
        cout << "a - Add" << endl << "d - Display" << endl << "s - sort" << endl;
        switch(getch()) {
            case 'a': case 'A': add(&head); break;
            case 'd': case 'D': display(head); break;
            case 's': case 'S': sorting(&head); break;
            default:cout << "Error" << endl << "Try again" << endl;
        }
        cout << "Press any key" << endl;
        getch();
    }
}

void іnput(MAN *w)
{
    cout << "Enter your surname: ";
    cin >> w->Surname;
}

void display(STACK *h)
{
    cout << "Information:" << endl;
    if(!h) {
        cout << "STACK is empty";
        return;
    }
    do {
        print(h); h = h->next;
    } while(h);
    return;
}

void sorting(STACK **head)
{
    struct STACK *cur;
    struct STACK *s;
    struct STACK *p;
    struct STACK *pr;
    if(!*head)
    {
        cout << " Stack is empty" << endl;
        return;
    }
    cur = *head;
    while(cur->next)
    {
        s = cur->next;
        pr = cur;
        while(s) {
            if(strcmp(cur->M.Surname, s->M.Surname) <= 0) {
                pr = s;
                s = s->next;
            }
            else {
                if(cur == *head) {
                    *head = s;
                    pr->next = s->next;
                    s->next = cur;
                }
                else {
                    p->next = s;
                    pr->next = s->next;
                    s->next = cur;
                }
                cur = s;
                s = pr->next;
            }
        }
        p = cur;
        cur = cur->next;
    }
    cout << "Sorting is over" << endl;
    return;
}

void add(STACK **head)
{
    struct STACK *tmp;
    struct MAN W;
    іnput(&W);
    tmp->M = W;
    tmp->next = (*head);
    (*head) = tmp;
    return;
}
[/code]

2

Re: Стек, need some help!!

Що ви розумієтете під "не працює" ?

Подякували: koala, leofun012

3

Re: Стек, need some help!!

в компіляторі видає понад 40 помилок звязані з вказівниками та з "->next"

4

Re: Стек, need some help!!

struct {
    struct MAN M;
    struct STACK *next;
};

Забули вказати ім'я структури.

Подякували: koala, leofun012

5

Re: Стек, need some help!!

P.Y. написав:

Забули вказати ім'я структури.

кількість помилок тільки зросла з додаванням імені(

6

Re: Стек, need some help!!

ви б могли показати текст помилок, це могло б допомогти нам зрозуміти, які саме там помилки, але це не обов'язково.

Подякували: koala1

7

Re: Стек, need some help!!

FakiNyan написав:

ви б могли показати текст помилок.

Post's attachments

2018-04-28 (2).png 113.2 kb, 91 downloads since 2018-04-28 

Подякували: FakiNyan1

8

Re: Стек, need some help!!

/

Post's attachments

2018-04-28 (1).png 112.75 kb, 92 downloads since 2018-04-28 

Подякували: FakiNyan1

9

Re: Стек, need some help!!

void display(struct STACK *wk);
...
void display(STACK *h)

Які відмінності в цих рядках ви бачите?

        print(h); h = h->next;

Взагалі два вирази в один рядок писати - то погано, але тут біда не в цьому. Де проголошена функція print?

Подякували: leofun012

10

Re: Стек, need some help!!

koala написав:
void display(struct STACK *wk);
...
void display(STACK *h)

Які відмінності в цих рядках ви бачите??

Ну відмінності в цих рядках в тому що різні вказіники, й що в першому рядку написано "struct";

koala написав:

Де проголошена функція print?

Вже побачив, що вона не проголошена:

struct STACK *print(struct STACK *wk) {
    cout << wk->M.Surname<<endl;
    return wk;
}

11

Re: Стек, need some help!!

Чекайте. Це взагалі яка мова програмування?

12

Re: Стек, need some help!!

Так с++...

13

Re: Стек, need some help!!

Тоді для початку

#include <cstdio>
#include <cstring>

і т.д.
А в

void display(struct STACK *wk);

слово struct не потрібне, і вам компілятор мав писати про це.