Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Không in đc số ngẫu nhiên vào file và đọc dữ liệu từ file

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

    Mặc định Không in đc số ngẫu nhiên vào file và đọc dữ liệu từ file

    Mình xài chương trình Visual Studio 2010 và lập trình C++ để viết bài này.
    Mọi người có thể test code này và cho mình biết vấn đề nằm ở đâu đc ko, vì mình debug thì nó ko báo lỗi gì cả, thế nhưng khi Ctrl+F5 thì file nó báo lỗi.

    Code:
    #include "stdafx.h"
    #include "stdio.h"
    #include "conio.h"
    #include "fstream"
    #include "iostream"
    #include "math.h"
    #include "time.h"
    #include "string"
    using namespace std;
    
    struct Circle
    {
    	int x, y, R;
    };
    
    int ToaDo(Circle b)
    {
    	return (b.x*b.x) + (b.y*b.y);
    }
    
    void Input(FILE *fin, Circle list[], int &n)
    {
    	printf("Nhap so hinh tron: ");
    	scanf("%d", n);
    	for(int i=0; i<n; i++)
    	{
    		list[i].x = rand() % 10 + 1;
    		list[i].y = rand() % 10 + 1;
    		list[i].R = rand() % 10 + 1;
    
    		fprintf(fin, "%f", list[i].x);
    		fprintf(fin, "%f", list[i].y);
    		fprintf(fin, "%f", list[i].R);
    	}
    }
    
    void Read(FILE *fCircle, Circle list[], int n)
    {
    	for(int i=0; i<n; i++)
    	{
    		fscanf(fCircle,"%s", &list[i].x);
    		fscanf(fCircle,"%s", &list[i].y);
    		fscanf(fCircle,"%s", &list[i].R);
    	}
    }
    
    void InsertionSort(FILE *fCircle, Circle list[], int n)
    {
    	int location;
        for (int i = 1; i < n; i++)
        {
    		int newElement = ToaDo(list[i]);
            location = i - 1;
            while (location >= 1 && ToaDo(list[location]) > newElement)
            {
    			list[location + 1] = list[location];
                location--;
            }
            newElement = ToaDo(list[location + 1]);
        }
    }
    
    //---------------Shell Sort--------------
    
    void InsertionSortS(FILE* fCircle, Circle list[], int start, int increment, int n)// insertSort dung cho shell sort
    {
    	int location, d = increment;
        for (int i = start + d ; i < n; i+=d)
        {
    		int newElement = ToaDo(list[i]);
            location = i - d;
            while (location >= start && ToaDo(list[location]) > newElement)
            {
    			list[location + d] = list[location];
                location -= d;
            }
    		newElement = ToaDo(list[location + d]);
        }
    }
    
    void ShellSort(FILE *fCircle, Circle list[], int n)
    {
    	Read(fCircle, list, n); //Doc FILE
    
    	int increment = n;
        while (increment >= 1)
        {
    		increment = (increment + 1) / 2;
            for (int start = 0; start+increment < n; start++)
            {
    			InsertionSortS(fCircle, list, start, increment, n);
            }
            increment--;
        }
    }
    
    //---------------Heap Sort--------------
    
    void FixHeap(FILE *fCircle, Circle list[], int start, int n)
    {
    	Read(fCircle, list, n);
    
    	int j = start;
    	int k = 2*start + 1;
    	int x = ToaDo(list[j]);
    
    	while(k <= n)
    	{
    		if(k < n) //Neu co du 2 phan tu lien doi
    		{
    			if(ToaDo(list[k]) < ToaDo(list[k+1])) //Xac dinh phan tu lien doi lon nhat
    			{
    				k = k + 1;
    			}
    		}
    		if(ToaDo(list[k]) < x) break; //Thoa quan he lien doi, dung lai
    		else
    		{
    			list[start] = list[k];
    			start = k; //Xet tiep kha nang hieu chinh lan truyen
    			k = 2*start + 1;
    		}
    	}
    	x = ToaDo(list[j]);
    }
    
    void BuildHeap(FILE *fCircle, Circle list[], int n)
    {
    	Read(fCircle, list, n);
    
    	int l;
    	l = (n-1)/2; //a[l] la phan tu ghep them
    
    	for(int i=l; i>0; i--);
    	{
    		FixHeap(fCircle, list, l, n);
    	}
    }
    
    void HeapSort(FILE *fCircle, Circle list[], int n)
    {
    	Read(fCircle, list, n);
    
    	int r;
    	BuildHeap(fCircle, list, n); //hieu chinh danh sach thanh heap
    	r = n-1; //r la vi tri dung cho phan tu lon nhat
    	while (r > 0)
    	{
    		swap(list[0], list[r]);
    		r--;
    		FixHeap(fCircle, list, 0, r);
    	}
    }
    
    //---------------Merge Sort--------------
    
    void Merge(FILE *fCircle, Circle list[], int, int, int, int);
    void MergeSort(FILE *fCircle, Circle list[], int l, int r)
    {
    	Read(fCircle, list, r);
    
    	if(l < r)
    	{
    		int m = (l + r) / 2;
    		MergeSort(fCircle, list, l, m);
    		MergeSort(fCircle, list, m+1, r);
    		Merge(fCircle, list, l, m, m+1, r);
    	}
    }
    
    void Merge(FILE *fCircle, Circle list[], int l, int m, int o, int r)
    {
    	int b = l; //Phan tu dau tien
    	int k = r; //Phan tu cuoi cung
    	int j = 1; //Gia tri
    	int a[100]; //Vi tri chua ket qua cua gia tri bien j trong danh sach
    	while(l <= m)
    	{
    		while(o <= r)
    		{
    			if(ToaDo(list[l]) < ToaDo(list[o]))
    			{
    				a[j] = ToaDo(list[l]);
    				l = l + 1;
    			}
    			else
    			{
    				a[j] = ToaDo(list[o]);
    				o = o + 1;
    			}
    			j = j + 1;
    		}
    	}
    
    	//Don 1 phan trong danh sach da duoc sap xep
    	if(l <= m)
    	{
    		for(int i=l; i<m; i++)
    		{
    			a[j] = ToaDo(list[i]);
    			j = j + 1;
    		}
    	}
    	else
    	{
    		for(int i=o; i<r; i++)
    		{
    			a[j] = ToaDo(list[i]);
    			j = j + 1;
    		}
    	}
    
    	//Tra ket qua tro ve danh sach
    	j  = 1;
    	for(int i=b; i<k; i++)
    	{
    		a[j] = ToaDo(list[i]);
    		j = j + 1;
    	}
    }
    
    void Output(FILE *fout, Circle list[], int n) 
    {     
    	for(int i=0; i<n; i++)
    	{
    		fprintf(fout, "%.0f", list[i].x);
    		fprintf(fout, "\t%.0f", list[i].y);
    		fprintf(fout, "\t%.0f", list[i].R);
    		fprintf(fout, " \n");
    	}
    } 
    
    //---------------Quick Sort--------------
    
    void QuickSort(FILE *fCircle, Circle list[], int l, int r)
    { 	
    	Read(fCircle, list, r);
    
    	int	i, j, x;
    	x = ToaDo(list[(l+r)/2]); // chon phan tu giua lam gia tri moc
      	i = l; j = r;
      	while(i < j) 
    	{ 	
    		while(ToaDo(list[i]) < x) i++;
         	while(ToaDo(list[j]) > x) j--;
         	if(i <= j) 
    			{  
    				swap(list[i], list[j]);
           			i++ ; j--;
    	 		}
    	}
    	if (l<j) QuickSort(fCircle, list, l, j);
    	if (i<r) QuickSort(fCircle, list, i, r);
    }
    
    //---------------Selection Sort--------------
    
    void SelectionSort(FILE *fCircle, Circle list[], int n)
    {
    	Read(fCircle, list, n);
    
    	int min;
    	for (int  i=0; i<n-1 ; i++)
    	{  
    		min = i; 
    		for(int j=i+1; j<n ; j++)
    	   	   if (ToaDo(list[j]) < ToaDo(list[min]))
    		   	min = j; //ghi nhan vi tri phan tu nho nhat
    		if (min != i)
    	   	   swap(list[min], list[i]);
    	}
    }
    
    void main(int n, int l)
    {
    	Circle list[100];
    	FILE *fin=fopen("D:\\Circleinp.txt","wt");
    	Input(fin, list, n);
    	fclose(fin);
    
    	FILE *fCircle=fopen("D:\\Circleinp.txt","rt");         
    	FILE *fout=fopen("D:\\Circleout.txt","wt");         
    	if(!fCircle||!fout)         
    	{                 
    		printf("Error!!!");                 
    		fcloseall();                 
    		return;         
    	}
    	
    	clock_t start, finish, duration;
    	start = clock();
    	ShellSort(fCircle, list, n);
    	finish = clock();
    	duration = unsigned long(finish) - unsigned long(start);
    	cout<<"\n Khoang thoi gian sap xep cua Shell Sort: "<<duration<< " ms";
    
    	start = clock();
    	HeapSort(fCircle, list, n);
    	finish = clock();
    	duration = unsigned long(finish) - unsigned long(start);
    	cout<<"\n Khoang thoi gian sap xep cua Heap Sort: "<<duration<< " ms";
    
    	start = clock();
    	MergeSort(fCircle, list, l, n);
    	finish = clock();
    	duration = unsigned long(finish) - unsigned long(start);
    	cout<<"\n Khoang thoi gian sap xep cua Merge Sort: "<<duration<< " ms";
    
    	start = clock();
    	QuickSort(fCircle, list, l, n);
    	finish = clock();
    	duration = unsigned long(finish) - unsigned long(start);
    	cout<<"\n Khoang thoi gian sap xep cua Quick Sort: "<<duration<< " ms";
    
    	start = clock();
    	InsertionSort(fCircle, list, n);
    	finish = clock();
    	duration = unsigned long(finish) - unsigned long(start);
    	cout<<"\n Khoang thoi gian sap xep cua Insertion Sort: "<<duration<< " ms";
    
    	Output(fout, list, n);
    
    	fclose(fout);         
    	fclose(fCircle);
    	getch();
    }

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Không đưa lỗi lên biết sửa làm sao?

  3. #3
    Ngày gia nhập
    04 2011
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi G.Perelman Xem bài viết
    Không đưa lỗi lên biết sửa làm sao?
    Nó ko báo lỗi trong khi debug, chỉ đến khi mình nhập số hình tròn xong thì nó mới báo lỗi FILE đó mà thôi.

  4. #4
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Lỗi ở chỗ câu lệnh
    C++ Code:
    1. scanf("%d", &n);
    trong hàm input, nhớ thêm & vào.
    P/S: Nên khai báo 2 biến int n, int l trong hàm main.

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi G.Perelman Xem bài viết
    Lỗi ở chỗ câu lệnh
    C++ Code:
    1. scanf("%d", &n);
    trong hàm input, nhớ thêm & vào.
    P/S: Nên khai báo 2 biến int n, int l trong hàm main.
    Đã thêm &n nhưng vẫn ko đc bạn ạ, còn hai biến n và l mình đã khai báo trong void main(int n, int l) rồi.

  6. #6
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Mặc định Không in đc số ngẫu nhiên vào file và đọc dữ liệu từ file

    Thế rút cục cái lỗi ấy nó hình thù như thế nào?

  7. #7
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    cho hỏi cái số ngẫu nhiên của bạn nó nằm ở dòng code nào, và code bạn viết để ghi nó vào file nằm ở dòng nào thế ^^

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Ẹc, code này của bạn nhìn vào cho thấy bạn đang nghiên cứu các thuật toán sắp xếp và độ phức tạp của chúng.
    Bạn chỉ nên post cái phần bạn thắc mắc lên thôi. Post những nhứ ko liên quan vào làm người đọc rất khó khăn trong việc xem code. Nhiều khi đâm nãn, chả còn hứng thú mà debug cho bạn lun
    Cụ thể là cái lỗi nó ra làm sao @@
    C++ Code:
    1. fprintf(fin, "%f", list[i].x);
    2.         fprintf(fin, "%f", list[i].y);
    3.         fprintf(fin, "%f", list[i].R);
    x , y ,r là các số kiểu int mà bạn dùng định dạng %f thế này liệu có ổn ko nhỉ ?
    Đã được chỉnh sửa lần cuối bởi clchicken : 19-10-2011 lúc 12:04 PM.

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

  1. Cách lấy ngẫu nhiên dữ liệu từ file txt trong Winform
    Gửi bởi tuanvi261 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 31-10-2012, 08:29 AM
  2. viết chương trình ghi n số nguyên ngẫu nhiên vào file
    Gửi bởi tinhpham trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 04-05-2012, 08:38 AM
  3. Lập trình C Lấy kiểu dữ liệu ngẫu nhiên trong file
    Gửi bởi cfan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 01-11-2010, 01:23 PM
  4. Lỗi ghi 3 trận ngẫu nhiên vào file
    Gửi bởi chuong01 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 30-10-2009, 10:59 AM
  5. Nhập dữ liệu từ file dữ liệu và tạo ngẫu nhiên?
    Gửi bởi xinchao trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 11-04-2009, 11:16 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