0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 6
1

Расставить элементы строк с четными номерами матрицы в порядке убывания

14.01.2014, 18:32. Показов 969. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем. Нужна помощь в решении нелегкой (для меня) задачки...
Дана матрица A порядка n. Расставьте элементы строк с четными номерами матрицы
в порядке убывания.
Вот, собственно, тело.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program matr111;
 
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, matr;
type
  matr=array[1..100, 1..100] of Real;
var
  a:matr;
 
begin
  VvodM(a,'in.txt',n);
  d:=(n div 2);
 proverka(a,'out.txt');
end.
А вот юнит matr. Что-то у меня не выходит.
Delphi
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
unit matr;
 
interface
 
uses
  SysUtils;
type
  matr=array[1..100, 1..100] of Real;
 
procedure VvodM(var m,n:Integer);
procedure proverka(var a:matr);
 
implementation
 
procedure VvodM(var m,n:Integer);
var
   i,j:integer;
   fin:text;
begin
   assignfile(fin, 'in.txt');
   reset(fin);
   read(fin, m,n);
   for i:=1 to m do
   for j:=1 to n do
   Read(fin, a[i,j]);
   close(fin);
end;
 
procedure provepka(var a:matr);
var
  i,l,j,e,d:Integer;
 dop:real;
 b:array [1..100] of real;
 fout:text;
begin
 assign(fout,'matr.txt');
 rewrite(fout);
 for i:=1 to n do
 begin
  for l:=1 to d do
  j:=2;
  begin
   for e:=d downto l do
   if a[i,j]<a[i,j+2] then
    begin
     dop:=a[i,j];
     a[i,j]:=a[i,j+2];
     a[i,j+2]:=dop;
    end;
   j:=j+2;
   end;
  end;
 for i:=1 to n do
 begin
  writeln(fout);
  for j:=1 to n do
   write(fout,a[i,j]:10:3);
 end;
 close(fout);
end;
end.
Не могли бы помочь с ошибками?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2014, 18:32
Ответы с готовыми решениями:

Расставить элементы строк с четными номерами матрицы в порядке убывания
Добрый день всем. Нужна помощь в решении нелегкой (для меня) задачки... Дана матрица A порядка n....

Расставить элементы строк матрицы с четными номерами в порядке убывания
Дана матрица A порядка n. Расставить элементы строк с четными номерами матрицы в порядке убывания

Расставить элементы строк с четными номерами матрицы в порядке убывания.
Здравствуйте ув. программисты, вот у меня есть задачка... Условие:Дана матрица A порядка n....

Дана матрица A порядка n. Расставьте элементы строк с четными номерами матрицы в порядке убывания
Дана матрица A порядка n. Расставьте элементы строк с четными номерами матрицы в порядке...

1
24 / 17 / 7
Регистрация: 05.12.2013
Сообщений: 70
25.01.2014, 17:34 2
Вижу, что ты пытаешься идти уверенными шагами.... Но ошибок много и сразу скажу, что исправлять не стал, а написал заново. Вот Главный код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,Unit1,windows;
 
begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  com_arr;
  Writeln('Результирующий массив записан в файл output.txt');
  readln;
end.
Входной файл вида:
Delphi
1
2
3
4
5
6
5 6
1 3 4 0 9 7
9 5 3 7 5 7
2 4 3 6 8 5
3 5 3 6 7 5
0 7 8 5 7 5
А юнит переписал вот так:
Delphi
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
unit Unit1;
interface
procedure com_arr;
implementation
procedure com_arr;
var
  i,k,m,n,a,b: integer;
  arr: array of real;
  c: real;
  input,output: TextFile;
begin
  AssignFile(input,'input.txt');
  Reset(input);
  AssignFile(output,'output.txt');
  Rewrite(output);
  Read(input,m,n);
  SetLength(arr,n);
  for i:=0 to (m-1) do //Перебираем строки
  begin
    for k:=0 to (n-1) do
    begin
      Read(input,arr[k]);
    end;
    if ((i mod 2) = 0) then //Если строка нечетная то сортируем
    begin
      for a:=0 to (n-2) do
      begin
        for b:=0 to (n-2) do
        begin
          if (arr[b]>arr[b+1]) then
          begin
            c := arr[b];
            arr[b]:=arr[b+1];
            arr[b+1]:=c;
          end;
        end;
      end;
    end;
    //Записываем массив в файл
    for k:=0 to (n-1) do write(output,arr[k]:2:0,' ');
    writeln(output);
  end;
  
  CloseFile(input);
  CloseFile(output);
end;
И так, почему же я решил переписать.
Смотри, то что ты изначально задаешь массив большой длины, а потом используешь его часть НЕ ПРАВИЛЬНО, точнее сказать не рационально, ведь как только ты задал в массив, компьютер резервирует в оперативной памяти под него место. Поэтому в таких целях используют Динамический массив,
но он тут не нужен, ведь с ним добавиться мароки, нам же нужно его и в юнит передать, а потом работать, одним словом говоря, он все усложнит(я его и не использовал). Я просто поменял само решение, то как ты начал решать эту задачу, я бы сказал как напролом, но можно проще, что ты в принципи и видишь.
Теперь от твоих ошибках, некоторых: В главном коде нету объявления переменной N,D. Если ты объявил свой тип в коде самой программы, то в юните он виден не будет, это нужно сделать в самом юните, ведь ты его к главному файлу программы подключаешь, а не на оборот. Потом, если ты работаешь с массивом, заполняешь его(как в первой процедуре) то ты его должен объявить в главной программе, и занести в входные параметры процедуры, прочитай про "глобальные и локальные переменные", и плюс есть ещё проблемы с синтаксисом.
Если что спрашивай, буду рад помочь.
0
25.01.2014, 17:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2014, 17:34
Помогаю со студенческими работами здесь

Вывести элементы с нечетными номерами в порядке возрастания номеров, а затем - элементы с четными номерами в порядке убывания номеров
Дан массив A размера N. Вывести вначале его элементы с нечетными номерами в порядке возрастания...

Расставить в порядке убывания элементы с нечетными номерами
Выполнял задание и наткнулся на такую проблему, не знаю как расставить в порядке убывания элементы...

Вывести элементы массива с четными номерами в порядке убывания номеров
Элементы массивов задать с помощью генератора случайных чисел (блок присваивания, команда Random)....

Вывести вначале элементы массива с нечетными номерами в порядке возрастания номеров, затем - элементы с четными в порядке убывания номеров
дан массив А размера N.вывести вначале элементы с нечетными номерами в порядке возрастания...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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