Здравствуйте, Юдин Евгений Сергеевич.
Сделано по аналогии с Вашим вопросом
178390. Опять же,
с использованием временного файла. Единственное различие в том, что здесь нужно считывать строку и разбирать её на числовые компоненты (чтобы посчитать модуль). Числа в файле должны быть разделены пробелами, например, файл может выглядеть так:
Проверялось также на Visual Studio.
Удачи!
Приложение:
#include <iostream>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
#define n 3 //размерность
void CreateFile () //например, так можно создать файл
{
FILE* fl;
fopen_s (&fl, "c:\\in", "wb");
int a[] = {3, 4, 5};
int b[] = {1, 2, 3};
for (int i=0; i<3; i++) {
fwrite (a, sizeof(int), n, fl);
fwrite (b, sizeof(int), n, fl);
}
fclose (fl);
}
double Module (int* a) //вычисление модуля
{
double s = 0;
for (int i=0; i<n; i++)
s+=(a[i]*a[i]);
return sqrt (s);
}
int main(int argc, char* argv[])
{
//CreateFile (); - можно создать файл
FILE* fl, *tmp;
fopen_s (&fl, "c:\\in.txt", "rt"); //входной
fopen_s (&tmp, "c:\\tmpout.txt", "wt"); //временный
int buf[n]; //буфер для чтения
double max; //максимальный модуль
int maxmod = 100; //число векторов, если будет больше, будем расширять вектор
double *mod = new double [maxmod]; //модули
char str[256], *p; //строка для чтения
int ind = 0;
while (!feof(fl)) { //считаем модули векторов и сохраняем
fgets (str, 255, fl);
p = strtok (str, " "); //разбираем строку на элементы
for (int i=0; i<n; i++) {
if (p!=NULL)
buf[i] = atoi (p); //получаем число
else buf[i] = 0;
p = strtok (NULL, " ");
}
mod[ind] = Module (buf);
ind++;
if (ind>=maxmod) { //если кончилось место - расширяем
double *t = mod;
mod = new double [maxmod*2];
memcpy (mod, t, sizeof(double)*maxmod);
maxmod*=2;
delete [] t;
}
}
fseek (fl, SEEK_SET, 0); //идём в начало файла
max = mod[0]; //ищем максимальный модуль
for (int i=1; i<ind; i++)
if (mod[i]>max) max=mod[i];
bool lnf = false; //Флаг, чтобы вставить перенос строки, если векторы будем перемещать после последнего
for (int i=0; i<ind; i++) { //переписываем все, кроме максимальных
fgets (str, 255, fl);
if (mod[i]==max) continue;
if (i==ind-1) lnf=true;
fputs (str, tmp);
}
fseek (fl, SEEK_SET, 0);
for (int i=0; i<ind; i++) { //переписываем максимальные
fgets (str, 255, fl);
if (mod[i]!=max) continue;
if (lnf) {fputs ("\r\n", tmp); lnf=false;}
fputs (str, tmp);
}
fclose (fl); //закрываем файлы
fclose (tmp);
remove ("c:\\in.txt"); //удаляем старый
rename ("c:\\tmpout.txt", "c:\\in.txt"); //переименовываем новый в старый
delete [] mod;
cout << "Success";
_getch();
return 0;
}