Переставить строки матрицы по убыванию элементов первого столбца - 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, указывая, что программа успешно завершила работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д