Announcement

Collapse
No announcement yet.

lỗi hàm srand

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • lỗi hàm srand

    đây là đề thi nhập môn lập trình năm ngoái ạ
    đề bài: viết các hàm thực hiện các chức năng:
    1. Nhập danh sách sinh viên, chỉ nhập tên, điểm TB được khởi tạo ngẫu nhiên
    2. Xuất danh sách sinh viên ra màn hình
    3. Tìm và xuất thông tin của sinh viên có tên đứng đầu danh sách
    em đã viết 1 bài hoàn chỉnh, khi chạy không báo lỗi, nhưng khi nhập xong tên của sinh viên đầu tiên, máy báo lỗi "..." has stopped working..."
    mong các anh chị giúp đỡ :unhappy:
    đây là code của em:
    Code:
    typedef struct SV
    {
    	char *ten;
    	float diemtb;
    }SINHVIEN;
    void nhapnsv(SV a[], int &n);
    void nhap1sv(SV a);
    void xuatnsv(SV a[], int n);
    void xuat1sv(SV a);
    void xuatsvdau(SV a[], int n);
    void main()
    {
    	SV a[20];
    	int n;
    	nhapnsv(a, n);
    	xuatnsv(a, n);
    	xuatsvdau(a, n);
    }
    void nhapnsv(SV a[], int &n)
    {
    	do
    	{
    		printf("Nhap so luong sinh vien: ");
    		scanf("%d", &n);
    	} while (n <= 0);
    	for (int i = 0; i < n; i++)
    		nhap1sv(a[i]);
    }
    void nhap1sv(SV a)
    {
    	printf("Nhap ten sinh vien: ");
    	fflush(stdin);
    	gets(a.ten);
    	srand((unsigned)time(NULL));
    	int x;
    	float y = 0.0;
    	x = rand() % 11;
    	if (x != 10)
    		(float)y = (rand() % 10 / 10);
    	a.diemtb = x + y;
    }
    void xuatnsv(SV a[], int n)
    {
    	printf("Danh sach sinh vien\n");
    	for (int i = 0; i < n; i++)
    		xuat1sv(a[i]);
    }
    void xuat1sv(SV a)
    {
    	printf("%-30s%.1f\n", a.ten, a.diemtb);
    }
    void xuatsvdau(SV a[], int n)
    {
    	SV max;
    	max = a[0];
    	for (int i = 1; i < n; i++)
    		if (strcmp(max.ten, a[i].ten) == 1)
    			max = a[i];
    	printf("Sinh vien dau danh sach:\n");
    	xuat1sv(max);
    }
    Đừng bán rẻ mình...
    Mà phải BÁN ĐÚNG GIÁ!!!

  • #2
    Tôi chưa xem code. Nhưng em đã cấp phát bộ nhớ cho chuỗi đủ để chứa cái tên chưa?
    Originally posted by 13520747 View Post
    đây là đề thi nhập môn lập trình năm ngoái ạ
    đề bài: viết các hàm thực hiện các chức năng:
    1. Nhập danh sách sinh viên, chỉ nhập tên, điểm TB được khởi tạo ngẫu nhiên
    2. Xuất danh sách sinh viên ra màn hình
    3. Tìm và xuất thông tin của sinh viên có tên đứng đầu danh sách
    em đã viết 1 bài hoàn chỉnh, khi chạy không báo lỗi, nhưng khi nhập xong tên của sinh viên đầu tiên, máy báo lỗi "..." has stopped working..."
    mong các anh chị giúp đỡ :unhappy:
    đây là code của em:
    Code:
    typedef struct SV
    {
    	char *ten;
    	float diemtb;
    }SINHVIEN;
    void nhapnsv(SV a[], int &n);
    void nhap1sv(SV a);
    void xuatnsv(SV a[], int n);
    void xuat1sv(SV a);
    void xuatsvdau(SV a[], int n);
    void main()
    {
    	SV a[20];
    	int n;
    	nhapnsv(a, n);
    	xuatnsv(a, n);
    	xuatsvdau(a, n);
    }
    void nhapnsv(SV a[], int &n)
    {
    	do
    	{
    		printf("Nhap so luong sinh vien: ");
    		scanf("%d", &n);
    	} while (n <= 0);
    	for (int i = 0; i < n; i++)
    		nhap1sv(a[i]);
    }
    void nhap1sv(SV a)
    {
    	printf("Nhap ten sinh vien: ");
    	fflush(stdin);
    	gets(a.ten);
    	srand((unsigned)time(NULL));
    	int x;
    	float y = 0.0;
    	x = rand() % 11;
    	if (x != 10)
    		(float)y = (rand() % 10 / 10);
    	a.diemtb = x + y;
    }
    void xuatnsv(SV a[], int n)
    {
    	printf("Danh sach sinh vien\n");
    	for (int i = 0; i < n; i++)
    		xuat1sv(a[i]);
    }
    void xuat1sv(SV a)
    {
    	printf("%-30s%.1f\n", a.ten, a.diemtb);
    }
    void xuatsvdau(SV a[], int n)
    {
    	SV max;
    	max = a[0];
    	for (int i = 1; i < n; i++)
    		if (strcmp(max.ten, a[i].ten) == 1)
    			max = a[i];
    	printf("Sinh vien dau danh sach:\n");
    	xuat1sv(max);
    }

    Comment


    • #3
      Bạn sai nhiều lỗi cơ bản trong bài
      Code:
      #include<stdio.h>
      #include<conio.h>
      #include<time.h>
      #include<stdlib.h>
      #include<string.h>
      
      typedef struct SINHVIEN
      {
          char ten[20];
          float diemtb;
      }SV;
      
      void nhap(SV a[], int n)
      {
      	float y;
      	for(int i=0; i<n; i++)
      	{
      		printf("\nNhap ten sinh vien thu %d: ",i+1); fflush(stdin); gets(a[i].ten);
      		srand((unsigned)time(NULL));
      		y =float(rand()%100)/10;
      		printf("Diem cua sinh vien thu %d: %.1f\n",i+1,y);
      		a[i].diemtb = y;
      	}
      }
      
      void xuat(SV a[], int n)
      {
      	for(int i=0; i<n; i++)
      	{
      		printf("\n%3s: %.1f",a[i].ten,a[i].diemtb);
      	}
      }
      
      void tim(SV a[], int n)
      {
      	SV b;
      	b=a[0];
      	for(int i=0; i<n; i++)
      		if(strcmp(b.ten,a[i].ten)>0) b=a[i];
      	printf("\nThong tin cua hoc sinh dung dau danh sach: %s-%.1f\n",b.ten,b.diemtb);
      }
      
      void main()
      {
      	int n;
      	SV a[20];
      
      	do
      	{
      		printf("Nhap so luong sinh vien: ");
      		scanf("%d", &n);
      	} while (n <= 0);
      
      	nhap(a,n);
      	xuat(a,n);
      	tim(a,n);
      
      	getch();
      	
      }
      I don't know the secret to success, but the secret to failure is trying to please everyone

      Comment


      • #4
        cảm ơn bạn
        nhưng trong đề, phần khai báo cấu trúc như sau:
        Code:
        typedef struct SV
        {
        	char *ten;
        	float diemtb;
        }SINHVIEN;
        còn những lỗi nhỏ bạn sửa cho mình là do mình chưa chạy được bài nên chưa phát hiện ra lỗi sai :3

        Originally posted by tara95 View Post
        Bạn sai nhiều lỗi cơ bản trong bài
        Code:
        #include<stdio.h>
        #include<conio.h>
        #include<time.h>
        #include<stdlib.h>
        #include<string.h>
        
        typedef struct SINHVIEN
        {
            char ten[20];
            float diemtb;
        }SV;
        
        void nhap(SV a[], int n)
        {
        	float y;
        	for(int i=0; i<n; i++)
        	{
        		printf("\nNhap ten sinh vien thu %d: ",i+1); fflush(stdin); gets(a[i].ten);
        		srand((unsigned)time(NULL));
        		y =float(rand()%100)/10;
        		printf("Diem cua sinh vien thu %d: %.1f\n",i+1,y);
        		a[i].diemtb = y;
        	}
        }
        
        void xuat(SV a[], int n)
        {
        	for(int i=0; i<n; i++)
        	{
        		printf("\n%3s: %.1f",a[i].ten,a[i].diemtb);
        	}
        }
        
        void tim(SV a[], int n)
        {
        	SV b;
        	b=a[0];
        	for(int i=0; i<n; i++)
        		if(strcmp(b.ten,a[i].ten)>0) b=a[i];
        	printf("\nThong tin cua hoc sinh dung dau danh sach: %s-%.1f\n",b.ten,b.diemtb);
        }
        
        void main()
        {
        	int n;
        	SV a[20];
        
        	do
        	{
        		printf("Nhap so luong sinh vien: ");
        		scanf("%d", &n);
        	} while (n <= 0);
        
        	nhap(a,n);
        	xuat(a,n);
        	tim(a,n);
        
        	getch();
        	
        }
        Đừng bán rẻ mình...
        Mà phải BÁN ĐÚNG GIÁ!!!

        Comment


        • #5
          Originally posted by truonganpn View Post
          Tôi chưa xem code. Nhưng em đã cấp phát bộ nhớ cho chuỗi đủ để chứa cái tên chưa?
          cảm ơn anh, em đã làm được
          Đừng bán rẻ mình...
          Mà phải BÁN ĐÚNG GIÁ!!!

          Comment


          • #6
            Originally posted by 13520747 View Post
            cảm ơn anh, em đã làm được
            Mà ai lộ cái đề năm ngoái của tui cho em thế nhỉ.

            Comment


            • #7
              Originally posted by truonganpn View Post
              Mà ai lộ cái đề năm ngoái của tui cho em thế nhỉ.
              em down đâu đó trên forum này mà thầy
              Đừng bán rẻ mình...
              Mà phải BÁN ĐÚNG GIÁ!!!

              Comment


              • #8
                bạn làm được rồi à share code xem với
                Designer and Photographer
                Contact me:
                0168 3 909 837 - 0905 39 49 95
                Skype: trung3105@outlook.com

                Comment


                • #9
                  Originally posted by 13520943 View Post
                  bạn làm được rồi à share code xem với
                  code tự viết + code bạn kia sửa + gợi ý của thầy => code hoàn chỉnh
                  mặc dù chưa được đẹp cho lắm :look_down:
                  Code:
                  typedef struct SV
                  {
                  	char *ten;
                  	float diemtb;
                  }SINHVIEN;
                  void nhapnsv(SV a[], int &n);
                  void nhap1sv(SV &a);
                  void xuatnsv(SV a[], int n);
                  void xuat1sv(SV a);
                  void xuatsvdau(SV a[], int n);
                  void main()
                  {
                  	SV a[20];
                  	int n;
                  	nhapnsv(a, n);
                  	xuatnsv(a, n);
                  	xuatsvdau(a, n);
                  }
                  void nhapnsv(SV a[], int &n)
                  {
                  	do
                  	{
                  		printf("Nhap so luong sinh vien: ");
                  		scanf("%d", &n);
                  	} while (n <= 0);
                  	for (int i = 0; i < n; i++)
                  		a[i].ten = new char[20];
                  	for (int i = 0; i < n; i++)
                  		nhap1sv(a[i]);
                  }
                  void nhap1sv(SV &a)
                  {
                  	printf("Nhap ten sinh vien: ");
                  	fflush(stdin);
                  	gets(a.ten);
                  	srand((unsigned)time(NULL));
                  	float x;
                  	x = float(rand() % 100) / 10;
                  	a.diemtb = x;
                  }
                  void xuatnsv(SV a[], int n)
                  {
                  	printf("Danh sach sinh vien\n");
                  	for (int i = 0; i < n; i++)
                  		xuat1sv(a[i]);
                  }
                  void xuat1sv(SV a)
                  {
                  	printf("%-10s%.1f\n", a.ten, a.diemtb);
                  }
                  void xuatsvdau(SV a[], int n)
                  {
                  	SV max;
                  	max = a[0];
                  	for (int i = 1; i < n; i++)
                  		if (strcmp(max.ten, a[i].ten) == 1)
                  			max = a[i];
                  	printf("Sinh vien dau danh sach:\n");
                  	xuat1sv(max);
                  }
                  Đừng bán rẻ mình...
                  Mà phải BÁN ĐÚNG GIÁ!!!

                  Comment


                  • #10
                    Originally posted by 13520747 View Post
                    code tự viết + code bạn kia sửa + gợi ý của thầy => code hoàn chỉnh
                    mặc dù chưa được đẹp cho lắm :look_down:
                    Code thiếu:amazed:
                    I don't know the secret to success, but the secret to failure is trying to please everyone

                    Comment


                    • #11
                      Originally posted by tara95 View Post
                      Code thiếu:amazed:
                      thiếu j bạn?
                      chạy đủ các yêu cầu của đề mà
                      Đừng bán rẻ mình...
                      Mà phải BÁN ĐÚNG GIÁ!!!

                      Comment


                      • #12
                        Originally posted by 13520747 View Post
                        thiếu j bạn?
                        chạy đủ các yêu cầu của đề mà
                        Cậu cấp phát động mà chưa chịu giải phóng, mặc dù không bị thông báo lỗi. Đây là chương trình nhỏ thì không sao, nhưng chương trình lớn thì chắc chắn có chuyện:angry:
                        I don't know the secret to success, but the secret to failure is trying to please everyone

                        Comment


                        • #13
                          Originally posted by tara95 View Post
                          Cậu cấp phát động mà chưa chịu giải phóng, mặc dù không bị thông báo lỗi. Đây là chương trình nhỏ thì không sao, nhưng chương trình lớn thì chắc chắn có chuyện:angry:
                          à há :embarrassed:
                          với chương trình lớn thì mình nghĩ delete nó đi mới là có chuyện ấy
                          lỡ như bạn cần trích xuất gì đó ở đây thì sao )
                          mặt khác đề cũng không hề đả động gì đến vụ cấp phát động ^^
                          nếu có chắc chắn mình đã không ở đây
                          nhưng dù sao cũng cảm ơn bạn, đúng là trong bài này ta nên delete nó sau khi thực hiện xong bài :sogood:
                          Đừng bán rẻ mình...
                          Mà phải BÁN ĐÚNG GIÁ!!!

                          Comment

                          LHQC

                          Collapse
                          Working...
                          X