21 Востаннє редагувалося koala (27.12.2016 14:43:30)

Re: Впорядкувати файл зменшенням зростання учнів

Одразу зазначу, що ви змінили мову програмування і ані слова про це не сказали: на початку була C, а зараз - C++ (до того ж в процесі ви згадували фішки з C++11; добре, звичайно, що ви намагаєтеся розібратися в сучасних тенденціях, але бажано спершу вивчити основи).
Давайте все ж розберемося з першою частиною. Вам треба прочитати з файлу зрости учнів. Для цього доведеться відповісти на два питання: як вони зберігаються у файлі та як вони представлені в програмі. Судячи з того що файл має розширення txt, він текстовий; ви не сказали, в якій саме формі записані зрости (сантиметри, дюйми, суміш, ще щось), але ризикну припустити, що це - цілі числа без додаткових позначок. Сподіваюся, між числами в файлі знаходяться пробіли або символи нового рядка, а не якісь крапки з комами. Насправді, це в C++ нечасто трапляється, щоб конструкції мови дозволяли подібну свободу (один чи кілька пробіли, табуляцій і нових рядків між числами), але тут саме той випадок.
Отже, з питанням "звідки" розібралися, тепер - куди ми це читаємо? Де у вас масив зростів, який ви хочете сортувати? line - масив символів. Навряд чи ви мали на увазі, що в одного хлопця зріст '2', в другого - 'а', а в третього - '@'. Пригадайте, який тип в C/C++ зберігає цілі числа? Правильно - int. Отже,

int heights[SIZE];
int count=-1;//номер останнього учня в масиві
ifstream infile("int.txt");
while( !infile.eof() ) //доки не досягли кінця файлу
{
    count++;//збільшуємо лічильник
    infile>>heights[count];//>> ігнорує розділювачі: пробіли, табуляції та нові рядки
}

Звертаю увагу - метод eof перевіряє не стан файлу, а результат останньої операції читання. Відповідно, те, що прочиталося в масив при останній ітерації, буде некоректним (оскільки при цьому було досягнуто кінця файлу), а отже, всього в масиві буде count елементів.
В принципі, цикл можна скоротити до

while(infile>>heights[++count]);

Коли потік стикається з помилкою, він починає повертати false при перетворенні на bool. Але для вас, гадаю, поки зрозуміліша перша, розлогіша форма.

Подякували: Yola1

22

Re: Впорядкувати файл зменшенням зростання учнів

Це виводитиме символи, типу "ab$."

char line[SIZE];
cout << line[i] << " ";

щоб виводило сантиметри треба так

char line[SIZE];
cout << (unsigned int)line[i] << " ";

23

Re: Впорядкувати файл зменшенням зростання учнів

#include <fstream>
#include <iostream>
#include <cstdlib> 

#define SIZE 100
using namespace std;



int main(int min)
{
    int heights[SIZE];
    int count = -1;
    ifstream infile("int.txt");
    while (!infile.eof())
    {
        count++;
        infile >> heights[count];
    }

    for (int i = 1; i < SIZE; ++i)
    {
        for (int r = 0; r < SIZE - i; r++)
        {
            if (heights[r] < heights[r + 1])
            {
                int temp = heights[r];
                heights[r] = heights[r + 1];
                heights[r + 1] = temp;
            }
        }
    }


    ofstream infile("out.txt");
    infile.is_open();
    while (infile >> heights[++count]);
    for (int i = 0; i < SIZE; ++i)
    {
        char line[SIZE];
        cout << (unsigned int)line[i] << " ";
    }
    cout << endl;

    system("pause");
    return 0;
}

не можу зрозуміти помилку

24

Re: Впорядкувати файл зменшенням зростання учнів

MDragniil написав:

не можу зрозуміти помилку

Ми теж. А знаєте, чому? Бо ви не написали, звідки ви взяли, що там є помилка.
Починайте вже спілкуватися. Ми не ваш вчитель, щоб контрольну роботу оцінювати. У вас руки повідпадають, якщо ви перед кодом напишете "доробив до такого", а після - "але тепер виникає помилка (опис), я не можу зрозуміти, від чого"?

25

Re: Впорядкувати файл зменшенням зростання учнів

ну перше це недопустимо для class
а друге це infile

26

Re: Впорядкувати файл зменшенням зростання учнів

перевизначення

27

Re: Впорядкувати файл зменшенням зростання учнів

Що "перше", що "друге"? Ви пишете, що "не можу зрозуміти помилку", а тепер у вас "перше" і "друге". Ну в чому ваша проблема? Чи ви гадаєте, що ми бачимо ваш монітор?

28

Re: Впорядкувати файл зменшенням зростання учнів

мені скрин скинути?

29

Re: Впорядкувати файл зменшенням зростання учнів

і мені треба сьогодні показувати
допоможіть

30

Re: Впорядкувати файл зменшенням зростання учнів

А це залежить від того, чого ви хочете досягти. Якщо ви хочете, щоб вам допомогли, то, мабуть, вам необхідно надати максимум доступної для вас, але недоступної іншим інформації про те, що стосується вашої проблеми, правда? Звісно, я можу загнати цей код в компілятор, але, по-перше, не факт, що мій компілятор видасть такі самі повідомлення, що й у вас, а по-друге, якщо я знаю, що ви це вже зробили, але через лінощі не хочете мені показувати - то звідки у мене виникне бажання робити це?

31

Re: Впорядкувати файл зменшенням зростання учнів

зрозумію, але я не знаю я це зробити.
коли ми вчили файли, я болів і я не розумію добре цю тему + я взагалі не розумію я робити цю справу.
Я розумію що спочатку виводишь файл потім сортіруешь, а потім виводишь відповідь на монітор.

32

Re: Впорядкувати файл зменшенням зростання учнів

Ну, не хочете - то не треба.

33

Re: Впорядкувати файл зменшенням зростання учнів

і у мене взагалі мало часу щоб сдати цю справу

34

Re: Впорядкувати файл зменшенням зростання учнів

І в умові у вас ані слова про "виводишь відповідь на монітор" немає.

35

Re: Впорядкувати файл зменшенням зростання учнів

MDragniil написав:

і у мене взагалі мало часу щоб сдати цю справу

Ну то припиняйте його витрачати і або показуйте, які повідомлення про помилки вам видає компілятор, або вже якось самі.

36

Re: Впорядкувати файл зменшенням зростання учнів

Воно у вас не компілюється? Чи запускається і падає чи неправильний результат видає?

Якщо видається помилка, то скопіюйте повідомлення і вставте сюди. Вам підкажуть, що треба зробити, щоб виправити.

37

Re: Впорядкувати файл зменшенням зростання учнів

#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int main()
{
    vector<int> heights;
    ifstream infile("int.txt");
    int temp;
    while (infile >> temp) {
        heights.push_back(temp);
    }

    sort(heights.begin(), heights.end(), greater<int>());

    ofstream outfile("out.txt");
    for(auto x:heights){
        outfile<<x<<"\n";
    }
    return 0;
}