30/09/2018, 20:42

Giúp mình sửa code C++ hai bài này với ạ, nó cứ báo là has stopped working ý

đề bài là


Bài 1

#include <stdio.h>A
#include <conio.h>
#include <math.h>
#define N 20
int main()
{
int i, n;
int tong=0, dem1=0, dem2=0;
int x[20];
float avg;
{
	do
	{
		printf("Nhap so phan tu cua ma tran: ");
		scanf("%d", &n);
	}
	while (n>N);
	{
		for(i=0; i<n; i++)
		{
		printf("
x[%d]= ", i);
		scanf("%d", x[i]);
	    }
	}
	{
		for(i=0; i<n; i++)
		if(x[i]>10)
		{
			tong=tong+x[i];
			dem1=dem1++;
		}
		avg=tong/dem1;
		printf("
Tong trung binh cac phan tu lon hon 10 la: %f", avg);
	}
	{
		for(i=0; i>n; i++)
		if(x[i]%3==0)
		{
			dem2=dem2++;
		}
		printf("
Cac so chia het cho 3 la: %d", dem2);
	}
}
}

Bài 2

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <malloc.h>

void nhap(float *x, int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		printf("
x[%d]= ", i);
		scanf("%f", (x+i));
	}
}
void xuat(float *x, int n)
{
	int i;
	printf("
Mang vua nhap la: 
");
	for (i=0; i<n; i++)
	{
		printf("
x[%d]= %f", i, *(x+i));
	}
}
void sapxeptang(float *x, int n)
{
	int i, j, temp;
	for (i=0; i<n; i++)
	for (j=0; j<i; j++)
	{
		if(*(x+i)>*(x+j))
		{
			temp = *(x+i);
			*(x+i) = *(x+j);
			*(x+j) = temp;
		}
	}
	printf("
Mang sau khi sap xep tang dan la:");
	for(i=0; i<n; i++)
	printf("
x[%d]= %f", i, *(x+i));
}
int main()
{
	int i, n;
	float *x, h, max;
	max=x[0];
	{
	printf("
Nhap so phan tu: ");
	scanf("%d", &n);
	x = (float*) malloc (n*sizeof(int));
	nhap (x, n);
	xuat (x, n);
	sapxeptang(x, n);
	free(x);
    }
    {
    	printf("
Nhap vao so thuc h: ");
    	scanf("%f", &h);
    	for (i=0; i<n; i++)
    	{
    		if (x[i]<h)
    		{
    			if (max>x[i])
    			max=x[i];
    			printf("
Max= &f", max);
			}
		}
	}
}
X viết 22:43 ngày 30/09/2018

Bạn đưa code 2 bài, vậy bài nào bị lỗi thế?

Trang Nấm viết 22:48 ngày 30/09/2018

cả hai bài ms điên chứ

X viết 22:54 ngày 30/09/2018

Qua bài 1 thì mình thấy bạn chưa hiểu khi nào nên dùng biến toàn cục và khi nào thì dùng biến cục bộ. Bỏ bớt những cặp dấu {} kia đi
Sai những lỗi rất cơ bản như nhập dữ liệu cho mảng scanf("%d", x[i]);
P/s: Mấy bài cơ bản này bạn phải chịu khó debug là sẽ hiểu được vấn đề.

Trang Nấm viết 22:57 ngày 30/09/2018

b có thể sửa hộ mình được k? tại vì mình ms học C thôi hơn nữa bọn mình cũng không hẳn là chuyên về C nên thực ra mình cũng không có ý định học sâu hơn

Người bí ẩn viết 22:47 ngày 30/09/2018

Bạn đang học Đại học hả? Theo mình thì bạn nên dùng nhiều hàm con sẽ đỡ rối hơn, cụ thể là 1 hàm để nhập mạng.
Đây là code mình hướng dẫn bài 1 nhé, có gì bạn tham khảo rồi chỉnh cho code của mình Do mình khá bận nên không thể code bài thứ 2 cũng như tìm lỗi trong code bài 1 của bạn

void nhapmang(int a[], int n);
void nhapmang(int a[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("Nhap phan tu thu %d: ",i+1);
        scanf("%d",&a[i]);
    }
}
int main()
{
    int a[100];
    int n;
    do
    {
        printf("Nhap so luong phan tu: ");
        scanf("%d",&n);
        if (n < 0 || n > 100)
            printf("So luong phan tu khong hop le, xin kiem tra lai\n");
    }
    while (n < 0 || n > 100);
    nhapmang(a,n);
    int tong = 0;
    int biendem = 0;
    for (int i = 0; i < n; i++)
    {
        if (a[i] > 10)
            tong+=a[i];
        else if (a[i]%3==0)
            biendem++;
        else
            continue;
    }
    printf("\nTong cac phan tu lon hon 10 trong mang la %d\n",tong);
    printf("So luong phan tu trong mang chia het cho 3 la %d\n",biendem);
    getch();
    return 0;
}
Trang Nấm viết 22:50 ngày 30/09/2018

uk mình đang học đại học. Cảm ơn bạn nhiều nhé

Người bí ẩn viết 22:46 ngày 30/09/2018

No problems. Mình khuyến khích bạn nên học phần Thủ tục - Hàm trước rồi tới mảng sau nhé vì mảng liên qua rất nhiều tới Hàm. Thực ra Hàm không khó đâu, nó không logic như vòng lặp, bạn chỉ học để biết được cách thức của nó thôi

Do Quang Duy viết 22:59 ngày 30/09/2018

Mình thử sửa lỗi cho cậu bài 1, chứ không code lại bài mới. Cậu code kiểu như mới học ý, giống mình hồi trước, toàn sai cơ bản thôi , dấu { } thừa nhiều chỗ, mình xóa đi rồi:

#include <conio.h>
#include <math.h>
#define N 20
int main()
{
	int i, n;
	int tong = 0, dem1 = 0, dem2 = 0;
	int x[20];
	float avg;
	do
	{
		printf("Nhap so phan tu cua ma tran: ");
		scanf("%d", &n);
	}
	while (n<N); /* sua cho nay thanh nho hon ne, vi neu so phan tu nho hon 20 thi bat nhap lai */
	
	for( i=0; i<n; i++ )
	{
		printf("\nx[%d]= ", i);
		scanf("%d", &x[i]); /* loi has stopped working o cho nay, code cua cau thieu cai khoa & */
	}
		
	for(i=0; i<n; i++) {
		if(x[i]>10)
		{
			tong=tong+x[i];
			dem1++; /* cho nay sua lai ne, cai nay tuong duong dem = dem+1 */
		}
	}
	avg=(float)tong/dem1; /* cho nay phai ep kieu neu khong int/int se khong cho gia tri float duoc */
	printf("\nTong trung binh cac phan tu lon hon 10 la: %f", avg);
	
	for(i=0; i<n; i++) { /* vong for nay la i<n thi no chay moi dung */
		if(x[i]%3==0)
		{
			dem2++; /* giong cai tren, dem2++ moi dung, dem2=dem2++ la sai */
		}
	}
	printf("\nCac so chia het cho 3 la: %d", dem2);
}
Trang Nấm viết 22:47 ngày 30/09/2018

cảm ơn c nhiều. bọn mình học mảng trước rồi ms đến hàm hơn nữa trên lớp chểnh mảng quá nên rỗng rất nhiều kiến thức

Người bí ẩn viết 22:47 ngày 30/09/2018

Gợi ý: Nếu rãnh học thêm về C của anh @ltd nhé. Anh là lập trình viên chuyên nghiệp nên không phải lo dư hoặc thiếu kiến thức. Còn việc trên lớp bạn cứ học bình thường
Link: https://www.youtube.com/playlist?list=PLyiioioEJSxHr5X8RNY3QXUGcjzeZeI7l
Chúc cậu thành công!

Trang Nấm viết 22:50 ngày 30/09/2018

cảm ơn c nhiều lắm ý nếu có thể c có thể sửa luôn cho mình bài 2 đc k, tự tớ tìm tớ chẳng biết sai chỗ nào cả

Trang Nấm viết 22:45 ngày 30/09/2018

đa tạ

Do Quang Duy viết 22:51 ngày 30/09/2018

Dỗi nên ngồi sửa luôn bài 2, sai cũng kha khá , chúc cậu học tốt

#include <stdio.h>
#include <stdlib.h> /* Thu vien nay chua ham malloc() de cap phat bo nho */
#include <conio.h>
#include <math.h>
//#include <malloc.h> /* Khong can cai thu vien nay nua */

void nhap(float *x, int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		printf("\nx[%d]= ", i);
		scanf("%f", (x+i));
	}
}

void xuat(float *x, int n)
{
	int i;
	printf("\nMang vua nhap la: \n");
	for (i=0; i<n; i++)
	{
		printf("\nx[%d]= %.2f", i, *(x+i));
	}
}

void sapxeptang(float *x, int n)
{
	int i, j, temp;
	for (i=0; i<n-1; i++) {
		for (j=i+1; j<n; j++) { /* Cho nay minh sua the nay cho de hieu, dung sap xep noi bot, hoi khac cua cau */
			if( x[i] > x[j] ) /* truy nhap mang theo kieu x[i] tuong tu *(x+i) nhe */
			{
				temp = x[i];
				x[i] = x[j];
				x[j] = temp;
			}
		}
	}
	printf("\nMang sau khi sap xep tang dan la:");
	for (i=0; i<n; i++)
		printf("\nx[%d]= %.2f", i, x[i] );
}
int main()
{
	int i, n;
	float *x, h, max;
	max = x[0];
	printf("\nNhap so phan tu: ");
	scanf("%d", &n);
	
	x = ( float* ) malloc( n*sizeof(float) ); /* Cho nay la sizeof( float ) thi chuan hon, 
												bien int la 2 byte ma float la 4 byte */
	
	if ( x == NULL ) { /* Cai nay de kiem tra xem co du bo nho de cap phat khong, neu khong thi thoat luon khoi lam nua :)) */
		printf( "Khong du bo nho de cap phat cho mang.\n" );
		getch();
		exit( 1 ); /* Ham nay la thoat chuong trinh luon, no nam trong thu vien stdlib.h */
	}
	
	nhap (x, n);
	xuat (x, n);
	sapxeptang(x, n);
	//free(x); /* Khong duoc giai phong mang o day vi no se khong con du lieu de thao tac cai y tim max kia nua */
    
	printf("\nNhap vao so thuc h: ");
    scanf("%f", &h);
    
    for (i=0; i<n; i++)
		printf("\nx[%d]= %.2f", i, x[i] );
    
	for (i=0; i<n; i++)
    {
    	if (x[i]<h)
    	{
    		if ( max<x[i] ) /* Cho nay max nho hon x[i] moi gan lai chu */
    			max = x[i];
		}
	}
    printf( "\nMax= %.2f", max ); /* Dinh dang in la %f (%.2f la in ra 2 so sau dau phay)
								 chu khong phai &f nhe va in ra ket qua sau cai vong for o tren */
    free( x ); /* Giai phong bo nho sau khi da thao tac xong */
}
Trang Nấm viết 22:44 ngày 30/09/2018

cảm ơn c nhiều hi hi

Trang Nấm viết 22:54 ngày 30/09/2018

hôm nay tớ ms chạy thử cái c sửa nhưng mà nó vẫn bị lỗi ở đâu ý. c thử chạy trên máy c xem có đc k, hay máy tớ có vấn đề ???

Do Quang Duy viết 22:52 ngày 30/09/2018

Mình chạy lại vẫn đúng mà, bài 2 ấy, mình chạy bằng Dev C++. Cậu chạy bị lỗi ở đâu, chụp ảnh hay nói chi tiết đi mình mới biết chứ

Trang Nấm viết 22:53 ngày 30/09/2018

t sửa hết lỗi rồi chạy mà nó vẫn thế này c ạ

Trang Nấm viết 22:46 ngày 30/09/2018

code sau khi sửa của t đây

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>

void nhap(float *x, int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		printf("\nx[%d]= ", i);
		scanf("%f", (x+i));
	}
}
void xuat(float *x, int n)
{
	int i;
	printf("\nMang vua nhap la: \n");
	for (i=0; i<n; i++)
	{
		printf("\nx[%d]= %.2f", i, *(x+i));
	}
}
void sapxeptang(float *x, int n)
{
	int i, j, temp;
	for (i=0; i<n-1; i++)
	{
	for (j=i+1; j<n; j++)
		if(*(x+i)>*(x+j))
		{
			temp = *(x+i);
			*(x+i) = *(x+j);
			*(x+j) = temp;
		}
	}
	printf("\nMang sau khi sap xep tang dan la:");
	for(i=0; i<n; i++)
	printf("\nx[%d]= %.2f", i, *(x+i));
}
int main()
{
	int i, n;
	float *x, h, max;
	max=x[0];
	{
	printf("\nNhap so phan tu: ");
	scanf("%d", &n);
	x = (float*) malloc (n*sizeof(float));
	nhap (x, n);
	xuat (x, n);
	sapxeptang(x, n);
    
    	printf("\nNhap vao so thuc h: ");
    	scanf("%f", &h);
    	for (i=0; i<n; i++)
    	{
    		if (x[i]<h)
    		{
    			if (max<x[i])
    			max=x[i];
    		}
    	}		
		printf("\nMax= &f", max);
		free(x);
	}
}
... viết 22:48 ngày 30/09/2018

float x, h, max;
max=x[0];
{
printf("\nNhap so phan tu: “);
scanf(”%d", &n);
x = (float
) malloc (n*sizeof(float));

chưa cấp phát mảng x thì lấy đâu ra phần tử đầu tiên mà gán cho max?

Cyberbob viết 22:50 ngày 30/09/2018

Ở bài 2 dùng malloc hoặc calloc cấp phát bộ nhớ cho mảng x đã bác ơi,chưa cấp phát mà đã truy nhập thế kia bị core dumped là phải

Bài liên quan
0