| | code:05/question3/hay o cho nhap mang va lưu trữ n! | |
| | Tác giả | Thông điệp |
---|
nbp2983 Gà con
Tổng số bài gửi : 23 Join date : 18/06/2009
| Tiêu đề: code:05/question3/hay o cho nhap mang va lưu trữ n! Thu Jun 18, 2009 10:14 pm | |
| - Code:
-
//code05/question3 #include <stdio.h> #include <conio.h> #include <stdlib.h> //khai bao ham con void menu(void); void nhap(int *n,int a[]); int tong(int n, int a[]); float tb(int n, int a[]); int dcp(int n, int a[]); void inra(int n, int a[]); //dinh nghia ham main void main() { int n,a[100]; char chon; clrscr(); do
{ menu(); printf("\nNHAP LUA CHON:"); fflush(stdin); chon=getchar(); switch(chon) { case '1': nhap(&n,a); break; case '2': printf("\ntong la: %d",tong(n,a)); break; case '3': printf("\ntrung binh la: %f", tb(n,a)); break; case '4': printf("\nso so chinh phuong: %d",dcp(n,a)); break; case '5': inra(n,a); break; case '6': exit(0); default: printf("\nLUA CHON SAI, THUC HIEN LAI:"); break; } }while(chon!='6'); getch(); } //dinh nghia ham con void menu(void) { printf("\nMENU:"); printf("\n1. nhap mang gom cac ptu nguyen duong cho den khi =-1"); printf("\n2. tinh tong cac phan tu mang"); printf("\n3. tinh trung binh"); printf("\n4. dem so chinh phuong"); printf("\n5. sap xep theo thu tu giam dan"); printf("\n6. thoat."); } void nhap(int *n, int a[]) { int i=0; printf("\nnhap mang nguyen duong:"); do { printf("\na[%d]=",i); scanf("%d",&a[i]); while(a[i]<=0&&a[i]!=-1) { printf("\nnhap lai a[%d]=",i); scanf("%d",&a[i]); } i++;
} while(a[i-1]!=-1); *n=i-1; } int tong(int n, int a[]) { int i,s=0; for(i=0;i<n;i++) s+=a[i]; return(s); } float tb(int n, int a[]) { int i; float t; t=(float)tong(n,a)/n; return(t); } int dcp(int n, int a[]) { int i,j,d=0; for(i=0;i<n;i++) for(j=1;j<=a[i];j++) if(a[i]==j*j) d++; return(d); } void inra(int n, int a[]) { int i,j,t; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[j]; a[j]=a[i]; a[i]=t; } printf("\n mang sau khi sap xep: "); for(i=0;i<n;i++) printf("\na[%d]=%d",i,a[i]); }
Được sửa bởi nbp2983 ngày Fri Jun 26, 2009 10:47 am; sửa lần 8. | |
| | | haph86 Gà mới lớn
Tổng số bài gửi : 40 Join date : 04/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 19, 2009 3:29 pm | |
| anh check lại code nhé, post bị mất nhiều phần quá, em chạy ko đc. | |
| | | nbp2983 Gà con
Tổng số bài gửi : 23 Join date : 18/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 19, 2009 6:06 pm | |
| anh xem lai rui, code chuan day, em xem lai xem! | |
| | | spyware Đại Bàng Tinh
Tổng số bài gửi : 116 Join date : 04/06/2009 Age : 39 Đến từ : HN
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 8:21 am | |
| - không biết cách nhập phần tử mảng rồi mới nhận N có được chấp nhận không, vì thường thì đề yêu cầu nhập N và mảng, có thể một phần tử mảng = -1 hoặc một cái gì đó thì sao nhỉ | |
| | | nbp2983 Gà con
Tổng số bài gửi : 23 Join date : 18/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 9:54 am | |
| Theo yêu cầu đề bài thì nhập mảng trươc, lưu trữ n sau. Nếu phần tử mảng bằng một cái gì đó thì ta phải xử lý thêm( code ở trên là làm y theo đề bài) Ý nghĩa của phần này là: nhập các số nguyên dương cho đến khi nhập -1 thì dừng, như vậy độ dài mảng phụ thuộc vào số lần nhập (tức là độ dài chưa biết trước!)=> nhập mảng trước lưu trữ độ dài mảng sau là hợp pháp!! (tất nhiên số lần nhập ko được vượt quá giới hạn khai báo ban đầu-người ra đề hàm ý như vậy-chúng ta cũng phải ngầm hiểu như thế)
Ai có quan điểm gì khác thì tung lên nhe! | |
| | | haph86 Gà mới lớn
Tổng số bài gửi : 40 Join date : 04/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 11:21 am | |
| "tất nhiên số lần nhập ko được vượt quá giới hạn khai báo ban đầu" Vậy theo cách xử lí như thế này thì số phần tử nhập vào vẫn bị giới hạn -> Khắc phục: dùng con trỏ để lưu mảng, mỗi lần nhập gọi hàm realloc một lần ( bổ xung bộ nhớ ). Anh Nghĩa và Hiến thử thực hiện theo cách đó xem sao nhé | |
| | | nbp2983 Gà con
Tổng số bài gửi : 23 Join date : 18/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 3:11 pm | |
| Về mặt chặt chẽ toán học của đề bài thì dùng hàm realloc như em Hà mới đúng, tuy nhiên bình luận trên quan điểm đi thi sắp tới thì làm như trên là ăn điểm tối đa rồi, ở bài trên bạn nào dùng hàm realloc là điều rất đáng hoan nghênh! Chúc cả lớp ôn thi và thi đạt kết quả maximum!! | |
| | | spyware Đại Bàng Tinh
Tổng số bài gửi : 116 Join date : 04/06/2009 Age : 39 Đến từ : HN
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 4:25 pm | |
| việc dùng các hàm có sẵn trong stdlib.h là tối ưu trong trường hợp này và thuật toán như trên của anh Nghĩa (chắc không phải mem của lớp. hân hạnh được biết anh) là hoàn toàn chính xác và có thể nói là chuẩn trong chương trình học và thi của chúng ta. - nhưng khi động chạm tới calloc và malloc thì vấn đề không kiểm soát được các biến con trỏ cũng là điều e ngại, vậy nên nếu chúng ta hạn chế dùng con trỏ thì càng ít sai mà điểm khi không dùng con trỏ cũng đạt max. - như bài trên vấn đề cấp phát bộ nhớ động cho mảng được thực hiện trong hàm con mỗi lần nhập 1 phần tử thì đồng thời relloc 1 ô nhớ nữa.. - trong trường hợp nhập N và nhập mảng gồm N phần tử, việc sử dụng con trỏ ở hàm con hay hàm main cũng khá khó hiểu, có lẽ tại chưa nắm vững được kỹ năng - "tuyệt kỹ" với con trỏ nên rất e ngại sử dụng. (Ques: nhập N và mảng N phần tử thì cấp phát ở đâu và như thế nào?) | |
| | | haph86 Gà mới lớn
Tổng số bài gửi : 40 Join date : 04/06/2009
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 5:27 pm | |
| Hiến ơi, anh Nghĩa vẫn ngồi cạnh tôi ở trên lớp ấy mà ) | |
| | | spyware Đại Bàng Tinh
Tổng số bài gửi : 116 Join date : 04/06/2009 Age : 39 Đến từ : HN
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Fri Jun 26, 2009 5:46 pm | |
| oh` thì ra là người nhà . mà giấu tài không sôi nổi làm anh em không nhận ra. sorry one. | |
| | | spyware Đại Bàng Tinh
Tổng số bài gửi : 116 Join date : 04/06/2009 Age : 39 Đến từ : HN
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! Sat Jun 27, 2009 6:38 pm | |
| - một cách giải quyết hơi khác 1 chút +: dùng hàm test square riêng, làm chương trình đỡ rối hơn +: thêm hàm show hiển thị mảng vừa nhập +: thuật toán tìm chính phương đơn giản hơn do các phần tử được nhập là dương sẵn rồi - Code:
-
#include<conio.h> #include<stdio.h> #include<stdlib.h> #include<math.h> // declare all function void input(int *n, int a[]);// a[i]>0 void show(int n, int a[]); int sum(int n, int a[]); float aver(int n, int a[]); int square(int n); int count(int n, int a[]); void sort(int n, int a[]);// ascending and display void menu(void); // define all function void main() { int i,j,n,a[100]; char ch; clrscr(); do { clrscr(); menu(); fflush(stdin); scanf("%c",&ch); switch(ch) { case '1': input(&n,a); getch(); break; case '2': show(n,a); printf("\nTotal of the numbers: %d",sum(n,a)); getch(); break; case '3': show(n,a); printf("\nThe average value: %.2f",aver(n,a)); getch(); break; case '4': show(n,a); printf("\nTotal all square numbers: %d",count(n,a)); getch(); break; case '5': show(n,a);sort(n,a);getch(); break; case '6': exit(0); default : printf("\nInvalid ! Try again"); break; } } while(ch!='6');
} void menu() { printf("\n1. Input array of positive integer number"); printf("\n2. Calculate total of the numbers"); printf("\n3. Calculate the average value"); printf("\n4. count the square numbers"); printf("\n5. Display all members"); printf("\n6. Exit"); printf("\n Enter your choice! "); } void input(int *n, int a[]) { int i=0; do { printf("a[%d]= ",i); scanf("%d",&a[i]); while(a[i]<=0 && a[i] != -1) { printf("Invalib ! Try again a[%d]= ",i); scanf("%d",&a[i]); } i++; } while(a[i-1]!=-1); *n=i-1; } void show(int n, int a[]) { int i; printf("\nArray inputted:\n"); for(i=0;i<n;i++) printf("%4d",a[i]); } int sum(int n, int a[]) { int i,sum; for(i=0,sum=0;i<n;i++) sum+=a[i]; return sum; } float aver(int n, int a[]) { return ((float)sum(n,a)/n); } int square(int n) { if((sqrt(n)-(int)sqrt(n))==0) return 1; return 0; } int count(int n, int a[]) { int i,c; for(i=0,c=0;i<n;i++) if(square(a[i])==1) c++; return c; } void sort(int n, int a[]) { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } printf("\nArray after sorted:\n"); for(i=0;i<n;i++) printf("%4d",a[i]); } | |
| | | Sponsored content
| Tiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n! | |
| |
| | | | code:05/question3/hay o cho nhap mang va lưu trữ n! | |
|
Trang 1 trong tổng số 1 trang | |
Similar topics | |
|
| Permissions in this forum: | Bạn không có quyền trả lời bài viết
| |
| |
| |