Hỏi đáp Nhập dữ liệu cho mảng, tìm số lớn nhất và chỉ ra vị trí của nó trong mảng

Thảo luận trong 'C/C++' bắt đầu bởi b-boy_phonui, 14 Tháng sáu 2011.

  1. Offline

    b-boy_phonui

    • Windows 2.0

    Số bài viết:
    96
    Đã được thích:
    28
    Điểm thành tích:
    20
    bạn nào biết bài toán tìm vi trí của 1 số trong mảng(1 chiều) giúp mình với
    ví dụ như bài
    "nhập dữ liệu cho mảng, tìm số lớn nhất và chỉ ra vị trí của nó trong mảng"
  2. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    1. Thủ tục gọi mảng
    2. Tìm max
    - Khởi tạo 1 biến max = A[0] (gán số lớn nhất bằng phần tử đầu tiên)
    - Cho i chạy từ 1 đến n (for, while, do while): Nếu A>max thì gán max bằng A
    3. Tìm vị trí: Lợi dụng i, xuất vị trí thông qua i

    Code này mình viết nhanh chứ chưa chạy thử, bạn tham khảo xem sao, nó hơi dài dòng :D

    Mã:
    #include<conio.h>
    #include<stdio.h>
    void main()
    {
    	int n,i,max,dem;
    	int A[20];
    	clrscr();
    	printf("Nhap vao so luong phan tu, n= ");scanf("%d",&n);
    	for (i=0;i<n;i++)
    	{
    		printf("Nhap so thu %d: ",i);
    		scanf("%d",&A[i]);
    	}
    	max=A[0];
    	for (i=1;i<n;i++)
    	{
    		if (A[i]>max)
    		{
    		max=A[i];
    		dem=i;
    		}
    	}
    	printf("\nSo lon nhat la %d",max);
    	if (max==A[0])
    	{
    		printf("\nVT= 1");
    	}
    	else
    	{
    		printf("\nVT: %d",dem+1);
    	}
    getch();
    }
    
    b-boy_phonuikimtan thích bài này.
  3. Offline

    kimtan

    • Core I7

    • Em là Sup :D
    Số bài viết:
    479
    Đã được thích:
    263
    Điểm thành tích:
    220
    mình có một đoạn code của bài này. nhưng sock một cái. mình viết trên 2 máy nhưng 1 máy chạy đc còn một máy chạy sai. không hiểu đc. máy cậu xem giùm mình.
    hongoctrien thích bài này.
  4. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Code của bạn sai ở chổ sau câu lệnh if, sau đó không có dấu ";"
    Code tìm vị trí của bạn dc đó, có thể mà mình không nghĩ ra :D

    Xin gửi code hoàn thiện cho bài này

    Mã:
    #include<conio.h>
    #include<stdio.h>
    void main()
    {
    	int n,i,max,VT;
    	int A[20];
    	clrscr();
    	printf("Nhap vao so luong phan tu, n= ");scanf("%d",&n);
    	for (i=1;i<=n;i++)
    	{
    		printf("Nhap so thu %d: ",i);
    		scanf("%d",&A[i]);
    	}
    	VT=1;
    	max=A[1];
    	for (i=1;i<=n;i++)
    	{
    		if (A[i]>max)
    		{
    		max=A[i];
    		VT=i;
    		}
    	}
    	printf("\nSo lon nhat la %d",max);
    	printf("\nNam thu %d",VT);
    getch();
    }
    
    duyen.only.it thích bài này.
  5. Offline

    lyvinhr00m

    • cụ lý

    Số bài viết:
    1.234
    Đã được thích:
    930
    Điểm thành tích:
    900
    Các bạn chú ý sau này khi duyệt mảng 1 chiều (2 chiều) thì chỉ số phần tử chạy từ 0 đến n-1;

    @hongoctrien:
    Nếu chạy từ 1 thì i<=n;

    Ví dụ khi mảng có 2 phần tử max bằng nhau thì code này chỉ ra có 1 vị trí???

    p/s: Các bạn sửa lại tiêu đề để sau này dễ tìm kiếm
    hongoctrien thích bài này.
  6. Offline

    prkhongtuoc

    • Thành Viên Mới

    Số bài viết:
    50
    Đã được thích:
    7
    Điểm thành tích:
    0
    anh mô giỏi chuơng trình con bày dùm bài này với
    Đề: viết chương trình con tính tổng trả về \
    S(n)=1+2+3...+n
    viết chương trình chính S(5)+S(10)
  7. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Mới viết tới dc S(n) + S(m), còn tổng chưa viết dc :D, bạn nào làm tiếp mình tham khảo với

    Mã:
    int S=0,i,n,m;
    void tongS (int S, int x)
    {
    	for (i=1;i<=x;i++)
    	{
    	S=S+i;
    	}
    	printf("%d",S);
    }
    void main()
    {
    	clrscr();
    	printf("\nS(n)= ");scanf("%d",&n);
    	printf("S(m)= ");scanf("%d",&m);
    	printf("\nS(%d)= ",n);
    	tongS(S,n);
    	printf("\nS(%d)= ",m);
    	tongS(S,m);
    getch();
    }
    prkhongtuoc thích bài này.
  8. Offline

    hoekaka

    • Windows 95

    Số bài viết:
    359
    Đã được thích:
    114
    Điểm thành tích:
    90
    Với những đề bài có ghi kết quả trả về của ct con thì mình nghĩ nên xài return kq rồi in kq trong main chính.
    Mã:
    int tinhtong(int n)
    	{	int s=0;
    		for(int i=0;i<=n;i++)	s+=i;
    		return s;
    	}
    
    int main()
    	{	int n;
    		printf("Nhap n: ");
    		scanf("%d",&n);
    		printf("Tong = %d \n",tinhtong(n));
    		printf("Tong S(5) + S(10) = %d",tinhtong(5)+tinhtong(10));
    		return 0;
    	}
    
    Theo mình để làm ý tổng s(n) + s(m) của bạn thì nên dùng mảng sẽ hay hơn
    prkhongtuoc thích bài này.
  9. Offline

    prkhongtuoc

    • Thành Viên Mới

    Số bài viết:
    50
    Đã được thích:
    7
    Điểm thành tích:
    0
    giải tới đây bí không biết tính tổng sao mọi người tham khảo nha
    #include<stdio.h>
    #include<conio.h>
    void tong(int n)
    {
    int i=0,is=0;
    while(i++<n)
    is=is+i;
    printf("tong:%d",is);
    }
    void main
    {
    int m,n;
    printf("nhap vao so n,m:");
    scanf("%d%d",&n&m);
    tong(n);
    tong(m);
    ....
    }
    còn tính tổng sao hem biết mọi người thêm ý kiến nha
  10. Offline

    hoekaka

    • Windows 95

    Số bài viết:
    359
    Đã được thích:
    114
    Điểm thành tích:
    90
    Nhiều bạn làm ctcon là xuất kết quả ngay trong ctcon ... ở trong ctcon của bạn cái biến lưu trữ kết quả của tổng là is (là biến cục bộ) vậy 1 lần gọi ctcon thì chỉ xài đc 1 lần rồi mất đi ...
    Giải quyết câu hỏi của bạn thì tham khảo code của mình ở trên ... hoặc là chỉnh sửa trong ct của bạn là thêm 1 biến toàn cục để lưu kết quả vào
  11. Offline

    asokayoyo

    • Thành Viên Mới

    Số bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    0
    Bài tìm vị trí số lớn nhất nếu có nhiều số lớn nhất bằng nhau thì làm thế nào vậy bạn?
    :-B
  12. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Lấy lại code tìm số lớn nhất bên trên nhé

    Mã:
    #include<conio.h>
    #include<stdio.h>
    void main()
    {
        int n,i,max;
        int A[20];
        printf("Nhap vao so luong phan tu, n= ");scanf("%d",&n);
        for (i=1;i<=n;i++)
        {
            printf("Nhap so thu %d: ",i);
            scanf("%d",&A[i]);
        }
        max=A[1];
        for (i=1;i<=n;i++)
        {
            if (A[i]>max)
            {
            max=A[i];
            VT=i;
            }
        }
        printf("\nSo lon nhat la %d",max);
        printf("\nVi tri: ");
        for(i = 1; i <= n; i++){
            if(A[i] == max){
                printf("%d", i);
                printf("\t");
            }
        }
    getch();
    }
    [IMG]
  13. Offline

    asokayoyo

    • Thành Viên Mới

    Số bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    0
    Cách này thì mình biết rồi, mình muốn hỏi cách dùng bộ nhớ động của con trỏ để lưu vị trí
    int *vtmax(int *a,int &n)
    {
    int max=0;
    int *t;
    t=new int[1];
    int vt=0;
    for(int i=0;i<n;i++)
    {
    if(max<a)
    {*(t+i)=i;
    t=new int[1+i];}
    }
    return t;
    }
    kiểu thế này, mà mình gọi hàm ko được @@
  14. Offline

    KingMax

    • Windows NT

    Số bài viết:
    145
    Đã được thích:
    63
    Điểm thành tích:
    60
    cho luôn hàm Main lên đi
  15. Offline

    hai nam

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    0
  16. Offline

    Xautrai_LT03B

    • Windows 1.0

    Số bài viết:
    38
    Đã được thích:
    15
    Điểm thành tích:
    10
    Những cái gì trả về giá trị không nên Dùng hàm Void. nên dùng : int, double, float, String.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí