1

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

дан типізований файл з даними про зростання кожного з 25 учнів класу жодна пара учнів не має однакового зросту. Впорядкувати файл зменшенням зростання учнів

#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 100
 
int main()
{
    char buf[SIZE];
    FILE* f;
    if((f = fopen("stud.txt")) == NULL)
    {
        perror("fopen");
        exit(1);
    }
    
    if((fgets(buf, SIZE, f) == NULL) && ferror(f))
    {
        fprintf(stderr, "Error reading from stream\n");
        exit(2);
    }
    
    void SortAlgo::insertionSort(int buf[], int lenD)
{
  int key = 0;
  int i = 0;
  for(int j = 1;j<lenD;j++){
    key = buf[j];
    i = j-1;
    while(i>=0 && buf[i]>key){
      buf[i+1] = buf[i];
      i = i-1;
      buf[i+1]=key;
    }
  }
}
 
for(i=0; i<5; i++)
 fprintf(f, " %d", buf[i]);
fclose(f);
 
}

допоможіть доробити

мені це на завтра потрібно зробити,
а так вчора довго мучився з цим завданням.

2

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

А що вам компілятор пише на цей код?

3

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

koala написав:

А що вам компілятор пише на цей код?

Не знаю, що пише пану компілятор, але вчителька української мови явно гикає:

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

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

4

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

помилок багато

5

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

незнаю як зробити цю задачу

6

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

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

7

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

Ну, чудово. Давайте по першому етапу. Закоментуйте решту коду і подивіться, які помилки виникають.

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

8

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

MDragniil написав:

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

Ну ось, зробіть перший етап. І спробуйте надрукувати масив. Сортування масиів - це вже стара як світ тема, гуглиться, дакдакгоиться, рамблериться і навіть бінгається. І показуйте, що виходить, тоді будемо розбиратися. Не забувайте, що програмісти дуже ліниві і навряд чи хтось буде копіювати ваш код собі, виконувати в себе і дивитися, що виходить (та й небезпечно, насправді).

9 Востаннє редагувалося MDragniil (26.12.2016 17:21:45)

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

якщо з введення, то тут не пишеться fopen

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define SIZE 100
#define IFILE "in.txt"

int main()
{
    char buf[SIZE];
    FILE* f;
    if ((f = fopen(IFILE, "r")) == NULL)
    {
        perror("fopen");
        exit(1);
    }

    if ((fgets(buf, SIZE, f) == NULL) && ferror(f))
    {
        fprintf(stderr, "Error reading from stream\n");
        exit(2);
    }

    fputs(buf, stdout);
    exit(0);
}

і пишеться помилка с4996

10

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

По-перше, fopen якраз ви написали ("не пишеться" можна казати тільки якщо на клавіатурі клавіші зламані). Опишіть конкретно, що відбувається.
А по-друге, там крім коду помилки ще й якийсь текст написаний. Звісно, ми можемо погуглити, але у вас він перед очима, і якщо ви не хочете полегшувати нам життя - то й у нас не буде бажання його полегшувати вам.

11 Востаннє редагувалося MDragniil (26.12.2016 23:40:54)

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

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

#define SIZE 100
using namespace std;


//прочитати дані з файлу в масив
int main(int min)
{
    ifstream input_file("int.txt");
    char line[SIZE];
    while (!input_file.eof())
    {
        input_file.getline(line, sizeof(line));
        cout << line << endl;
    }

    //упорядкувати масив
    int i, j;
    for (i = 0; SIZE > i; i++)
    {
        min = line[i];
        for (j = i; SIZE > j; j++)
        {
            if (min > line[j]) min = line[j];
        }
        line[i] = min;
    }

    //записати масив в файл
    ofstream infile("out.txt");
    infile.is_open();
    infile << " " << endl;

    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            infile << line[i][j] << " ";
            {
                infile << endl;
            }

            system("pause");
            return 0;
        }
    }
}

12

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

в цьому місці пишуть помилка. я не знаю що за помилка

for (int j = 0; j < SIZE; j++)
        {
            infile << line[i][j] << " ";
            {
                infile << endl;
            }

13 Востаннє редагувалося YurkoFlisk (26.12.2016 23:59:16)

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

Ви намагаєтесь використати одновимірний масив line як двовимірний, тому і помилка. А взагалі, якщо вам треба вивести одновимірний масив, навіщо два цикли? Використайте один і виводьте по одному символу line. А ще, навряд чи system("pause"); і return 0; має бути у внутрішньому циклі.

14

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

std::sort( std::begin( line ), std::end( line ), compare);
    for ( const auto & elem : line)
        std::cout << elem << " ";

ось так?

15

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

А ще, навряд чи system("pause"); і return 0; має бути у внутрішньому циклі

це виправив

16 Востаннє редагувалося YurkoFlisk (27.12.2016 00:12:01)

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

Можна так, але тут ви робите вивід в консоль. Також, тут використовується стандартний алгоритм для сортування std::sort з компаратором compare, а у вашому коді його нема(його треба написати або використовувати стандартний, просто не вказуючи третій параметр), а ще потрібно підключити заголовковий файл algorithm, в якому визначений std::sort.

17

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

bool compare( int a, int b ){
    return a < b;
}
int main(int min){
ifstream input_file("int.txt");
    char line[SIZE];
    while (!input_file.eof())
    {
        input_file.getline(line, sizeof(line));
        cout << line << endl;
    }


    std::sort( std::begin( line ), std::end( line ), compare);
    for ( const auto & elem : line)
        std::cout << elem << " ";
}

18

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

ось так?

19

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

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

#define SIZE 100
using namespace std;



int main(int min)
{
    ifstream input_file("int.txt");
    char line[SIZE];
    while (!input_file.eof())
    {
        input_file.getline(line, sizeof(line));
        cout << line << endl;
    }

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

    
    ofstream infile("out.txt");
    infile.is_open();
    infile << " " << endl;
    for (int i = 0; i < SIZE; ++i)
    {
        cout << line[i] << " ";
    }
    cout << endl;
    
    system("pause");
            return 0;
}

20

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

не сортуються