Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2014, 19:36   #1
Natasha2332
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 31
По умолчанию Pascal.Write a program for two-dimensional array processing that implements the following activities

Write a program for two-dimensional array processing that implements the following activities:
1. creates one of these special arrays (8x8):
a. diagonal matrix;
b. low triangular matrix;
c. high triangular matrix;
d. symmetric matrix;
2. fills it with random integer numbers in a range [-30..45];
3. displays the filled array;
4. transforms array into vector;
5. searches for user specified element in vector using linear search algorithm;
6. sorts vector using one of these algorithms:
a. Bubble;
b. Insertion;
c. Selection;
7. displays the sorted vector.


Напишите программу для двумерной обработки массива, который реализует следующие виды деятельности:
1. создает один из этих специальных массивов (8х8):
. диагональная матрица;
б. низкий треугольная матрица;
с. высокая треугольная матрица;
г. симметричная матрица;
2. заполняет его случайными целыми числами в диапазоне [-30 .. 45];
3. отображает заполненную массив;
4. превращает массив в вектор;
5. ищет указанный пользователем элемента в векторе с использованием линейной алгоритм поиска;
6. сортирует вектор, используя один из этих алгоритмов:
. Пузырь;
б. Вносимые;
с. Выбор;
7. отображает отсортированный вектор.



Ребята можете помочь или обьяснит?
Natasha2332 вне форума Ответить с цитированием
Старый 08.03.2014, 20:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Прикольный перевод ))) Особенно про пузырь понравилось )))
Короче тебя просят создать матрицу 8х8. Потом обработать то что под главной диагональю, потом то что над ней. Далее сделать матрицу симметричной - т.е сделать матрицу 8х16 (это как я понимаю симметрию) так чтоб правая сторона была зеркалом левой.
Матрицу заполнять случайными числами -30..45, отобразить ее на экране.
Преобразовать матрицу в вектор (непонятны критерии)

В общем хотя бы это сделай. Потом можно остальное пробовать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2014, 22:11   #3
Natasha2332
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 31
По умолчанию

Код:
{uses
  Crt;} (*<-- раскомментируйте эти строки, если используете Турбо Паскаль*)   
 
const
  n = 8;
 
type
  matrix = array [1..n, 1..n] of integer;
  vector = array [1..n * n] of integer;
 
var
  a: matrix;
  b: vector;
  num: integer;
 
procedure CreateDiagonalMatrix(var x: matrix);
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to n do
      if i = j then
        x[i, j] := Random(76) - 30
      else
        x[i, j] := 0
end;
 
procedure CreateLowTriangularMatrix(var x: matrix);
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to n do
      if i < j then
        x[i, j] := 0
      else
        x[i, j] := Random(76) - 30
end;
 
procedure CreateHighTriangularMatrix(var x: matrix);
var
  i, j: integer;
begin
  for i := 1 to n do
    for j := 1 to n do
      if i > j then
        x[i, j] := 0
      else
        x[i, j] := Random(76) - 30
end;
 
procedure CreateSymmetricMatrix(var x: matrix);
var
  i, j, k: integer;
begin
  for i := 1 to n do
    for j := 1 to n do
      if i > j then
      begin
        k := Random(76) - 30;
        x[i, j] := k;
        x[j, i] := k
      end
      else
      if i = j then
        x[i, j] := Random(76) - 30
end;
 
procedure PrintMatrix(x: matrix);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to n do
      Write(x[i, j]:4);
    WriteLn
  end
end;
 
procedure Transform(x: matrix; var y: vector);
var
  i, j, k: integer;
begin
  k := 0;
  for i := 1 to n do
    for j := 1 to n do
    begin
      k := k + 1;
      y[k] := x[i, j]
    end
end;
 
procedure PrintVector(y: vector);
var
  i: integer;
begin
  for i := 1 to Sqr(n) do
    Write(y[i], ' ');
  WriteLn
end;
 
procedure Search(y: vector; element: integer);
var
  i: integer;
  f: boolean;
begin
  f := false;
  for i := 1 to Sqr(n) do
    if y[i] = element then
    begin
      f := true;
      Write(i, ' ');
    end;
  if f = false then
    WriteLn('Нет таких элементов')
  else
    WriteLn
end;
 
procedure BubbleSort(var y: vector);
var
  i, j, tmp: integer;
begin
  for i := 1 to Sqr(n) - 1 do
    for j := i + 1 to Sqr(n) do
      if y[i] > y[j] then
      begin
        tmp := y[i];
        y[i] := y[j];
        y[j] := tmp
      end
end;
 
procedure InsertionSort(var y: vector);
var
  i, j, tmp: integer;
begin
  for i := 2 to Sqr(n) do
  begin
    tmp := y[i];
    j := i - 1;
    while (j >= 1) and (y[j] > tmp) do
    begin
      y[j + 1] := y[j];
      j := j - 1
    end;
    y[j + 1] := tmp
  end
end;
 
procedure SelectionSort(var y: vector);
var
  i, j, min, tmp: integer;
begin
  for i := 1 to Sqr(n) - 1 do
  begin
    min := i;
    for j := i + 1 to Sqr(n) do
      if y[min] > y[j] then
        min := j;
    if min <> i then
    begin
      tmp := y[i];
      y[i] := y[min];
      y[min] := tmp
    end
  end
end;
 
begin
  {TextMode(C80 + Font8x8);
  ClrScr;}   (*<-- раскомментируйте эти строки, если используете Турбо Паскаль*)  
  Randomize;
  WriteLn('Выберите тип матрицы:');
  WriteLn('1) Диагональная');
  WriteLn('2) Нижнетреугольная');
  WriteLn('3) Верхнетреугольная');
  WriteLn('4) Симметричная');
  repeat
    ReadLn(num);
  until num in [1..4];
  case num of
    1: CreateDiagonalMatrix(a);
    2: CreateLowTriangularMatrix(a);
    3: CreateHighTriangularMatrix(a);
    4: CreateSymmetricMatrix(a);
  end;
  PrintMatrix(a);
  Transform(a, b);
  WriteLn('Полученный вектор:');
  PrintVector(b);
  WriteLn('Введите элемент для поиска: ');
  ReadLn(num);
  WriteLn('Индексы искомого элемента:');
  Search(b, num);
  WriteLn('Выберите метод сортировки:');
  WriteLn('1) Пузырьком');
  WriteLn('2) Вставками');
  WriteLn('3) Выбором');
  repeat
    ReadLn(num);
  until num in [1..3];
  case num of
    1: BubbleSort(b);
    2: InsertionSort(b);
    3: SelectionSort(b);
  end;
  WriteLn('Отсортированный вектор:');
  PrintVector(b);
  ReadLn
end.
это правильно?

Последний раз редактировалось Stilet; 08.03.2014 в 22:42.
Natasha2332 вне форума Ответить с цитированием
Старый 08.03.2014, 22:30   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Sqr() , я полагаю - квадратный корень? Если да, то в сортировках верхняя граница должна быть квадратом, а не корнем.
Smogg вне форума Ответить с цитированием
Старый 10.03.2014, 18:40   #5
Natasha2332
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 31
По умолчанию

да это квадратный корень
Natasha2332 вне форума Ответить с цитированием
Старый 10.03.2014, 18:44   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от Natasha2332 Посмотреть сообщение
да это квадратный корень
Sqr - Это квадрат числа, а не корень квадратный.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 10.03.2014, 19:42   #7
Natasha2332
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 31
По умолчанию

а как можно убрать ноли из вектора

после компиляции у меня выходит ноли в векторе

Последний раз редактировалось Stilet; 11.03.2014 в 09:08.
Natasha2332 вне форума Ответить с цитированием
Старый 10.03.2014, 20:22   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так у тебя в матрице нули )
Смысл их убирать из вектора?
Вот к примеру:
Цитата:
if i = j then
x[i, j] := Random(76) - 30
else
x[i, j] := 0
Зачем так делать?
Тебе нужно матрицу ввести, наполнить числами, а уже потом обрабатывать диагональ, верхний и нижний треугольник между н... диагональю.
Тоесть:
Код:
procedure CreateDiagonalMatrix(var x: matrix);
var
 i, j: integer;
begin
 for i := 1 to n do
   for j := 1 to n do
       x[i, j] := Random(76) - 30
end;
и
Код:
procedure TransformDiagonal(x: matrix; var y: vector);
var
 i, j, k: integer;
begin
 k := 0;
 for i := 1 to n do
   begin
     y[i] := x[i, i]
   end
end;
И сам вектор нужно определять не одним типом, а несколько разнотипных векторов для разных задач.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.03.2014, 03:08   #9
Natasha2332
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 31
По умолчанию

нет у меня выходить двухмерные а нужно одномерные
Natasha2332 вне форума Ответить с цитированием
Старый 11.03.2014, 08:52   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Natasha2332 Посмотреть сообщение
нет у меня выходить двухмерные а нужно одномерные
с чего это вдруг?!

у Вас в заголовке темы написано:
Цитата:
Write a program for two-dimensional array processing .....
как переводится выделенный текст знаете?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема создания 3D-моделей в Processing под Windows XP Krasi Windows 1 02.02.2014 13:50
free pascal. Заполнить массив array of pointer Решетова Алена Помощь студентам 5 15.12.2012 06:09
Нelp write a program Alexxx92 Помощь студентам 0 04.06.2009 17:05
program Project1; необходимо перенести из Pascal в Delphi Toxass Общие вопросы Delphi 22 24.11.2008 08:53
Array или не array Димарик Общие вопросы Delphi 4 18.06.2007 15:16