Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 21 kết quả

Đề tài: Tạo một số float ngẫu nhiên | Tạo Random số float

  1. #1
    Ngày gia nhập
    07 2007
    Bài viết
    7

    Mặc định Tạo một số float ngẫu nhiên | Tạo Random số float

    Có ai biết cách tạo random số có kiểu float không nhỉ .? Nhớ rằng đây là kiểu float nhé chứ không phải là số kiểu nguyên dương bằng cách sử dụng hàm rand()

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

    chẹp chả biết
    float x=rand();
    float y=rand();
    float n=x/y;
    chả biết nữa tầm bậy sai thì bỏ wa!

  3. #3
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    sử dụng hàm randomize() và random().
    In code we trust

  4. #4
    Ngày gia nhập
    07 2007
    Bài viết
    7

    Thanks các bạn đã trả lời .Tiếc quá bài của tôi viết bằng C nhưng lại phải dịch trên VS C++ mà trong VS C++ lại không sử dụng được hàm randomize() và random().Đừng hỏi tôi vì sao phải dịch trên VS C++ vì giải thích dài dòng lắm . Tôi có thể nói rõ ý của tôi như thế này : Tôi muốn tạo random các tọa độ trên mặt phẳng (tức là có cả tọa độ số âm và số dương) . Tôi đã sử dụng cách viết như sau :
    srand( (float)time( NULL ) );
    for(int i=1;i<=n;i++)
    {
    A[i].x=(float)rand()*0.1;
    A[i].y=(float)rand()*0.1;
    }
    nhưng hàm rand() lại trả về kiểu unsigned Int tức là không thể có được tọa độ các số âm . Mong các bạn giúp đỡ .
    Đã được chỉnh sửa lần cuối bởi md_vn : 02-07-2007 lúc 11:24 PM.

  5. #5
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Sao lại randomize() với random() gì ở đây, đang nói Pascal sao?
    Hàm srand trả về số ngẫu nhiên kiểu int, muốn tạo ra số ngẫu nhiên kiểu float thì bạn có thể sử dụng cách sau:
    (rand()/float(RAND_MAX)) * RAND_MAX;
    Còn muốn tạo ra được số ngẫu nhiên cả âm và dương thì cũng lại xét một giá trị ngẫu nhiên nữa thôi.

  6. #6
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Mặc định Tạo một số float ngẫu nhiên | Tạo Random số float

    Trích dẫn Nguyên bản được gửi bởi vinhie47 Xem bài viết
    Sao lại randomize() với random() gì ở đây, đang nói Pascal sao?
    Hàm srand trả về số ngẫu nhiên kiểu int, muốn tạo ra số ngẫu nhiên kiểu float thì bạn có thể sử dụng cách sau:
    (rand()/float(RAND_MAX)) * RAND_MAX;
    Còn muốn tạo ra được số ngẫu nhiên cả âm và dương thì cũng lại xét một giá trị ngẫu nhiên nữa thôi.
    Trời học đến từng này rồi mà không phân biệt nổi Pascal với C/C++.
    Đấy là cụ thể về 3 hàm random, randomize, rand

    Code:
    #include <stdlib.h>
    int random(int num);
    
    Description
    
    Random number generator.
    random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers.
    
    Return Value
    
    random returns a number between 0 and (num-1).
    Code:
    Syntax
    
    #include <stdlib.h>
    #include <time.h>
    void randomize(void);
    
    Description
    
    Initializes random number generator.
    randomize initializes the random number generator with a random value.
    
    Return Value
    
    None.
    Code:
    #include <stdlib.h>
    int rand(void);
    
    Description
    
    Random number generator.
    rand uses a multiplicative congruential random number generator with period 2 to the 32nd power to return successive pseudorandom numbers in the range from 0 to RAND_MAX. The symbolic constant RAND_MAX is defined in stdlib.h.
    
    Return Value
    
    rand returns the generated pseudorandom number.
    Đã được chỉnh sửa lần cuối bởi iamvtn : 03-07-2007 lúc 08:33 AM.
    In code we trust

  7. #7
    Ngày gia nhập
    07 2007
    Bài viết
    7

    Để tôi test thử xem thế nào
    Đã được chỉnh sửa lần cuối bởi md_vn : 03-07-2007 lúc 09:11 AM.

  8. #8
    Ngày gia nhập
    07 2007
    Bài viết
    7

    thôi tôi cứ gửi bài lên cho các ban dễ test
    Code:
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct
     Point{
      float x, y;
     };
    
    int n,m;
    
    Point *A, *B;
    int readFile(char *file)
    {
     FILE *f;
    
     if ((f = fopen(file, "rt"))== NULL)
     {
    	return 0;
     }
     else{
     fscanf( f, "%d", &n );
     A = new Point[n];
     for( int i = 1;i <=n; i++ )
      fscanf( f, "%f%f", &A[i].x, &A[i].y );
      }
    
     fclose( f );
     return 1;
    }
    
    
    float angle( Point p1, Point p2 )
    {
     float t;
     float dx = p2.x - p1.x;
     float dy = p2.y - p1.y;
    
     if( ( !dx ) && ( !dy  ) )
      t = 0;
     else
      t = dy/( abs( dx ) + abs( dy ) );
     if( dx < 0 )
      t = 2 - t;
     else if( dy < 0 )
      t = 4 + t;
     return t*90;
    }
    
    int direct( Point p1, Point p2, Point p3 )
    {
     float dx1 = p2.x - p1.x;
     float dy1 = p2.y - p1.y;
     float dx2 = p3.x - p1.x;
     float dy2 = p3.y - p1.y;
    
     if( dy2*dx1 - dy1*dx2 > 0 )
      return 1;
     if( dy2*dx1 - dy1*dx2 < 0 )
      return -1;
     int d;
     if( ( dx1*dx2 ) < 0 || ( dy1*dy2 ) < 0 )
      d = 1;
     else
      if( ( sqrt( dx1 ) + sqrt( dy1 ) ) >= ( sqrt( dx2 ) + sqrt( dy2 ) ) )
    	d = 0;
      else
    	d = 1;
     return d;
    }
    
    void sort(int l,int r)
    {
     float key,tmpAngle;
     float *Angle = new float[n];
     int i,j;
     Point tmpPoint;
     for(i=2;i<=n;i++)
    	Angle[i]=angle(A[1],A[i]);
     i=l;
     j=r;
     key=Angle[(l+r)/2];
     do{
    	while(Angle[i]<key)
    		i++;
    	while(key<Angle[j])
    		j--;
    	if(i<=j)
    	{
    		tmpPoint=A[i];A[i]=A[j];A[j]=tmpPoint;
    		tmpAngle=Angle[i];
    		Angle[i]=Angle[j];
    		Angle[j]=tmpAngle;
    		i++;
    		j--;
    	}
     }while(i<=j);
     if(l<j)
    	sort(l,j);
     if(i<r)
    	sort(i,r);
    }
    
    void graham()
    {
     int min = 1;
     //float Angle[MAX];
     // tim diem co hoanh do thap nhat
     for( int i = 2; i <= n; i++ )
      if( A[i].y < A[min].y )
    	min = i;
      // tim diem co hoanh do = hoanh do cua diem thap nhat
      // co tung do lon nhat
     for( i = 1; i <= n; i++ )
      if( ( A[i].y == A[min].y ) && ( A[i].x > A[min].x ) )
    	min = i;
    
    // doi vi tri diem vua tim duoc den vi tri cua A[1]
     Point tmpPoint = A[1];
     A[1] = A[min];
     A[min] = tmpPoint;
    B = new Point[n];
     B[0] = A[n];
    
     sort(2,n);
     m = 3;
     for( i = 1; i <= 3; i++ )
      B[i] = A[i];
     int d;
     for( i = 4; i <= n; i++ ){
      while( direct( B[m-1], B[m], A[i] ) <= 0 )
       m = m - 1;
      m = m + 1;
      B[m] = A[i];
     } 
    }
    void writeFile(char *file)
    {
     FILE *f = fopen( file, "wt" );
     for( int i = 1; i <= m; i++ )
      fprintf( f, " ( %1.1f, %1.0f ) ->", B[i].x, B[i].y );
     fprintf( f, " ( %1.1f, %1.0f )", B[1].x, B[1].y  );
     fclose( f );
    }
    void showScreen()
    {
    	char Yes;
    	char SFile[25];
    	system("cls");
    	printf("\n\n\n\n\n\n");
    	printf("                   KET QUA TIM THAY BAO LOI LA      \n");
    	printf("\n\n\n");
    	for(int i=1;i<=m;i++)
    	printf("                          ( %1.1f,%1.1f )\n", B[i].x, B[i].y );
    	printf("                          ( %1.1f,%1.1f )", B[1].x, B[1].y  );
    	printf("\n           Ban co muon luu ket qua vao File ?(C/K)");
    	Yes=getch();
        if(Yes=='c' || Yes=='C')
        {
    	start:
    	    system("cls");
    		printf("Ten File can luu :");
    		fflush(stdin);
    		gets(SFile);
    		if(strlen(SFile)==0)
    		{
    			printf("Ten File phai nhap vao!");
    			getch();
    			goto start;
    		}
    		else
    		{
    			writeFile(SFile);
    		}
    		
    	}
    	
    }
    
    int inpFile()
    {
    begin:
    	system("cls");
    	printf("\n\n\n\n\n\n\n\n");
    	printf("                                                                           \n");
    	printf("                          LAY TOA DO DIEM TREN MAT PHANG TU FILE           \n");
    	printf("                                                                           \n");
    	printf("                                                                           \n");
    	printf("                    Ten File : ");
    
    	char string[25];
    	fflush(stdin);
    	gets(string);
    	if(strlen(string)==0)
    	{
    		printf("Ten File phai nhap vao!");
    		getch();
    		goto begin;
    		
    	}
    	if(readFile(string)==0)
    	{
    		printf("Khong the mo tep hoac tep khong ton tai!");
    		getch();
    		goto begin;
    	}else{
    	graham();
    	showScreen();
    	}
    	return 0;
    }
    int CheckNumber(char number[])
    {
    	 int i=0;
    	 while(number[i] != '\0')  
    	   if (number[i] < '0' || number[i] > '9')
    		  return -1;
    	   else i++;
    	  return atoi(number);
    }
    int showInpPoint()
    {
    	system("cls");
    	printf("  \n\n\n\n\n\n");
    	printf("                          NHAP SO DIEM TREN MAT PHANG                      \n");
    	printf("                                                                           \n");
    	printf("                                                                           \n");
    	printf("                    So diem can nhap :");
    
    	return 0;
    }
    
    int inpData()
    {
    	char So[11];
    start:	showInpPoint();
    	do
    	   {	  	 	
    	   flushall();
    	   gets(So);
    	   n = CheckNumber(So);
    	   if(n < 0 && strlen(So) !=0) 
    	   {
    		   printf("\n Phai nhap kieu so!");
    		   getch();
    		   goto start;
    	   }
    	}
    	 while(n < 0 || strlen(So) ==0);
        
    	A = new Point[n];
    	if(n<3)
    	{
    	
    		printf("So diem phai lon hon 2");
    		getch();
    		goto start;
    	}else{
    	system("cls");
    	printf("  \n\n\n\n\n\n");
    	printf("                          NHAP TOA DO CAC DIEM TREN MAT PHANG \n\n\n");
    	for(int i=1;i<=n;i++)
    	{	
    		printf("                    Toa do X[%d] : ",i);
    		scanf("%f",&A[i].x);
    		printf("                    Toa do Y[%d] : ",i);
    		scanf("%f",&A[i].y);
    
    	}
    	graham();
    	showScreen();
    
    	}
    
    	return 0;
    }
    int inpRandom()
    {
    	
    	char So[11];
    	start:	showInpPoint();
    	do
    	   {	  	 	
    	   flushall();
    	   gets(So);
    	   n = CheckNumber(So);
    	   if(n < 0 && strlen(So) !=0) 
    	   {
    		   printf("\n Phai nhap kieu so!");
    		   getch();
    		   goto start;
    	   }
    	}
    	 while(n < 0 || strlen(So) ==0);
    
    	A = new Point[n];
    	if(n<3)
    	{
    	
    		printf("So diem phai lon hon 2");
    		getch();
    		goto start;
    	}else{
    
    	//	srand( (float)time( NULL ) );
    	for(int i=1;i<=n;i++)
    	{
    		A[i].x=(float)rand()*0.1;
    		A[i].y=(float)rand()*0.1;
    	}
    
    	graham();
    	showScreen();
    
    	}
    	return 0;
    
    }
    int Menu()
    {
    	system("cls");
    	int code;
    	printf("\n\n\n\n\n\n");
    	printf("               CHUONG TRINH TIM BAO LOI CUA TAP DIEM TREN MAT PHANG       \n\n\n\n");
    	printf("                       1. Nhap toa do cac diem tu ban phim \n");
    	printf("                       2. Nhap toa do cac diem tu File \n");
    	printf("                       3. Tao ngau nhien cac toa do  \n");
    	printf("                       0. Thoat chuong trinh  \n\n\n");
    	printf("                        Chon chuc nang: ");
    	do {
    	code = getch();
    	} while (code>'3' || code<'0');
    	putc(code, stdout);
    	return code -'0';
    }
    
    void main()
    {
    
      int chose;
      do {
    	chose = Menu();
    	switch(chose)
    	{
    	  case 1:
    			inpData();
    			break;
    	  case 2:inpFile();
    			break;
    	  case 3:inpRandom();
    			break;
    	  case 4:
    			break;
    	  case 0:
    		  exit(1);
    		  break;	
    	}
    
      } while (chose != 0);		  
    }
    bài của tôi là như thế các bạn hãy test hộ tôi cái phần nhập ngẫu nhiên . Tôi làm nó chỉ ra các kết quả dương thôi .
    Đã được chỉnh sửa lần cuối bởi iamvtn : 03-07-2007 lúc 11:01 AM.

  9. #9
    Ngày gia nhập
    04 2007
    Bài viết
    16

    Bạn cho một một phần random dấu nữa, một biến flagSign = rand() % 2; nếu flagSign == 0 thì dấu là dương, ngược lại là âm. Vậy thôi.

  10. #10
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Nhảm nhí quá, bộ dịch C/C++ nào mà có hàm randomize() vậy?

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

  1. Tạo biến ngẫu nhiên kiểu float sử dụng hàm rand() trong C/C++ như thế nào?
    Gửi bởi 50902116 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 27-02-2014, 04:35 PM
  2. Code stack bằng danh sách liên kết viết bằng C. Sửa lỗi "cannot convert 'float' to 'float'... "
    Gửi bởi giangcoi92 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 11
    Bài viết cuối: 28-11-2011, 10:29 PM
  3. giải thích giùm mình lỗi cannot convert from 'float' to 'float*'
    Gửi bởi hoanghiep9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 06-05-2011, 08:20 PM
  4. float và double trong C++: warning C4244: conversion from 'double' to 'float'
    Gửi bởi dungtimtoinua2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 18-03-2010, 11:25 PM
  5. cannot convert float(*)[] to float* for argument '1' to void
    Gửi bởi vanphamvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-12-2008, 05:12 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