HN - Aptech
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

HN - Aptech


 
Trang ChínhTrang Chính  PortalPortal  GalleryGallery  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  

 

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

Go down 
3 posters
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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiêu đề: 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! Icon_minitimeThu 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
haph86
Gà mới lớn
Gà mới lớn
haph86


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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
nbp2983
Gà con
Gà con



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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri Jun 19, 2009 6:06 pm

anh xem lai rui, code chuan day, em xem lai xem!
Về Đầu Trang Go down
spyware
Đại Bàng Tinh
Đại Bàng  Tinh
spyware


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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ỉ
Về Đầu Trang Go down
nbp2983
Gà con
Gà con



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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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
haph86
Gà mới lớn
Gà mới lớn
haph86


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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
nbp2983
Gà con
Gà con



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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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
spyware
Đại Bàng Tinh
Đại Bàng  Tinh
spyware


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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?)
Về Đầu Trang Go down
haph86
Gà mới lớn
Gà mới lớn
haph86


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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
spyware
Đại Bàng Tinh
Đại Bàng  Tinh
spyware


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeFri 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.
Về Đầu Trang Go down
spyware
Đại Bàng Tinh
Đại Bàng  Tinh
spyware


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

code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitimeSat 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]);
}
Về Đầu Trang Go down
Sponsored content





code:05/question3/hay o cho nhap mang va lưu trữ n! Empty
Bài gửiTiê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! Icon_minitime

Về Đầu Trang Go down
 
code:05/question3/hay o cho nhap mang va lưu trữ n!
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» code:14/question2 va question3
» code 09 thiếu EXAM1 mời các bác vào chém code hay cực (menu)
» code:08/day du!/code nay kha hay, cac ban tham khao!!
» code 19 đã ok các chú các bác vào chém đê !!!!!!!!!!!(code fia dứơi nhé)
» Bài Tập Mảng Bổ Sung

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