01/10/2018, 00:42
Không thể xuất phần tử trong Stack
Em đang làm bài chuyển đổi 1 số từ cơ số 10 sang 16, lưu vào trong Stack sau đó xuất ra nhưng tói đoạn in kết quả thì chương trình không chạy, chỉ chạy tới in ra màn hình "So can doi la: " là dừng.
Chuyển đổi em dùng biến tạm temp để lưu phần dư, sao đó dò phần dư rồi in ra dùng mã ASCII nhưng có vẻ như chỗ hàm Push nó không đưa giá trị vào trong Stack thì phải.
Thư viện:
/*=== Cai dat Stack bang mang ===*/
/*=== Khai bao ===*/
#include <stdio.h>
#define MaxLength 100
typedef char ElementType;
// typedef float ElementType;
typedef struct{
ElementType Elements[MaxLength];
int Top_idx;
} Stack;
/*=== Tao rong ===*/
void MakeNull_Stack(Stack *S){
S->Top_idx = MaxLength;
}
/*=== Kiem tra rong ===*/
int Empty_Stack(Stack S)
{
return (S.Top_idx == MaxLength);
}
/*=== Kiem tra day ===*/
int Full_Stack(Stack S)
{
return (S.Top_idx == 0);
}
/*=== Lay 1 phan tu ra khoi ngan xep ===*/
ElementType Top(Stack S){
if(!Empty_Stack(S))
return S.Elements[S.Top_idx];
else{
printf("
Loi ! Stack rong");
return -1 ;
}
}
/*=== Them phan tu vao stack ===*/
void Push(ElementType X, Stack *S){
if(Full_Stack(*S))
printf("
Loi ! Stack day khong the them");
else{
S->Top_idx = (S->Top_idx - 1); /* Giam Top 1 don vi
* (Cho Top chi den phan tu ke)*/
S->Elements[S->Top_idx] = X; /* Bo phan tu moi voi dau ngan xep*/
}
}
/*=== Xoa phan tu khoi ngan xep ===*/
void Pop(Stack *S){
if(Empty_Stack(*S))
printf("
Loi ! Stack rong");
else{
S->Top_idx = (S->Top_idx + 1); /* Tang Top 1 don vi
* (Cho Top chi lu`i xuong phan tu sau)*/
}
}
Chương trình:
#include <stdio.h>
#include <conio.h>
void input(int n); // Ham nhap so thap phan
void convert(int n, Stack S); // Ham doi 10 > 16, luu vao Stack
void output(Stack S); // Ham in Stack
//==== Chuong trinh chinh ====//
int main(){
int n;
Stack S;
MakeNull_Stack(&S);
input(n);
convert(n, S);
printf("So can doi la:
");
output(S);
getch();
return 0;
}
void input(int n){
int check = 0;
do{
printf("Nhap vao so thap phan:
");
scanf("%d", &n);
if (n >= 0)
check = 1; // Thoa dieu kien, dung nhap.
else
printf("So khong hop le. Nhap lai
");
} while (!check);
}
void convert(int n, Stack S){
int temp;
while(n != 0){
temp = n%16;
n /= 16;
// Chuyen vao Stack
if (temp <10)
Push(temp+48, &S);
else
Push(temp+55, &S);
}
}
void output(Stack S){
while(!Empty_Stack(S)){
printf("%c", Top(S));
Pop(&S);
}
}
Bài liên quan
Cài đặt stack và thuật toán không có vấn đề gì. tuy nhiên bạn cần xem xét ở đây là 2 hàm
input
vàconvert
. Vì 2 hàm này yêu cầu sau khi thực hiện phải thay đổi giá trị của tham số trên hàm nên bạn truyền bằng tham chiếu, hoặc con trỏ