Переставить строки матрицы по убыванию элементов первого столбца - C (СИ)
Формулировка задачи:
Здравствуйте, никак не могу сделать работу, подскажите что делать или исправьте пожалуйста: Дано два файла:
первый исходный, второй пустой, в который нужно записать результат
-10,50 1,50 -5,45 20,50 -2,14 1,01 4,50 5,25 23,13 -25,60 -13,70 6,25 -1,50 10,50 -8,5 6,30 2,30 4,30 52,20 -19,30
// 11_2.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <locale>
extern const int n=5, m=4;
using namespace std;
float print_mas(float massive[n][m])
{
FILE *f2;
f2=fopen("Y2.dat","w");
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf(" %7.2f",massive[i][j]);
}
printf("\n");
}
fclose(f2);
return 0;
}
float perestanovka(float massive[n][m])
{
setlocale(LC_ALL,"Russian");
int i,j;
float tmp;
cout<<"Перестановка матрицы по убыванию элементов первого столбца"<<endl;
for(i=0;i<n;i++)
{
for(j=m;j<0;j--)
{
if (massive[j-1][0]>massive[j][0])
{
for (int k=0;k<n;k++)
{
tmp=massive[j][k-1];
massive[j][k-1]=massive[j][k];
massive[j][k]=tmp;
}
}
}
}
print_mas(massive);
return 0;
}
void main()
{
FILE *f1;
int i,j;
float mas[n][m];
setlocale(LC_ALL,"Russian");
cout<<"В файле input.dat находится матрица вещетвенных чисел (отрицательные и положительные)."<<endl;
cout<<"Массив в файле"<<endl;
system("cls");
f1=fopen("input.dat","r");
for (i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
fscanf(f1,"%f",&mas[i][j]);
}
printf("\n");
}
print_mas(mas);
perestanovka(mas);
_getch();
}Решение задачи: «Переставить строки матрицы по убыванию элементов первого столбца»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <memory.h>
#define N 5
#define M 8
int main(int argc, char* argv[])
{
FILE* fp[2] = { NULL };
const char* filename[2] = { "input.txt", "output.txt" };
if ((fp[0] = fopen(filename[0],"r")) == NULL)
{
printf("Unable to open file %s for reading\n",filename[0]);
return -1;
}
if ((fp[1] = fopen(filename[1],"w")) == NULL)
{
printf("Unable to open file %s for reading\n",filename[1]);
return -1;
}
int** A = new int*[N];
memset((void*)A, 0x00, 4 * N);
char* line = new char[256];
for (int t1 = 0; fgets(line, 256, fp[0]) != NULL; t1++)
{
A[t1] = new int[M]; int t2 = 0;
memset((void*)A[t1], 0x00, sizeof(int) * M);
for (char* s = strtok(line,","); s != NULL; s = strtok(NULL,","))
A[t1][t2++] = atoi(s);
}
for (int z1 = 0; z1 < N; z1++)
{
for (int z2 = 0; z2 < M; z2++)
{
fprintf(fp[1],"%d ",A[z1][z2]);
printf("%d ",A[z1][z2]);
}
fprintf(fp[1],"\n");
printf("\n");
}
_getch();
return 0;
}
Объяснение кода листинга программы
В этом коде программа считывает из файла input.txt матрицу строк, разделенных запятыми, и записывает ее в файл output.txt в порядке убывания элементов первого столбца. Код выполняет следующие действия:
- Подключает необходимые библиотеки.
- Определяет размерность матрицы N и M.
- Открывает файлы для чтения и записи.
- Выделяет память под матрицу строк A и инициализирует ее нулями.
- Считывает строки матрицы из файла input.txt и сохраняет их в переменной line.
- Разделяет каждую строку на элементы, используя запятую как разделитель, и сохраняет их в матрице A.
- Записывает элементы матрицы в файл output.txt в порядке убывания элементов первого столбца.
- Выводит элементы матрицы на экран.
- Ждет нажатия клавиши для завершения работы программы.
- Закрывает файлы.
- Освобождает выделенную память.
- Возвращает 0, указывая, что программа успешно завершила работу.