Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Dùng hàm sao chép như thế nào để sao chép dữ liệu hết từ A[200] sang B ạ.
Chạy thì case 1 nó sẽ hiễn thị chuổi còn case 2, 3 dùg mảng sao chép B C thì k hiển thị, làm s để sao khi sắp xếp thì hiển thị lun cả chuỗi giống như mình chạy case 1.
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<time.h>
using namespace std;
typedef struct SINHVIEN
{
char mssv[11];
char HoTen[35];
int Diem;
};
void NhapMang(SINHVIEN x[], int n)
{
srand(time(0));
for(int i=0; i<n; i++)
{
cout<<"\tNhap sinh vien thu: "<<i+1;
cout<<"\nNhap ma so SV: ";
fflush(stdin);
gets(x[i].mssv);
fflush(stdin);
cout<<"\Nhap ho ten SV: ";
gets(x[i].HoTen);
x[i].Diem=rand()%11;
cout<<"Diem SV la: "<<x[i].Diem<<"\n";
}
}
void XuatMang(SINHVIEN x[], int n)
{
for(int i=0; i<n; i++)
cout<<"\nMa so sinh vien: "<<x[i].mssv<<"\tHo ten sinh vien: "<<x[i].HoTen<<"\tDiem sinh vien: "<<x[i].Diem <<"\n";
}
void HoanVi(int &a, int &b)
{
float c=a;
a=b;
b=c;
}
void InterChangeSort(SINHVIEN x[], int n)
{
int sosanh=0, hoanvi=0;
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
{
if(x[i].Diem<x[j].Diem)
{
HoanVi(x[i].Diem,x[j].Diem);
sosanh++;
hoanvi++;
}
}
cout<<"\nDANH SACH SINH VIEN DUOC SAP XEP : ";
XuatMang(x,n);
cout<<"\nSo lan so sanh: "<<sosanh;
cout<<"\nSo lan hoan vi: "<<hoanvi;
}
void SelectionSort(SINHVIEN x[], int n)
{
int sosanh=0, hoanvi=0;
for(int i=0; i<n-1; i++)
{
int min=i;
for(int j=i+1; j<n; j++)
{
sosanh+1;
if(x[j].Diem > x[min].Diem)
{
min=j;
};
HoanVi(x[min].Diem,x[i].Diem);
hoanvi++;
}
}
cout<<"\nDANH SACH SINH VIEN DUOC SAP XEP : ";
XuatMang(x,n);
cout<<"\nSo lan so sanh: "<<sosanh;
cout<<"\nSo lan hoan vi: "<<hoanvi;
}
void BubbleSort(SINHVIEN x[], int n)
{
int sosanh=0, hoanvi=0;
for(int i=0; i<n-1; i++)
for(int j=n-1; j>i; j--)
{
sosanh++;
if(x[j].Diem > x[j-1].Diem)
{
HoanVi(x[j].Diem, x[j-1].Diem);
hoanvi++;
}
}
cout<<"\nDANH SACH SINH VIEN DUOC SAP XEP : ";
XuatMang(x,n);
cout<<"\nSo lan so sanh: "<<sosanh;
cout<<"\nSo lan hoan vi: "<<hoanvi;
}
void SaoChep(SINHVIEN a[], SINHVIEN b[], int n)
{
for(int i=0; i<n; i++)
b[i].Diem = a[i].Diem;
}
void main()
{
SINHVIEN A[200], B[200], C[200];
int chon,n;
cout<<"\nNhap si so lop: ";
cin>>n;
NhapMang(A,n);
SaoChep(A,B,n);
SaoChep(A,C,n);
cout<<"\t\t\tXUAT DANH SACH SINH VIEN ";
XuatMang(A,n);
do
{
cout<<"\n1.Sap xep diem so theo InterChangeSort:";
cout<<"\n2.Sap xep diem so theo SelectionSort:";
cout<<"\n3.Sap xep diem so theo BubbleSort:";
cout<<"\nChon 1 trong cac chuc nang tren :";
cin>>chon;
switch(chon)
{
case 1 :
{
cout<<"\t\t\tInterChangeSort";
InterChangeSort(A,n);
cout<<"\nNhan Esc de End,nhan phim bat ki de tiep tuc nhe!!!!";
}
break;
case 2 :
{
cout<<"\t\t\tSelectionSort";
SelectionSort(B,n);
cout<<"\nNhan Esc de End,nhan phim bat ki de tiep tuc nhe!!!!";
}
break;
case 3 :
{
cout<<"\t\t\tBubbleSort";
BubbleSort(C,n);
cout<<"\nNhan Esc de End,nhan phim bat ki de tiep tuc nhe!!!!";
}
break;
default: cout<<"Chon 1, 2 hoac 3 nhe!";
}
}while(getch()!=27);
}
struct của bạn có 3 trường thông tin: mssv, hoten, diem mà khi sao chép bạn chỉ sao chép mỗi diem thì làm sao nó đúng được.
Thật sự nhìn code phê quá. bạn đưa ra trường hợp cụ thể luôn được không nhỉ