30/09/2018, 16:04

Dùng stack đổi cơ số từ hệ 10 ra hệ 2

#include<stdio.h>
#include<conio.h>
#include"stdlib.h"
struct node
{
    int info;
    struct node *next;

};
typedef struct node *Stacknode;
Stacknode S;
void StackLint(Stacknode *S)
{
    *S=NULL;
    return;

} // khai bao stack = dslk
int StackEmpty(Stacknode S)
{
    return (S==NULL);

} // kiem tra stack rong
void StackPush(Stacknode *S,int x)
{
    Stacknode p;
    p=(Stacknode)malloc(sizeof(struct node));
    p->info=x;
    p->next=*S;
    *S=p;
} // day 1 phan tu vao stack


void StackPop(Stacknode *S,int *x)
{
    Stacknode p;
    if(S!=NULL)
    {
        *x=(*S)->info;
        p=*S;
        *S=(*S)->next;
        free(p);

    }

} // lay 1 phan tu khoi stack

void doi_10_2(Stacknode *S, int *n)
{
    int du, thuong,x;
    Stacklint(S);
    printf("Nhap so he 10: ");
    scanf("%d",n);
    thuong=*n;
    while(thuong!=0)
    {
        du=thuong%2;
        thuong=thuong/2;
        push(S,Newnode(du));
    }
    printf("he 2 cua so %d la: ", *n);
    while(!StackEmpty(S))
        printf("%d",pop(S,&x));

}
int main()
{


int i,x;
StackLint(&S);
for(i=0;i<10;i++)
    StackPush(&S,i);
while(S!=NULL)
{
    StackPop(&S,&x);
    printf(" %d ",x);

}
int n;
    doi_10_2(&S,&n);

return;
}

Đây là đoạn code về chuyển đổi cơ số từ hệ 10 ra hệ 2 bằng stack! ở trong phần void doi-so 10 2 không biết em bị lỗi gì! Ai giúp em sửa đoạn này với ạ! em cảm ơn!

Nguyễn Minh Dũng viết 18:07 ngày 30/09/2018

Lâm, Code này bị thiếu tùm lum hàm mà. Làm sao mà chạy được?

Phạm Hà Lâm viết 18:06 ngày 30/09/2018

Anh sửa giúp em được không ạ! đổi từ hệ 10 ra hệ 2

Phạm Hà Lâm viết 18:08 ngày 30/09/2018

đoạn voide void doi_10_2 đó ạ! vẫn thiếu ở dưới hàm main nhưng em không khắc phục được

Trần Trí Dũng viết 18:18 ngày 30/09/2018

mình khuyên này … hiểu dc cách hình thành cấu trúc thôi … :v … sau đó chuyển sang C ++ mà học mà làm có sẵn các thư viện rồi thích stack thì có stack thích queue thì có queue … còn mình ngại đọc code lắm …

Nguyễn Minh Dũng viết 18:08 ngày 30/09/2018

Mình khuyên Lâm nhé, tự code đi, đừng copy code ở đẩu đâu trên mạng đem về coi là của mình. Như vậy không học được đâu. Code đó 100% không phải do bạn viết, bạn chỉ copy ở đâu đó về. Mà còn không biết cách copy dẫn đến thiếu hàm mà bạn cũng không hiểu thiếu cái gì. Vấn đề không phải là bài này lỗi, vấn đề là bạn không biết bạn đang hỏi cái gì.

Hãy bắt đầu lại từ đầu, chậm mà chắc. Tin Đạt đi, nếu coi lại kiến thức cho vững, thay vì dành thời gian tìm bài có sẵn. Thì tầm 1 tháng thôi là bạn đã nắm kiến thức rồi.

Phạm Hà Lâm viết 18:16 ngày 30/09/2018

em hỏi về phần đổi cơ số ạ! vì code đoạn đó em tìm trên mạng r đề vào bài này! còn cả về stack là của em ạ!

Nguyễn Minh Dũng viết 18:09 ngày 30/09/2018

Đề bài là dùng stack để đổi từ hệ 10 sang hệ 2 hay sao?

Em copy đoạn code trên mạng bị thiếu rồi, hoặc là em làm mới. Hoặc là em tìm code khác trên mạng (mà em tìm không có tìm thấy cái em cần đâu).

Hôm trước anh bực mình là vì a đọc xong thấy code copy thiếu tùm lum mà đem đi hỏi, khác nào đánh đố mọi người. Nhưng nếu em nêu rõ vấn đề, anh sẽ giúp, và phải là code của em. Thì khi đó anh sửa em mới hiểu, và ít ra anh hiểu em đang hỏi cái gì.

Em đọc bài này, bạn này cũng gặp tình trạng tương tự của em.

Write a simple text editor, which stores a string of characters using the list ADT, together with a cursor object that highlights the position of some character in the string (or possibly the position before the first character). Your editor should support the following operations and redisplay the cur- rent text (that is, the list) after performing any one of them. • left: Move cursor left one character (or nothing if at the beginning) • right: Move cursor right one character (or do nothing if a…

buithaiminh viết 18:16 ngày 30/09/2018

Bạn @phamhalam trình bày thuật toán của bạn đi. Ý tưởng của bạn như nào? Bạn thực hiện từng bước như nào? Sau khi thuật toán được phân tích đúng, chúng ta sẽ cùng nhau hiện thực từng bước. Làm như vậy sẽ dễ dàng hơn nhiều.

Phạm Hà Lâm viết 18:10 ngày 30/09/2018

dạ vâng! đề bài là dùng như thế! vấn đề em cũng không tìm ra nên đã chèn thử vào nên mới lỗi be bét z anh ạ! mong anh thông cảm phần này không biết hỏi đi đâu nên mới lên đây hỏi ạ!

Nguyễn Minh Dũng viết 18:15 ngày 30/09/2018

Ok, để tối về có thời gian anh xem cho

Phạm Hà Lâm viết 18:14 ngày 30/09/2018

Vâng! Em cảm ơn anh làm phiền mọi người quá!

Phạm Hoàng Tuấn viết 18:15 ngày 30/09/2018

có nhất thiết phải dùng danh sách liên kết k bạn? bài này dùng mảng 1 chiều có vẻ đơn giản hơn.
Nếu dùng mảng 1 chiều, bạn có thể tham khảo bài này.


struct myStack
{
	int a[100];
	int n;
};
typedef struct myStack MYSTACK;

void InitStack(MYSTACK &stack);
void Push(MYSTACK &stack,int values);
int Pop(MYSTACK &stack);
void PrintStack (MYSTACK stack);

int _tmain(int argc, _TCHAR* argv[])
{
	int number;
	MYSTACK stack;
	InitStack(stack);
	std::cout<<"Nhap n :"<<std::endl ;
	std::cin>>number;
	while (number>0)
	{
		int sodu=number%2;
		Push(stack,sodu);
		number=number/2;

	}
	std::cout<< "So nhi phan cua n: " <<std::endl;
	while(stack.n >0)
	{
		int temp=Pop(stack);
		std::cout << temp;
		stack.n--;
	}
	
	std::cout<<std::endl;

	return 0;
}

void Push(MYSTACK &stack,int values)
{
	
	stack.a[stack.n]=values;
	
	stack.n++;
}

int Pop(MYSTACK &stack)
{
	return stack.a[stack.n-1];
}

void InitStack(MYSTACK &stack)
{
	stack.n=0;
}

Dũng Kon viết 18:05 ngày 30/09/2018

Lỗi sai của chương trình này ? #include <iostream> #include <stack> using namespace std; int main() { stack<int> nhiPhan; int n = 4; while(n > 0) { int dv = n%2; nhiPhan.push(dv); n = n/2; } for(int i = 0; i < nhiPhan.size(); i++) { cout << nhiPhan.top(); nhiPhan.pop(); } return 0; }

tranh thủ qua đây đàm đạo bài này cho vui mọi người

Nguyễn Minh Dũng viết 18:04 ngày 30/09/2018

Chưa đọc code của Tuấn nhưng ý của Tuấn đúng rồi đấy. Stack chỉ là khái niệm, có thể dùng mảng 1 chiều để thể hiện stack. Dùng DSLK phức tạp hơn không cần thiết.

Phạm Hà Lâm viết 18:10 ngày 30/09/2018

bài này dùng mảng đúng là hay hơn thật! em chèn dslk bất thành xin phép tham khảo bài!

Phạm Hà Lâm viết 18:05 ngày 30/09/2018

cảm ơn bác khai sáng cho mình

MinLee viết 18:10 ngày 30/09/2018

mình cũng mới học C++, đây là code của mình mong mọi người góp ý

#include <iostream>
using namespace std;

//khai bao cau truc stack
#define max 100
int a[max];
int sp;

//tao stack rong
void init(int a[], int &sp)
{
    sp=-1;
}

//xet stack rong
int isEmpty(int a[], int sp)
{
    if(sp==-1)
        return 1;
    else
        return 0; //tai sao khong dung else
}

//xet stack day
int isFull(int a[], int sp)
{
    if(sp==max-1)
        return 1;
    else
        return 0;
}

//them phan tu vao stack
int push(int a[], int &sp, int x)
{
    if(sp != max-1)
    {
        a[++sp] = x;
        return 1;
    }
    else
        return 0;
}

//lay/xoa phan tu stack
int pop(int a[], int &sp, int &x)
{
    if (sp!=-1)
    {
        x=a[sp--];
        return 1;
    }
    else
        return 0;
}

//chuyen he 10 sang he 2
void convertDectoBin(int d)
{
    int du;
    while(d!=0)
    {
        du = d%2;
        push(a, sp, du);
        d = d/2;
    }
}

//in ra he 2
void printBin()
{
    int x;
    while(sp!=-1)
    {
        pop(a, sp, x);
        cout<<x;
    }
}

int menu()
{
    int chon;
    cout<<"***************************\n"<<"1.khoi tao stack\n"<<"2.xet rong\n"<<"3.xet day\n"<<"4.them stack\n"<<"5.xoa stack\n"<<"6.chuyen he 10 sang he 2\n"<<"0.thoat\n"<<"+++++++++++++++++++++++\n"<<"chon: ";
    cin>>chon;
    return chon;
}

int main()
{
    int x, chon;
    do
    {
        chon=menu();
        switch(chon)
        {
        case 1:
            init(a, sp);
            cout<<"da khoi tao stack\n";
            break;
        case 2:
            int k;
            k = isEmpty(a, sp);
            if(k==1)
                cout<<"danh sach rong\n";
            else
                cout<<"danh sach khong rong\n";
            break;
        case 3:
            int m;
            m = isFull(a, sp);
            if(m==1)
                cout<<"danh sach day\n";
            else
                cout<<"danh sach chua day\n";
            break;
        case 4:
            cout<<"nhap gia tri can them: ";
            cin>>x;
            int n;
            n= push(a, sp, x);
            if(n==1)
                cout<<"them thanh cong\n";
            else
                cout<<"them khong thanh cong\n";
            break;
        case 5:
            int p;
            p= pop(a, sp, x);
            if (p==1)
                cout<<"xoa thanh cong\n";
            else
                cout<<"xoa khong thanh cong\n";
            break;
        case 6:
            int d;
            cout<<"nhap so he 10: ";
            cin>>d;
            convertDectoBin(d);
            cout<<"he 2: ";
            printBin();
            cout<<endl;
            break;
        }
    }
    while (chon!=0);

}
Tiến Nguyễn viết 18:11 ngày 30/09/2018

@tuancoi2506 anh có thể cho em xem code C để xem ý tưởng được không ạ. em chưa biết C++ nên k hiểu

rogp10 viết 18:06 ngày 30/09/2018

xem code C để xem ý tưởng

Từ code suy ngược ra ý thì nhức đầu lắm.

Bài liên quan
0