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

bankphat

Senior
Joined
Mar 13, 2012
Messages
335
Reactions
405
MR
0.000
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
 

conduongmua

Hero
Verified
Joined
Jul 25, 2011
Messages
1,939
Reactions
2,711
MR
0.001
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:
Joined
Jun 8, 2011
Messages
846
Reactions
542
MR
0.002
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:

ducnhabk

Newbie
Joined
Sep 22, 2011
Messages
387
Reactions
324
MR
0.000
ô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
 

kenddn

Newbie
Joined
Jan 9, 2012
Messages
357
Reactions
188
MR
0.000
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:

ninionline

Junior
Joined
Mar 6, 2011
Messages
35
Reactions
30
MR
0.044
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].
 

MinhHue

Newbie
Joined
Mar 12, 2012
Messages
9
Reactions
7
MR
0.000
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
 
Joined
Apr 13, 2010
Messages
2,687
Reactions
980
MR
0.000
Đã 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:

zen1403

Senior
Joined
Nov 23, 2011
Messages
1,576
Reactions
628
MR
0.000
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
435,047
Messages
7,331,661
Members
186,464
Latest member
bonbon8282

Most viewed of week

Most discussed of week

Most viewed of week

Most discussed of week

Back
Top Bottom