Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222

Считать матрицу из текстового файла, сформировать из нее вектор, отсортировать и изменить его по условиям

14.07.2015, 12:10. Показов 4742. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые участники форума.
Напишите, пожалуйста, программу.pas.
Считать матрицу из текстового файла. Из ее элементов, представленных по одному разу, сформировать
вектор. Этот вектор пересортировать по возрастанию. Заменить элементы заданной матрицы номерами
индексов этого нового вектора и записать в новый файл.

Например, дана матрица:
33 8 21 2 15
14 15 8 16 11

Получим из нее вектор:
33 8 21 2 15 14 15 8 16 11

Оставим по одному вхождению каждого элемента:
33 8 21 2 15 14 16 11

Пересортируем:
2 8 11 14 15 16 21 33

Индексы сортированного вектора:
1 2 3 4 5 6 7 8

Подставляем в новую матрицу:
8 2 7 1 5
4 5 2 6 3
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2015, 12:10
Ответы с готовыми решениями:

Из текстового файла считать исходную матрицу и отсортировать ее
Как из текстового файла считать исходную матрицу, и реализовать отсортированную матрицу в методе button1_Click Что нужно изменить в...

Считать данные из текстового файла и поместить их в вектор
long int temp; vector<long int> arr; string s; ifstream fin(argv); while (getline(fin, s)) { temp = atol(s.c_str()); ...

Считать матрицу из текстового файла
Здравствуйте. Необходимо считать матрицу, то есть по сути двумерный массив, из txt файла, а дальше вывести все это чудо в stringrid. Но...

4
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
11.08.2015, 21:12
Легко же, что не получается?
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
12.08.2015, 07:28  [ТС]
Цитата Сообщение от Fakeoke Посмотреть сообщение
Легко же, что не получается?
Это программисту легко, а не программисту остается просить помощи.
А не получается переприсвоение элементам номеров индексов и соединение всех частей в одну программу.
Кто может, пожалуйста, напишите программу.
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
12.08.2015, 08:40
kayslu, делайте все процедурами, тогда будет легче... вот, смотрите сами:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
type tmatr=array [1..10,1..10] of integer; //тип матрицы куда считываем (думаю 10х10 хватит_
//объявляем переменные
var
matr:tmatr; //матрица куда будем считывать
vect:array [1..100] of integer; //вектор из матрица (раз 10х10 максимальное то размер 100)
n,m:integer; //подсчитываем кол-во строк\столбцов в файле
q:integer; //тут будет размер вектора
 
//для начала напишем процедуру считывания файла в матрицу
 
procedure read_file(place:string); //в нее подаем место хранения файла
var f:text; a:integer; //переменная файла
begin
assign(f,place); //привязываем переменную к файлу
reset(f);        //открываем файл для чтения
n:=0; //в переменную n считаем кол-во строк в файле
while not eof(f) do //пока не конец файла
begin
  n:=n+1; //увеличиваем счетчик строк
  m:=0;  //обнуляем счетчик столбцов
  while not eoln(f) do //пока не конец строки - т.е идем по столбцам
  begin
  m:=m+1; //увеличиваем счетчик столбцов
  read(f,a); //считываем число
  matr[n,m]:=a; //записываем число в матрицу matr
  end;
  readln(f); //переходим на новую строку
end;
close(f); //закрываем файл
end;
 
procedure write_matrix();//процедура вывода матрицы matr на экран
var i,j:integer;
begin
for i:=1 to n do //цикл по строкам
begin
for j:=1 to m do //цикл по столбцам
write(matr[i,j],' '); //выводим значение
writeln; //переход на навую строку
end;
end;
 
procedure make_vector(); //делаем вектор из матрицы
var i,j:integer;
begin
q:=0; //тут считаем кол-во элементов
for i:=1 to n do //цикл по строкам
for j:=1 to m do //цикл по столбцам
begin
q:=q+1; //увеличиваем размер вектора
vect[q]:=matr[i,j]; //записываем число
end;
end;
 
procedure write_vector(); //выписываем вектор на экран
var i:integer;
begin
for i:=1 to q do //по размеру вектора
write(vect[i],' '); //выписываем
writeln;
end;
 
procedure sort_vector(); //сортировка вектора пузырьком
var i,j,tmp:integer;
begin
for i:=q-1 downto 1 do 
    for j:=1 to i do
        if vect[j]>vect[j+1] then
            begin
               tmp:= vect[j];
               vect[j]:= vect[j+1];
               vect[j+1]:= tmp;
            end;
end;
 
procedure delete_dups(); //удаление повторов в векторе
var i,j,k:integer;
begin
i:=1; // встаем на начало
while i<=q do //пока не конец
 begin
  j:=i+1; //берем следующий элемент
  while j<=q do //продвигаемся пока не конец
   begin
    if vect[j]=vect[i] then //если нашли повтор
     begin
      for k:=j to q-1 do //замещаем элементы так чтобы повторный стал последним
      vect[k]:=vect[k+1];
      q:=q-1; //уменьшаем размер массива тем самым убирая последний элемент
      end
     else j:=j+1;
   end;
  i:=i+1;
 end;
end;
 
procedure write_indexes(); //подставляем индексы вектора в начальную матрицу
var i,j,k:integer; r:text;
begin
assign(r,'C:\Result.txt'); //файл с результатом
rewrite(r); //открыаваем для записи
for i:=1 to n do //по матрице
  begin
for j:=1 to m do
    begin
    for k:=1 to q do //по вектору
    if (matr[i,j]=vect[k]) then //если нашли число матрицы в векторе
      begin
      write(r,k,' ');//выписываем порядковый номер
      write(k,' '); 
      end;
    end;
    writeln; //переходим на новую строку
    writeln(r);
    end;
close(r); //закрываем файл
end;
 
BEGIN //головная программа
read_file('C:\1.txt'); //считали матрицу из файла
writeln('Matrix : '); 
write_matrix(); //выписали матрицу matr
 
make_vector(); //получаем вектор из матрицы matr
writeln('Vector : ');
write_vector(); //выписываем вектор
 
delete_dups(); //удаляем дубликаты
writeln('Vector without dublicates : ');
write_vector(); //выписываем вектор
 
sort_vector(); //сортируем вектор
writeln('Sorted Vector : ');
write_vector(); //выписываем вектор
 
writeln('Indexes : ');
write_indexes(); //выписываем индексы
END.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
12.08.2015, 09:19
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Можно и так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var f:text;
    a:array[1..100,1..100] of integer;
    b:array[1..1000] of integer;
    m,n,k,i,j,p,x:integer;
    s:string;
    t:boolean;
begin
assign(f,'matrix.txt');//файл в папке с программой
reset(f);
//если в файле не указаны размеры матрицы, определим их
m:=0; //количество строк
while not seekeof(f) do
 begin
  readln(f,s);
  inc(m);
 end;
reset(f);
n:=0;//количество столбцов
while not eoln(f) do
 begin
  read(f,x);
  inc(n);
 end;
//читаем матрицу
reset(f);
writeln('Исходная матрица');
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    read(f,a[i,j]);
    write(a[i,j]:4);
   end;
  writeln;
 end;
close(f);
writeln('Вектор из элементов матрицы по 1 разу');
k:=1;
b[k]:=a[1,1];
for i:=1 to m do
for j:=1 to n do
 begin
  t:=true;
  p:=1;
  while(p<=k)and t do
  if a[i,j]=b[p] then t:=false
  else inc(p);
  if t then
   begin
    inc(k);
    b[k]:=a[i,j];
   end;
 end;
for i:=1 to k do
write(b[i]:4);
writeln;
writeln('Отсортированный вектор');
for i:=1 to k-1 do
for j:=i+1 to k do
if b[i]>b[j] then
 begin
  x:=b[i];
  b[i]:=b[j];
  b[j]:=x;
 end;
for i:=1 to k do
write(b[i]:4);
writeln;
writeln('Замена элементов матрицы их номерами в отсортированном массиве');
for i:=1 to m do
for j:=1 to n do
 begin
  t:=false;
  p:=1;
  while(p<=k)and not t do
  if a[i,j]=b[p] then t:=true
  else inc(p);
  if t then a[i,j]:=p;
 end;
writeln('Новая матрица');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
assign(f,'new_matr.txt');
rewrite(f);
for i:=1 to m do
 begin
  for j:=1 to n do
  write(f,a[i,j]:4);
  writeln(f);
 end;
close(f);
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2015, 09:19
Помогаю со студенческими работами здесь

Считать матрицу из текстового файла
в текстовом файле дана матрица 4 9 5 5 9 2 9 2 9 как считать этот двумерный массив и вывести его на экран? подскажите плиз(c++)

Считать матрицу из текстового файла
в текстовом файле даны размеры NxM и следом некая матрица, к примеру: @@# #222 2132 TqE2 Допустим нам это нужно для того, что...

Из текстового файла считать информацию в матрицу
добрый день уважаемые программисты, у меня возникла проблема со считыванием информации из текстового файла.в текстовом файле хранятся...

Как считать матрицу из текстового файла
привет народ, помогите!!! Как считать в С из текстового файла матрицу при том что я сам указываю ее размерность. Матрица nxn

Считать данные с текстового файла, и изменить их
Добрый вечер. Есть текстовый файл(txt). Пример: 001\Мастер и Маргарита\Булгаков\есть\3 002\Над пропастью во ржи\Сэлинджер\есть\2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru