Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2022, 13:33   #1
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию числовой файл F

Ввести числовой файл F . Переставить в нём все компоненты, предшествующие минимальной в обратном порядке.
Определить в изменённом файле на какой позиции находится максимум.Файл вывести как до, так и после преобразования.
Код в целом рабочий, только переставляет все компоненты, включая минимальный.
Буду очень признателен тому, кто поможет)
Код:
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    FILE *f;
    f=fopen("1.txt","w");
    cout<<"\nVvod file:";
    int i=0,b;
    cout<<"\nVvod 0-go komponenta ili 555 ";
    cin>>b;
    while (b!=555)
    {
        fwrite(&b,sizeof(b),1,f);       
        i++;
        cout<<"\nVvod "<<i<<"-go komponenta ";
        cin>>b;
    }
    fclose(f);
    f=fopen("1.txt","r");
    cout<<"\nVivod file:";
    while (fread(&b,sizeof(b),1,f))
    {
        cout<<"\t"<<b;
    }
    fclose(f);
    
    f=fopen("1.txt","r");
    int min, imin;
    if (fread(&b, sizeof(b), 1, f)) {
        min = b;
        imin = 0;
    }
    while (fread(&b,sizeof(b),1,f)) 
        if(b<min){
            min=b;
            imin=ftell(f) / sizeof(b);
        } fclose(f);
    f=fopen("1.txt","r+");
    int a;
    for(int i=0 ; i<imin/2; i++)
        {
        fseek(f, (i)*sizeof(b), SEEK_SET);
        fread(&b,sizeof(b),1,f);        
        fseek(f, (imin-i-1)*sizeof(b), SEEK_SET);
        fread(&a,sizeof(a),1,f);        
        fseek(f, (i)*sizeof(b), SEEK_SET);
        fwrite(&a,sizeof(a),1,f);       
        fseek(f, (imin-i-1)*sizeof(b), SEEK_SET);
        fwrite(&b,sizeof(b),1,f);       
        }
    fclose(f);
    
    f=fopen("1.txt","r");
    cout<<"\nVivod file:";
    while (fread(&b,sizeof(b),1,f)) 
        cout<<"\t"<<b;
        fclose(f);
        
    f=fopen("1.txt","r");
    int max, imax; 
    if (fread(&b, sizeof(b), 1, f)) {
        max = b;
        imax = 0;
    }
    while (fread(&b,sizeof(b),1,f)) {
        if(b>max) {
            max=b;
            imax=ftell(f) / sizeof(b);
        } 
    }
    cout<<"\nМаксимум находится на "<<imax<<"-й позиции";
    fclose(f);
}
Во второй строке должно быть
15 2 9 5 0 3 1 11 7
photo_2022-05-10_13-31-53.jpg
himecu вне форума Ответить с цитированием
Старый 10.05.2022, 15:35   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Я же вам уже на это указывал. Только вы, когда добавили в код деление, забыли про мою подсказку.
Цитата:
Сообщение от himecu Посмотреть сообщение
Код:
f=fopen("1.txt","r");
    int min, imin;
    if (fread(&b, sizeof(b), 1, f)) {
        min = b;
        imin = 0;
    }
    while (fread(&b,sizeof(b),1,f)) 
        if(b<min){
            min=b;
            imin=ftell(f) / sizeof(b); /* Либо здесь добавьте -1 */
        } fclose(f);
    f=fopen("1.txt","r+");
    int a;
    for(int i=0 ; i<imin/2 /* Либо здесь */; i++)
У вас идет сохранение указателя файла не на минимальный элемент, а на следующий за ним.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числовой ряд Alekeyy Microsoft Office Excel 2 30.01.2022 17:57
числовой файл Arsball Помощь студентам 5 25.12.2015 14:35
Дан числовой ряд Санек-22рус Паскаль, Turbo Pascal, PascalABC.NET 1 22.05.2015 07:15
двумерный массив. числовой файл.+ листинги ayPinki Паскаль, Turbo Pascal, PascalABC.NET 0 26.02.2012 18:31