Pro nào giúp em C++ (Bc31)

bankphat

Senior
Joined
Mar 13, 2012
Messages
342
Reactions
405
MR
0.000
Phone Number
Call me! Call me!
Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước
code: ( bác nào giúp em với em không biết em sai chổ nào, nếu có cách giải nào khác up lên cho em tham khão thks bác nhìu)

/* Sao xep tang dan, giam dan cua mot day so cho trc */
#include <stdio.h>
#include <conio.h>
#define MAX 20


void tangdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int j=0;j<in;j++)
if (ia>ia[j])
{
im = ia[j];
ia[j] = ia;
ia = im;
};
printf("Day so tang dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}
void giamdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int j=0;j<in;j++)
if (ia<ia[j])
{ im = ia[j];
ia[j] = ia;
ia = im; };
printf("Day so giam dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}
void main(void)
{ int ia[MAX];
printf("Nhap vao n: ");
scanf("%d",&in);
for (int i=0;i<in;i++)
{
printf("Nhap vao so thu %d: ",i+1);
scanf("%d",&ia);
}
tangdan(ia);
giamdan(ia);
getch(); }












---------- Post added at 10:43 AM ---------- Previous post was at 10:38 AM ----------

upppppppppppp đang cần gấp
 
Nhác test code quá! Bạn tham khảo code này vậy!
#include <stdio.h>
#include <conio.h>
void main()
{
int a[100], i, j, n, tam;

printf("Nhap so phan tu:");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("\nNhap a[%d]=",i);
scanf("%d",&a);
}
printf("\n");
for (i = 0; i < n; i++) printf("%d ",a);

for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
{
if (a > a[j])
{
tam = a;
a = a[j];
a[j] = tam;
}
}
for (j=0; j<n; j++) printf("\n %d ",a[j]);
getch();
}

Còn giảm dần thì tương tự nhé!
 
Last edited by a moderator:
void tangdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int j=0;j<in;j++)
if (ia>ia[j])
{
im = ia[j];
ia[j] = ia;
ia = im;
};
printf("Day so tang dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}

in ở đâu ra?

Tăng dần:
void NhapMang(int a[],int &n)
{
printf("Nhap vao so phan tu trong mang: ");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("Nhap vao phan thu thu "%d" : ",i+1);
scanf("%d",&a);
}
}
void XuatMang(int a[],int n)
{
printf("\nMang da nhap:);
for(int i=0;i<n;i++)
printf("\t %d",a);
}
void HoanVi(int &ia,int &ib)
{
int ia=tam;
ia=ib;
ib=tam;
}
void SapXep(int a[],int n)
{
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(a>a[j])
HoanVi(a,a[j]);
}
printf("\nMang sau khi sap xep tang dan: ");
XuatMang(a,n);
}
void main()
{
int a[100], int n;
NhapMang(a,n);
SapXep(a,n);
}

Còn giảm dần thì ngược lại.
 
Last edited by a moderator:
ôi dời, C++ thì ấn F8 cho nó tự dò lỗi, sai đâu sửa đó cho quen đi bạn. Paste nguyên đoạn cost lên thế này nhìn đau mắt lắm tìm đâu ra lỗi
 
PHP:
void saptang(int a[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
        if(a[i]>a[j])
        {    
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
}
void sapgiam(int a[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
        if(a[i]<a[j])
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
}
Trong hàm main chĩ cần chạy saptang(a[],n); là dc


Cho bạn lun cả nhập xuất, tăng, giảm, đối xứng ....
PHP:
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
void nhapmang(int a[],int n);
void xuatmang(int a[],int n);
int timmax(int a[],int n);
int timmin(int a[],int n);
int demso0(int a[],int n);
void saptang(int a[],int n);
void sapgiam(int a[],int n);
int doixung(int a[],int n);// kieu int do no tra ve ok gia tri 0 va 1
int ktsnt(int k);
void insnt(int a[],int n);
void xoa(int a[],int &n,int k);
void chen(int a[],int &n,int k,int s);
void xoapt0(int a[],int &n);
void main()
{
    int a[10],n,max,min,dem,k,s;
    printf("\nnhap so phan tu mang n:");
    scanf("%d",&n);
    nhapmang(a,n);
    printf("\nxuat mang n:");
    xuatmang(a,n);
    xoapt0(a,n);
    printf("\nXoa phan tu 0 cua mang:");
    xuatmang(a,n);
}
void nhapmang(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("nhap a[%d]=",i);
        scanf("%d",&a[i]);
    }
        
}
void xuatmang(int a[],int n)
{
    for(int i=0;i<n;i++)
        printf("%d ",a[i]);
}
int timmax(int a[],int n)
{
    int max=a[0];
    for(int i=0;i<n;i++)
        if(a[i]>max)
            max=a[i];
    
    return max;
}
int timmin(int a[],int n)
{
    int min=a[0];
    for(int i=0;i<n;i++)
        if(min>a[i])
            min=a[i];
    return min;
}
int demso0(int a[],int n)
{
    int dem=0;
    for(int i=0;i<n;i++)
        if(a[i]==0)
            dem++;
    return dem;
}
void saptang(int a[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
        if(a[i]>a[j])
        {    
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
}
void sapgiam(int a[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
        if(a[i]<a[j])
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
}
int doixung(int a[],int n)
{
    int ok=1;
    for(int i=0;i<n/2;i++)
        if(a[i]!=a[n-i-1])
        {
            ok=0;break;
        }
    return ok;
}
int ktsnt(int k)
{
    int i,ok;
    ok=0;            
    if(k>=2);
    {
        for(i=2;i<k;i++)
            if(k%i==0)break;
        if(k==i) ok=1;
    }
    return ok;

}
void insnt(int a[],int n)
{
    for(int i=0;i<n;i++)
        if(ktsnt(a[i]))
            printf("\nsnt la a[%d]=%d",i,a[i]);
}
void xoa(int a[],int &n, int k)
{
    if(n>0&&k<n&&k>=0)
    for(int i=k;i<n-1;i++)
        a[i]=a[i+1];
    n--;
}
void chen(int a[],int &n,int k,int s)
{
    if(k<0) k=0;
    if(k>n) k=n;
    for(int i=n-1;i>=k;i--)
        a[i+1]=a[i];
    a[k]=s;
    n++;
}
void xoapt0(int a[],int &n)
{
    for(int i=0;i<n;i++)
    {
        if(a[i]==0)
        {
        xoa(a,n,i);
        i--;
        }
    }
}
 
Last edited by a moderator:
Code này bạn sai ở chỗ
Code:
void tangdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int [COLOR="#FF0000"]j=0[/COLOR];j<in;j++)
if (ia[i]>ia[j])
{
im = ia[j];
ia[j] = ia[i];
ia[i] = im;
};
Nếu áp dụng thuật toán tìm kiếm thì bạn phải chạy j=i+1 để so sánh với số đứng trước nó là a nếu nhỏ hơn thì đổi vị trí của a và a[j].
 
Nhìn đoạn code của bạn mình thấy đau tim quá, bạn có đọc kỹ về kiến thức cơ bản lập trình C++ chưa nhỉ???
Đợi mình 15 phút, mình sẽ chỉ chỗ sai và hoàn chỉnh bài cho bạn
 
Đã sửa tăng dần giảm dần tương tự
void tangdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int j=i+1;j<in;j++)
if (ia>ia[j])
{
im = ia[j];
ia[j] = ia;
ia = im;
}
printf("Day so tang dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}
 
#include <stdio.h>
#include <conio.h>
#define MAX 20
int in; // khai bao bien toan cuc
void tangdan(int ia[MAX])
{
int im;
for (int i=0;i<in;i++) // "in" o dau ra vay????, neu ban muon lay ino duoi main thi phai khai bao la bien toan cuc
for (int j=i+1;j<in;j++) // for (int j=0;j<in;j++) thuat toan khong toi uu
if (ia>ia[j])
{
im = ia[j]; // "im" o nhung bai toan lon ban nen gan cho no gia tri, o day thi duoc nhung co 1 so chuong trinh no se bi loi
ia[j] = ia;
ia = im;
}; // khong co ; o day nha, o day no hieu la ket thuc 1 cau lenh
printf("Day so tang dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}
void giamdan(int ia[MAX])
{
int im;
for (int i=0;i<in;i++)
for (int j=i+1;j<in;j++)
if (ia<ia[j])
{
im = ia[j];
ia[j] = ia;
ia = im;
};
printf("Day so giam dan: ");
for (int i=0;i<in;i++)
printf(" %d ",ia);
printf("\n");
}
void main(void) // ham mai chi can khai bao : void main()
{
int ia[MAX];
printf("Nhap vao n: ");
scanf("%d",&in);
for (int i=0;i<in;i++)
{
printf("Nhap vao so thu %d: ",i+1);
scanf("%d",&ia);
}
tangdan(ia);
giamdan(ia);
getch();
}

đây là theo ý của bài bạn, nhưng đây chỉ là 1 bài cơ bản, theo mình làm như thế này sẽ không tốt, nhất là khi bạn vào những bài toán lớn, bạn phải nhận biết được biến nào là biến toàn cục, biến cục bộ để hạn chế việc khai báo cũng như tiết kiệm tài nguyên cho chương trình, viết các hàm chung ..... Nếu đi sâu vào bạn sẽ thấy lập trình rất hay, nó là cả thế giới để chúng ta tha hồ sáng tạo
Nếu bạn muốn học tốt ngành lập trình thì nên vào forum của congdongcviet: http://diendan.congdongcviet.com/?
ở đây có rất nhiều kiến thức về lập trình
còn nếu bạn có bị lỗi ở bài tập thì liên hệ nick : binhyen_113456, nếu giúp được tớ sẽ giúp
Tớ chuyên về C#
 
Last edited by a moderator:
Code này bạn sai ở chỗ
Code:
void tangdan(int ia[MAX])
{ int im;
for (int i=0;i<in;i++)
for (int [COLOR="#FF0000"]j=0[/COLOR];j<in;j++)
if (ia[i]>ia[j])
{
im = ia[j];
ia[j] = ia[i];
ia[i] = im;
};
Nếu áp dụng thuật toán tìm kiếm thì bạn phải chạy j=i+1 để so sánh với số đứng trước nó là a nếu nhỏ hơn thì đổi vị trí của a và a[j].


Cái này chuẩn rồi này!!!!
 

Announcements

Today's birthdays

Forum statistics

Threads
420,461
Messages
7,098,495
Members
172,456
Latest member
Vd0810
Back
Top Bottom