Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: có nhầm lẫn gì chăng trong mảng mảng C++

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Mặc định có nhầm lẫn gì chăng trong mảng mảng C++

    các bác nào PRo cho em hỏi C++ 1 chút

    biểu diễn một mảng hai chiều kích thước 3x5 có kiểu int. Cách khai báo mảng này như sau:

    int jimmy [3][5];
    (hãy nhớ rằng chỉ số của mảng luôn bắt đầu từ 0).

    em co 1 đoạn mã như thế này(viết 1 ma trận mxn sau đó in ma trận dưới dạng bảng và tìm 1 phần tử lớn nhất)

    em khong hieu phan tu a[0][0]...a[0][n]
    a[1][0]...a[m][0]
    o cho nao trong khi đoạn mã dưới đây không hề nhắc đến các phần tử này ?? theo lý thuyết các phần tử của mảng luôn bắt đầu từ chỉ số 0
    vd int a[5] thi gom 5 phan tu a[0] a[1] a[2] a[3] va a[4]


    trich sach "C++ lap trinh huong doi tuong GS nguyen van at"
    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<iomanip.h>
    
    void main();
    {
    	float a[20][20],smax;
    	int m,n,imax,jmax,k;
    	
    	cout<<"so hang cua ma tran la :"; cin>>m;
    	cout<<"so cot cua ma tran la "; cin>>n; 
    	
    	for(i=1;1<=m;++i)
    		for(j=1;j<=n;++j)
    		{
    			cout<<"a["<<i<<"],["<<J<<"j] =";
    			cin>>a [i][j]; 
    		}
    
    
    
    smax=a[1][1];
    imax=1;
    jmax=1;
    
    for(i=1;1<=m;++i)
    	for(j=1;j<=n;++j)
    		if(smax<=a [i][j])
    		{
    			smax=a [i][j];
    			imax=i;
    			jmax=j; 
    		}
    	cout<<"\n\n Matran";
    	cout<<setiosflags(ios::showpoint)<<setpricision(1);
    
    for(i=1;1<=m;++i)
    	for(j=1;j<=n;++j)
    	{
    		if(j==1)cout<<"\n";
    		cout<<a [i][j];
    	} 
    	cout<<"phan tu lon nhat cua mang la: "<<smax<<"\n";
    	cout<<"hang thu: "<<imax<<"\n";
    	cout<<"cot thu: "<<jmax; 
    }

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Đúng là trong c/c++ chỉ số mảng bắt đầu bằng 0 thật nhưng mà ta cũng ko nên hiểu máy móc như vậy . Bạn tưởng tượng ta có 1 tỷ đồng , ta cho bạn ta 1 ngàn đồng thì có hề hấn gì chứ , vẫn còn đến 9.999.999.000 đồng để xài thoải mái mà . Ở đây cái ông ất này thích vậy thì ổng cứ làm vậy thôi . Bạn suy nghĩ lại sẽ thấy ổng bỏ hết mấy phần tử đầu mảng 2 chiều , chỉ thao tác trên mảng còn lại thôi . Cũng được , chẳng sao ...

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Ở trên, phần tử a[0][j] và a[i][0] chưa được gán giá trị thôi, có thể đem ra sử dụng tùy ý mà không lo bị đòi lại. Thử xem!

    Hơn nữa khai báo mảng tĩnh thì thường là khai báo thừa, dùng bao nhiêu thì tùy, miễn sao nó không 'tòi' ra cái thằng chưa được khai báo là OK. (kiểu này là của mấy bác PMU18 ấy mà)

    Thực chất Bác Ất muốn làm thế để cho người đọc dễ hiểu thôi.

    Một ma trận thì thường chỉ số bắt đầu từ 1. Viết như thế mọi người dễ hình dung hơn về cách giải bài toán, sau khi hình dung ra cách giải, đi vào công việc cụ thể thì phải làm cho chuẩn. Giáo viên cũng thường dạy như kiểu đó, nếu trái ý có khi còn không được điểm ấy chứ?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    05 2007
    Nơi ở
    UNS
    Bài viết
    9

    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<iomanip.h>
    
    void main();
    {
    	float a[20][20],smax;
    	int m,n,imax,jmax,k;
    	
    	cout<<"so hang cua ma tran la :"; cin>>m;
    	cout<<"so cot cua ma tran la "; cin>>n; 
    	
            //
            // i,  j ban đầu đã đc set giá trị là 1, bắt đầu đi từ số 1
            //
    	for(i=1;1<=m;++i)
    		for(j=1;j<=n;++j)
    		{
    			cout<<"a["<<i<<"],["<<J<<"j] =";
    			cin>>a [i][j]; 
    		}
    
    
    
    smax=a[1][1];
    imax=1;
    jmax=1;
    
    //
    // i,  j ban đầu đã đc set giá trị là 1
    //
    for(i=1;1<=m;++i)
    	for(j=1;j<=n;++j)
    		if(smax<=a [i][j])
    		{
    			smax=a [i][j];
    			imax=i;
    			jmax=j; 
    		}
    	cout<<"\n\n Matran";
    	cout<<setiosflags(ios::showpoint)<<setpricision(1);
    
    //
    // i,  j ban đầu đã đc set giá trị là 1
    //
    for(i=1;1<=m;++i)
    	for(j=1;j<=n;++j)
    	{
    		if(j==1)cout<<"\n";
    		cout<<a [i][j];
    	} 
    	cout<<"phan tu lon nhat cua mang la: "<<smax<<"\n";
    	cout<<"hang thu: "<<imax<<"\n";
    	cout<<"cot thu: "<<jmax; 
    }
    Hình như là bác Ất đã bỏ mất giá trị 0, đúng theo bác Dr nói giá trị 0 chưa đc set, mà cái kiểu dạy giá trị mãng bắt đầu bằng 1 thì cũng nguy hiểm nhỉ nếu đó không phải là int mà là con trỏ thì thế nào chương trình cũng la ỏm tỏi.

    @ledinhtung61 : đang suy nghĩ tại sao điều kiện 1 <= m chương trình lại không báo lỗi khi ra ngoài mảng

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    224

    đang suy nghĩ tại sao điều kiện 1 <= m chương trình lại không báo lỗi khi ra ngoài mảng
    Chắc ghi lộn i là 1 đó thôi ...

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định có nhầm lẫn gì chăng trong mảng mảng C++

    @ledinhtung61 : đang suy nghĩ tại sao điều kiện 1 <= m chương trình lại không báo lỗi khi ra ngoài mảng
    Cái này hên xui, do array không có lỗi catch lỗi out of bound, vui thì nó catch, không thì thôi, nhưng mỗi lần làm vậy thì vùng nhớ ngoài đó bị overwrite hết, cho nên xài vector ngon hơn .

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Nếu code trên chạy, user nhập m & n >= 20 thì sao nhỉ, 30 chẵng hạn ?

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Nếu code trên chạy, user nhập m & n >= 20 thì sao nhỉ, 30 chẵng hạn ?
    Đúng như anh nói, em không hiểu sao code trong sách của bác Ất rất hay để giá trị cuối cùng <= m, n. Sao không khởi tạo cho nó nhỏ hơn nhỏ hơn hẳn n nhỉ ?
    Bị mấy cái bug này mà code dài 1 tí thì có mà khóc.

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Tư duy của Pascal mang sang đấy em à !

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Hồi trước lúc em đọc sách pascal, em cũng không hiểu nhiều lắm về giải thuật, cho nên cũng hay bê y chang, để subscript đúng = n để cài đặt giải thuật. T_T. Lúc sau em bị bug chỗ n này quá em tởn luôn ^_^. Bị tìm mãi ko ra vì cứ quan niệm mình viết cái chỗ vòng for cả trăm lần rùi thì sao sai được, cứ vòng vòng kiếm mãi cuối cùng mới lòi ra là nó T_T.

Các đề tài tương tự

  1. Làm thế nào để tự học seo được? học seo online chăng ?
    Gửi bởi ttsdung1388 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-01-2013, 04:09 PM
  2. Giày Kaitokid nam - Giày giá phải chăng
    Gửi bởi yamekd92 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-01-2013, 10:00 PM
  3. Sự cố kiểm tra số kí tự của bài gởi vào có vấn đề chăng ?
    Gửi bởi doveandrose trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 3
    Bài viết cuối: 17-09-2012, 02:09 PM
  4. Phải chăng Dev C++ bị lỗi
    Gửi bởi kideltn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 12-09-2010, 10:31 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn