30/09/2018, 16:59

Hiện cửa sổ báo "Has Stopped Worrking" khi chạy chương trình

Code này sai ở chỗ não vậy? Sắp xếp dãy theo thứ tự tăng dần, đọc dữ liệu từ File. In:n=5, a[ ] 3 2 4 5 1. Out: n=5, a[ ] 1 2 3 4 5.

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>

using namespace std;

void doctep( float a[], int &n)
{
    fstream fdoc("data.txt",ios::in);
    fdoc >> n;
    for (int i=0;i<n;i++)
        fdoc >> a[i];
    fdoc.close();
}
void doicho(float x, float y)
{
    float temp;
    if (x>y)
    {
    temp=x;
    x=y;
    y=temp;
    }
}
void selectsort(float a[], int n)
{
    int Min;
    for (int i=0;i<n-1;i++)
    {
        for (int j=i+1; j<n; j++)
        {
            if(a[j]<a[Min])
            {
                Min=j;
                doicho(a[Min],a[j]);
            }
        }
    }
}
void ghitep(float a[], int &n)
{
    fstream fghi("ketqua.txt",ios::out);
    fghi << " n = " << n << endl;
    for (int i=0;i<n;i++)
    fghi << a[i];
    fghi.close();
}
main()
{
    int n;
    float a[10],x,y;
    doctep(a,n);
    selectsort(a,n);
    doicho(x,y);
    ghitep(a,n);
}
Thành Phạm viết 19:14 ngày 30/09/2018

Bạn có thể “khai báo” thêm một chút thông tin là code này là code về cái gì, đầu vào như nào, đầu ra muốn có kết quả như nào, các thông tin lỗi của Compiler,… chứ bạn chỉ post code thế này mọi người không có thời gian kiểm tra hết toàn bộ code cho bạn đâu

Phạm Hoàng Tuấn viết 19:07 ngày 30/09/2018

Bạn sửa lại cái tiêu đề dùm mình nhé ! Bạn có thể để " Lỗi Has Stopped Working" được rồi , còn lại bỏ vào trong nội dung topic.

Tâm Ninja viết 18:59 ngày 30/09/2018

Không có ý bất lịch sự nhưng mà bạn có thể chỉ dùng một lại human language (Từ này dịch qua tiếng Việt nghe nó bất lịch sự. Ngôn ngữ con người để phân biệt với ngôn ngữ máy tính thôi. Không có ý nói bạn không phải…) trong code thôi có được không? Hoặc là tiếng Anh hoặc là tiếng Việt thôi.

nhatlonggunz viết 19:02 ngày 30/09/2018

Mình thấy trong cái Selection Sort, bạn đã cho Min = cái gì đâu ?
Lúc này Min là giá trị rác, làm sao bạn có thể so sánh

 if(a[j]<a[Min])
            {
                Min=j;
                doicho(a[Min],a[j]);
            }

được

Quang Duong viết 19:09 ngày 30/09/2018

Lúc này Min là giá trị rác, làm sao bạn có thể so sánh

Bạn này nói đúng nè, mình góp ý thêm chỗ chỗ hàm đổi chỗ

void doicho(float x, float y)
{
float temp;
if (x>y)
{
temp=x;
x=y;
y=temp;
}
}

Mình nghĩ chỗ này phải dùng con trỏ, vì code như vậy thì khi thoát khỏi hàm cũng chẳng thay đổi được gì cả.
Lâu nay code Java ko biết nhớ vậy có đúng ko nữa ^^

nhatlonggunz viết 19:06 ngày 30/09/2018

A! Đúng rồi anh, em không để ý cái đó
Mà em thường dùng reference, nó dễ dùng hơn, thêm dấu & vô thôi.

void doicho(float x, float y)

chỗ này bạn thêm dấu & sau chữ float

void doicho(float& x, float& y)

Chắc ref dùng được cho float mà phải không nhỉ ? @ltd

Quang Duong viết 19:14 ngày 30/09/2018

chỗ này bạn thêm dấu & sau chữ float

Bạn có hiểu cơ chế truyền tham biến này không, giải thích cho mọi người với. Nếu bạn giải thích được thì mình nghĩ bạn sẽ nắm vững thêm một phần kiến trúc của con trỏ đấy ^^.
PS: nếu bạn dụng reference thì bạn đã dùng C++ chứ ko phải C nữa.

nhatlonggunz viết 19:13 ngày 30/09/2018

Sorry anh, em chưa học về nó, nhưng thấy nó có công dụng tựa tựa con trỏ mà lại dễ dùng hơn nên em hay xài nó thôi. Chứ kiến thức em non lắm.
Nếu cái float& kia không được thì anh giải thích giùm em để em edit lại (không dân chúng chửi)

thì bạn đã dùng C++ chứ ko phải C nữa

Bài này có tag là C++ mà anh ?

Quang Duong viết 19:01 ngày 30/09/2018

Cái đó thì dùng được, nhưng mà cơ chế bên dưới nó làm thì cũng là con trỏ đấy ^^, bạn làm một hàm y vậy mà trong C thì sẽ hiểu cơ chế nó ngay.
Tham khảo thêm: http://www.cplusplus.com/forum/general/47797/
Sorry bạn mình ko để ý tag C++, hehe

nhatlonggunz viết 19:05 ngày 30/09/2018

Hồi trước em làm cái đó bằng con trỏ mà giờ thấy ref dễ hơn nên chuyển qua ref

Bài liên quan
0