Bai tap c++, mong a giup gap a

Khai báo một mảng 2 chiều có kích thước (5x5), thực hiện nhập và tính tổng giá trị từng hàng và tổng giá trị của các phần tử theo đường chéo và đưa ra kết quả.
code em đành là như thế này

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

#include "stdafx.h"
#include "conio.h"
#include "iostream.h"
#include "stdio.h"
#include "math.h"
void main(int argc, char* argv[])

{
    //int n=5;//cot
    //int m=5;//hang
    
	int Mang[5][5];
	int sophantu;
	sophantu = 5*5;
	int Mang1chieu[100];
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
		{
			printf("Mang[%d][%d]=",i,j);
			cin>> Mang[i][j];
			printf("\n");
		}
    }
	//thuc hien sap xep mang
	int dem ;
	dem=0;
    for(int i1=0;i1<6;i1++)
    {
        for(int j1=0;j1<6;j1++)
		{
            Mang1chieu[dem]=Mang[i1][j1];
			dem++;
		}
	}
	printf("So phan tu trong mang 1 chieu!\n");
	for(int i2=0;i2<sophantu;i2++)
	{
		printf("%d\t",Mang1chieu[i2]);
	}
void tongpttrendong(int a[][100])
{
	for(int i=0;i<6;++i)
	{
		int S=0;
		for(int j=0;j<6;++j)
			S+=a[i][j];
		cout<<"dong "<<i<<" la: "<<S<<endl;
	}
}
 int tongptdcchinh(int a[][100])
{
   int t=0;
   for(int i=0;i<n;i++)
  		 t=t+a[i][i];
  	  return t;
}
	getch();
}

vậy em gặp vấn đề gì ?

Mảng 5x5 phần tử mà cho for chạy tới 6

khi cháy c++ báo lỗi thế này anh “error C2601: ‘tongpttrendong’ : local function definitions are illegal”

Chắc là chưa khai báo prototype

Nghi vấn nhờ giải đề thi cuối kỳ :kissing_smiling_eyes:

Mà sao mấy cái hàm con nằm trong hàm main hết vậy bạn?
Theo mình biết thì bạn không thể khai báo một hàm trong một hàm được.
Bạn còn chưa gọi hàm nữa.

Bạn nên xem lại cấu trúc của một chương trình trong C/C++

2 Likes
#include <stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
#define N 5

void ArrayInput(int [][MAX_COL]);
void PrintArray(int [][MAX_COL]);
int SumEachRow(int [][MAX_COL], int);
void SumAllRow(int [][MAX_COL]);
void TongCheo(int [][MAX_COL]);

int a[5][5] = {0};
int main()
{
	ArrayInput(a);
	PrintArray(a);
	SumAllRow(a);
	TongCheo(a);

	return 0;
}

void ArrayInput(int a[][MAX_COL]) {
	// Nhập mảng a
}

void PrintArray(int a[][MAX_COL]) {
	// In mảng a
}

int SumEachRow(int a[][MAX_COL], int row) {
	// hàm trả về tổng từng dòng (theo row)
}

void SumAllRow(int a[][MAX_COL]) {
	for(int i = 0; i < N; ++i) {
		int temp = SumEachRow(a, i);
                // bla bla
	}
}

void TongCheo(int a[][MAX_COL]) {
	// tính và in tổng chéo
}
2 Likes

cho mình hỏi
void SumAllRow(int a[][MAX_COL]) {
for(int i = 0; i < N; ++i) {
int temp = SumEachRow(a, i);
tác dụng của nó là gì thế, mình mới học còn non lắm

  • nếu chương trình báo lỗi như thế này “fatal error C1010: unexpected end of file while looking for precompiled header directive” thì giải quyết thế nào ạ

This post was flagged by the community and is temporarily hidden.

bỏ đi thì những cai a[i][j] đâu có hiểu được

thử bỏ đi báo lỗi bạn ạ

khi truyền mảng vào hàm ko cần dấu [] nha. viết lại thành:
void nhap(int a,int &n, int &m)
sửa lại ở những hàm khác lun đi

bạn có cách nào sửa khác không ạ

1. #include "stdafx.h"
2. #include "conio.h"
3. #include "iostream.h"
4. #include "stdio.h"
5. void nhap(int a[][10],int &n,int &m)
6. {
7.    for(int i=0;i<n;i++)
8.       for(int j=0;j<m;j++)
9.       {
10.          printf("[%d][%d]= ",i+1,j+1);
11.          scanf("%d",&a[i][j]);
12.       }
13. }
14. void xuat(int a[][10],int n,int m)
15. {
16.    for(int i=0;i<n;i++)
17.    {
18.       for(int j=0;j<m;j++)
19.          printf("%5d ",a[i][j]);
20.       printf("\n");
21.    }
22. }
23. int tong(int a[][10],int n,int m,int k)
24. {
25. 	int tong=0;
26. 	for(int j=0;j<m;j++)
27. 		tong = tong + a[k][j];
28. 	return tong;
29. }
30. int tongchinh(int a[][10],int n)
31. {
32.     int tongchinh=0;
33.     for (int i=0;i<n;i++)
34.         for (int j=0;j<n;j++)
35.             if (i==j)
36.                 tongchinh+=a[i][j];
37.     return tongchinh;
38. }

39. void main()
40. {
41. 	int n,m,x[10][10],a,k;
42. 	printf(" nhap so hang cua ma tran:");scanf("%d",&n);
43. 	printf("nhap so cot cua ma tran:");scanf("%d",&m);
44. 	nhap(x,n,m);
45. 	xuat(x,n,m);
46. 	printf("Nhap so hang can tinh tong : ");scanf("%d",&k);
47. 	a=tong(x,n,m,k-1);
48. 	printf("tong hang la:%d",a);
49.     printf("\nTong duong cheo chinh: %d",tongchinh(a,n));
50. 	getch();
51. }

mình nhớ ko nhầm thì có sách viết là mảng 2 chiều bạn không thể nhập vào dữ liệu theo kiểu kia đc.
bạn có thể dùng biến phụ rồi gán vào a[i][j] hoặc ép hiểu con trỏ để nhập lần lượt chứ ko nhập trực tiếp như trên

cái đấy mình test riêng vậy chạy được, lỗi ở đây là dòng 49 bạn ạ
chạy chương trình báo " tongchinh ‘: không thể chuyển đổi tham số 1 từ’ int ‘to’ int [] [10]"

ơ. vậy bạn test thử xem nếu đổi sang kiểu foat chạy riêng có đc không.
Dong 49 sai vi kieu tham so thuc trong ham main khac voi kieu doi so trong ham tongchinh. May se khong truyen tham so neu kieu du lieu cua no khac nhau

vậy phải sửa như thế nào ạ, chỉ mình với

  • Hàm tongchinh (int a[][10], int n) biến a là mảng 2 chiều, trong khi a trong hàm main

là một biến thông thường nó báo sai là đúng rồi, bạn phải truyền mảng 2 chiều vào hàm tongchinh chứ.

int a[10][10], n; tongchin(a, n);

bản có thể để đối sô trong hàm tông chính là void: vd int tong chinh(void a[][10],int n)
khi này thì bạn có thể truyền tham số đc
sau đo trong hàm tổng chính bạn ép kiểu
int p;
p = (int
) a[][10]
thử xem :slight_smile:

cảm ơn 2 bạn nhiều, mình sửa được rồi;

  1. printf("\nTong duong cheo chinh: %d",tongchinh(a,n)); mình sửa thành
  2. printf("\nTong duong cheo chinh: %d",tongchinh(x,n)); vì x mí là mang 2 chiều , tks các bạn nhiều nhé
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?