30/09/2018, 16:08

Nhờ sửa lỗi bài tìm dãy đối xứng

#include<stdio.h>
int main()
{
    int A[20],i,j,n;
    printf("nhap day so xem co phai la doi xung hay khong
 Moi ban nhap cac phan tu ");
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        printf("A[%d]=",i);
        scanf("%d",&A[i]);
    }

    for(j=n-1,i=0; i<=j; i++,j--)
        if(A[i]==A[j])
            printf("day so doi xung");
        else printf("ko la day doi xung");
}

Mình muốn nó không hiển thị nhiều cái tên “day so doi xung” nhiều lần quá thì làm thế nào?
vd về dãy đối xứng như 12421 đây là dãy đối xứng

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

@Toi_Do bạn sửa lại cái tiêu đề nhé, tiêu đề chưa thể hiện được nội dung bạn muốn hỏi. Nếu các bạn khác cùng đặt chung tiêu đề “Mọi người xem giúp mình mã này với” thì làm sao biết được ai hỏi cái gì

Đồng thời bạn cũng phải giải thích cái chương trình của bạn đang làm cái gì? Nếu bạn chỉ post code thì không ai biết code bạn viết cái gì, bị lỗi ở đâu. Thì khi đó không thể giúp bạn sửa lỗi được.

P/S: Đạt đã move bài bạn vào Programming > C. Đã sửa lại lỗi chính tả, đã sửa lại code nhìn cho đẹp hơn.

P/S2: Đạt đã sửa tiêu đề thành “Nhờ sửa lỗi bài tìm dãy đối xứng”. Bây giờ @Toi_Do cho biết đề bài đi, dãy đối xứng theo yêu cầu của bạn là dãy như thế nào.

Toi Do viết 18:11 ngày 30/09/2018

vd 12521 đây là 1 dãy đối xứng.
Em Viết được mã này rồi nhưng mà nó hơi thừa tý in ra nhiều dòng chữ quá
có lệnh nào kết thúc được không ạ

Toi Do viết 18:22 ngày 30/09/2018

cho em xin nỗi nha em mới vào room nên vẫn còn non nớt mong anh bỏ quá

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

em mới vào room nên

À cái vụ post bài nhiều người bị lắm. Nhưng nếu em post bài thì em phải suy nghĩ cách post làm sao cho bạn em, người không học chung với em, hiểu em đang muốn hỏi cái gì.

Forum hay trong đời thật cũng vậy, em hỏi bạn em với nội dung y chang thì bạn em cũng thua à, vì nó không hiểu em đang hỏi cái gì

vd 12521 đây là 1 dãy đối xứng.

thế 125521 có phải là dãy đối xứng luôn không?

P/S: Đây là cách post bài trong forum mình nè, em có thể “Quote” bài của anh để hỏi từng vấn đề cụ thể mà không cần phải post 2 bài liên tục. Như vậy nó rối forum.

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

e có thể sửa lại như sau:

// DayDoiXung.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "iostream"


int _tmain(int argc, _TCHAR* argv[])
{
	int A[20], i, j, n;
	printf("nhap day so xem co phai la doi xung hay khong\n Moi ban nhap cac phan tu ");
	scanf_s("%d", &n);
	for (i = 0; i<n; i++)
	{
		printf_s("A[%d]=", i);
		scanf_s("%d", &A[i]);
	}

	for (j = n - 1, i = 0; i <= j; i++, j--)
	if (A[i] != A[j])
	{
		printf_s("ko la day doi xung");
		int a;
		system("pause");
		return -1;
		
	}
	printf_s("day so doi xung");
	system("pause");
	return 0;
}


Lãnh Huyết viết 18:09 ngày 30/09/2018

Của bác nếu dãy không đối xứng thì cuối cùng chương trình vẫn sẽ hiện thêm 1 dòng “day doi xung”

Lãnh Huyết viết 18:19 ngày 30/09/2018

bạn có thể sửa vòng for của bạn:
…sửa:

for(j=n-1,i=0; i<=j; i++,j--)
        if(A[i]==A[j])
            printf("day so doi xung");
        else printf("ko la day doi xung");

===> thành:

int check=1;
for(j=n-1,i=0; i<=j; i++,j--)  if(A[i]!=A[j]) check=0;
if(check==1) printf("day so doi xung");
else printf("ko la day doi xung");
Phạm Hoàng Tuấn viết 18:16 ngày 30/09/2018

e sửa chữ break thành return hoặc dùng cờ hiệu cũng dc. hi

Toi Do viết 18:15 ngày 30/09/2018

lệnh của anh mới quá em không biết anh giải thích em đi

Toi Do viết 18:09 ngày 30/09/2018

đúng rồi không đối xứng vẫn thêm dòng đối xứng

Lãnh Huyết viết 18:09 ngày 30/09/2018

Đâu có lệnh nào mới đâu bạn @Toi_Do??
int check là khai báo thêm 1 biến để check xem có là dãy đối xưng ko? ban đầu gán cho giá trị 1 - mặc định là đối xứng. trong vòng for, nếu có giá trị a[i] khác a[j] thì check sẽ gán bằng 0 - không đối xứng. ở dưới lệnh if chắc ko cần giải thích nữa nhé.

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

Lệnh for gọi lệnh if mà lệnh break ở trong lệnh if. Do đó lệnh break thuộc vòng lặp for. Vậy lệnh break không có tác dụng với lệnh if.

không nó tác dụng là chưa hợp lý nhé bạn, thật ra khi gặp a[i]!=a[j], thì nó sẽ thoát khỏi vòng lặp luôn. Nhưng vẫn chạy xuất dưới nên xuất ra thêm câu. Vì vậy chỉ cần đổi lại break=return là ok nhé bạn.
Lúc trưa code chay, nên k chạy code để debug dc.H up code hoàn chỉnh nhá.

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

Bạn đã thảo luận góp ý làm rõ việc đoán code.

Chưa hiểu lắm ý bạn nói

Muốn chương trình k thoát ra thì mình có hàm system("pause") kìa bạn.

Phương Lê viết 18:11 ngày 30/09/2018

Mình muốn nó không hiển thị nhiều cái tên “day so doi xung” nhiều lần quá thì làm thế nào?vd về dãy đối xứng như 12421 đây là dãy đối xứng

#include <stdio.h>
int main()
{
    int A[20],i,j,n;
    printf("Nhap day so xem co phai la doi xung hay khong\nMoi ban nhap cac phan tu : ");
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        printf("A[%d] = ", i);
        scanf("%d", &A[i]);
    }
    for(j = n - 1, i = 0; i <= j; i++, j--)
        if(A[i] == A[j])
        {
            printf("Day so doi xung.");
            break;
        }
        else
        {
            printf("Khong phai la day so doi xung.");
            break;
        }
    return 0;
}

Dãy đối xứng là phần tử đầu đối xứng với phần tử cuối, phần tử thứ 2 đối xứng phần tử kề phần tử cuối … qua phần tử ở giữa làm tâm đối xứng hoặc không có phần tử ở giữa.
Dãy 125521 là dãy đối xứng, dãy 12123 không phải là dãy đối xứng.

Toi Do viết 18:08 ngày 30/09/2018

tại em nghĩ sâu xa nhìn thấy lệnh check tưởng cái gì!!! nên khong đọc nữa

Toi Do viết 18:11 ngày 30/09/2018

mà câu lệnh anh hay thật ngắn gọn rễ hiểu chác anh tư giỏi lắm nhỉ

BaoLe viết 18:21 ngày 30/09/2018
#include<stdio.h>
int doi_xung(int so_nguyen[],int so_phan_tu);
void nhap_mang(int so_nguyen[],int so_phan_tu);
int main() {
    int so_phan_tu,so_nguyen[100];
    printf("Nhap so phan tu cua mang can tao:");
    scanf("%d",&so_phan_tu);
    nhap_mang(so_nguyen,so_phan_tu);
    if(doi_xung(so_nguyen,so_phan_tu))
        printf("Mang da nhap la mang doi xung.");
    else
        printf("Mang da nhap khong phai la mang doi xung.");
    return 0;
}
void nhap_mang(int so_nguyen[],int so_phan_tu) {
    int i;
    for(i=0;i<so_phan_tu;i++) {
        printf("so_nguyen[%d]=",i);
        scanf("%d",&so_nguyen[i]);
    }
}
    int doi_xung(int so_nguyen[],int so_phan_tu) {
        int i,j,check;
        for(i=0,j=(so_phan_tu-1); i<((so_phan_tu-1)/2.0)&&j>((so_phan_tu-1)/2); j--,i++)
            if(so_nguyen[i]==so_nguyen[j])
                check=1;
            else {
                check=0;
                break;
            }
        return check;
    }

Code trên mình dùng hàm để viết. Để hạn chế in dòng chữ như bạn đã nói thì mình dùng 1 biến check khi viết hàm doi_xung, khi kiểm tra điều kiện:
if(so_nguyen[i]==so_nguyen[j])
Nếu đúng thì gán check=1, nếu sai thì gán check=0 và thoát khỏi vòng lặp for bằng lệnh break. Sau đó trả về hàm main như trên.
Bạn cứ chạy thử code của mình nếu có gì không hiểu thì cứ hỏi.

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

sao dài thế anh…

Toi Do viết 18:22 ngày 30/09/2018

if(doi_xung(so_nguyen,so_phan_tu))
printf(“Mang da nhap la mang doi xung.”);
else
printf(“Mang da nhap khong phai la mang doi xung.”);
return 0;
em không hiểu cái này anh ơi

BaoLe viết 18:14 ngày 30/09/2018

Code trên mình viết hoàn chỉnh luôn muk.Vừa nhập mảng ,vừa kiểm tra tính đối xứng của mảng đã nhập.Nếu như bạn chỉ cần phần đối xứng thì chỉ cần quan tâm tới hàm:
int doi_xung(int so_nguyen[],int so_phan_tu).thôi.

Bài liên quan
0