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

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

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

Author24 — интернет-сервис помощи студентам
Уважаемые участники форума.
Напишите, пожалуйста, программу.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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2015, 12:10
Ответы с готовыми решениями:

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

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

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

Считать матрицу из текстового файла
в текстовом файле дана матрица 4 9 5 5 9 2 9 2 9 как считать этот двумерный массив и вывести...

4
522 / 398 / 213
Регистрация: 28.07.2011
Сообщений: 2,207
11.08.2015, 21:12 2
Легко же, что не получается?
0
19 / 19 / 7
Регистрация: 25.03.2009
Сообщений: 222
12.08.2015, 07:28  [ТС] 3
Цитата Сообщение от Fakeoke Посмотреть сообщение
Легко же, что не получается?
Это программисту легко, а не программисту остается просить помощи.
А не получается переприсвоение элементам номеров индексов и соединение всех частей в одну программу.
Кто может, пожалуйста, напишите программу.
0
522 / 398 / 213
Регистрация: 28.07.2011
Сообщений: 2,207
12.08.2015, 08:40 4
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
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
12.08.2015, 09:19 5
Лучший ответ Сообщение было отмечено 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
12.08.2015, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2015, 09:19
Помогаю со студенческими работами здесь

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

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

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

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

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

ifstream (считать матрицу из файла в двумерный вектор)
нужно из файла считать матрицу в двумерный вектор. файл выглядит так: 2 9 6 5 4 8 4 5 8 9 5 4 8...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru