HN - Aptech


 
IndexIndex  PortalPortal  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

Share | 
 

 code:05/question3/hay o cho nhap mang va lưu trữ n!

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiê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.
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiê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.
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiê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!
Về Đầu Trang Go down
Xem lý lịch thành viên
spyware
Đại Bàng Tinh
Đại Bàng  Tinh


Tổng số bài gửi : 116
Join date : 04/06/2009
Age : 32
Đến từ : HN

Bài gửiTiê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ỉ

_________________
::::Real Programmer :::::
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiê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!
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiê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é Wink
Về Đầu Trang Go down
Xem lý lịch thành viên
nbp2983
Gà con
Gà con


Tổng số bài gửi : 23
Join date : 18/06/2009

Bài gửiTiê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!!
Về Đầu Trang Go down
Xem lý lịch thành viên
spyware
Đại Bàng Tinh
Đại Bàng  Tinh


Tổng số bài gửi : 116
Join date : 04/06/2009
Age : 32
Đến từ : HN

Bài gửiTiê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?)

_________________
::::Real Programmer :::::
Về Đầu Trang Go down
Xem lý lịch thành viên
haph86
Gà mới lớn
Gà mới lớn


Tổng số bài gửi : 40
Join date : 04/06/2009

Bài gửiTiê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à Smile)
Về Đầu Trang Go down
Xem lý lịch thành viên
spyware
Đại Bàng Tinh
Đại Bàng  Tinh


Tổng số bài gửi : 116
Join date : 04/06/2009
Age : 32
Đến từ : HN

Bài gửiTiê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à Very Happy. mà giấu tài không sôi nổi làm anh em không nhận ra. sorry one.

_________________
::::Real Programmer :::::
Về Đầu Trang Go down
Xem lý lịch thành viên
spyware
Đại Bàng Tinh
Đại Bàng  Tinh


Tổng số bài gửi : 116
Join date : 04/06/2009
Age : 32
Đến từ : HN

Bài gửiTiê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]);
}

_________________
::::Real Programmer :::::
Về Đầu Trang Go down
Xem lý lịch thành viên
Sponsored content




Bài gửiTiêu đề: Re: code:05/question3/hay o cho nhap mang va lưu trữ n!   Today at 11:23 pm

Về Đầu Trang Go down
 
code:05/question3/hay o cho nhap mang va lưu trữ n!
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Code Trove
» Mang bàucaanf nhượng lại cửa hàng Trà sữa - Fastfood
» Cần cho thuê căn hộ cao cấp Richland Southern 233 Xuân Thủy, Cầu Giấy - 0918895559
» Bán Nhà HXH 8m 766 CMT8 -P5 -Q.TB -4 x 24-1 Lầu -Gía 4,2 tỷ
» Part No: 1435000Z10001 Code: 88092764 Gemu Vietnam

Permissions in this forum:Bạn không có quyền trả lời bài viết
HN - Aptech :: Khóa Học :: SEMESTER I :: C :: Bài Tập-
Chuyển đến