Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2015, 19:12
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Помогите с задачек в Pascal

Здравствуйте, помогите пожалуйста решить задачу в паскале. Я даже не понял условия задачи самой, которая была дана для курсовой работы. Помогите хотя бы понять, что нужно делать в этих заданиях, если вы поняли.
Задачи:
а) Сформировать из столбцов В, не содержащих равных элементов, матрицу С размером m х k, где k <= n - количество таких столбцов;
б) в матрице С вычислить суммы элементов строк, номера которых определяются номерами нулевых элементов заданного вектора.
Ответить с цитированием
  #2  
Старый 20.03.2015, 22:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если не ошибаюсь, то все довольно просто.
Задача А:
Тебе задана матрица B (m x n). Надо найти в ней столбцы без одинаковых элементов и "собрать" из них матрицу C (m x k). k действительно будет меньше или равно n, а высота останется той же (m).
Задача Б:
Из полученной в задаче А матрицы и вектора (одномерный массив, еще одни входные данные для второй задачи) посчитать суммы элементов тех строк, номера которых совпадают с номерами элементамов вектора, равными 0.

Более ясно объяснить не могу...

Для написания кода надо понимать какой диалект языка можно использовать. Например, в классическом ПАСКАЛе нет динамических массивов, соотв. задачи придется решать либо используя статические массивы, т.е. фиксировать m и n, либо городить огород с указателями. В Дельфи динамические массивы есть, соотв. можно написать универсальный код под любые (с разумным ограничением) размеры входных данных, да и интерфейс для ввода данных можно нарисовать более удобный.
Ответить с цитированием
  #3  
Старый 21.03.2015, 08:19
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ой простите, я случайно перепутал задания. Вот мои задания, я до сих пор не понял как сделать это, и что именно нужно делать.
Сформировать из строк B с нулевым первым элементом матрицу C размером kxn, где k<=m-количество этих строк.
Я так понял что, есть массив с типом string, и тутад надо ввести числа через пробел, и те строки в которых первое число равно 0, то его записать в массив с размером. А вот размер какой я непонял, не понял что такое k, n и m я так понял размер матрицы, n-строка,m-столбец.

Последний раз редактировалось BlackMonsta, 21.03.2015 в 11:43.
Ответить с цитированием
  #4  
Старый 21.03.2015, 17:33
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Кто нибудь знает?
Ответить с цитированием
  #5  
Старый 21.03.2015, 23:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, знаем. И что?
m, n и k - это условные размеры массивов (кол-во строк или столбцов).
И с чего ты решил, что это массив строк (в смысле String)?
Код:
// Delphi
var
  B : Array Of Array Of Integer;
или
Код:
(* Pascal *)
const
  m = 100;
  n = 100;
var
  B : Array [1..m,1..n] Of Integer;
в зависимости от языка (как я уже писал, классический ПАСКАЛЬ не поддерживает динамические массивы).

Теперь о k. Т.к. ты формируешь новый массив C из строк исходного массива B, и туда войдут только строки, у которых первый элемено = 0, то общее кол-во строк (k) создаваемого массива будет меньше или равно (если все строки начинаются с 0), чем у исходного массива, т.е. k <= m, но заранее ты кол-во таких строк не знаешь, соответсвнно, они обозначаются буквой (k), а не конкретным числом.

ЗЫ. В вышеприведенном тексте термин "строка" обозначает горизонтальный ряд (строку) прямоугольного массива, т.е., фактически, одномерный массив, а не тип данных String, как ты, видимо, подумал. Есть мнение, что в постановке задачи термин "строка" имеет тот же смысл.

ЗЗЫ. Если такие проблемы с пониманием простейших стандартных задач, то может не связываться с программированием и поискать себе другую область деятельности?
Ответить с цитированием
  #6  
Старый 22.03.2015, 21:26
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Получается код будет такой?
Код:
var
B,C:array[1..50,1..50] of integer;
a:array[1..50] of integer;
i,j,ib,jb,k:integer;
begin
 write('Введите кол-во строк: ');
 readln(ib);
 write('Введите количество элементов в строке:  ');
 readln(jb);
 k:=0;
 for i:=1 to ib do
 begin
  for j:=1 to jb do
  begin
   b[i,j]:= random(0,2);
   write(b[i,j]:3);
  end;
  if b[i,1]=0 then
  begin
   k:=k+1;
   a[k]:=i;
  end;
  writeln;
 end;
 for i:=1 to k do
 begin
  for j:=1 to jb do
  begin
   c[i,j]:= b[a[i],j];
  end;
 end;
 writeln('Матрица C:');
 for i:=1 to k do
 begin
  for j:=1 to jb do
  begin
   write(C[i,j]:3);
  end;
  writeln;
 end;
end.
Ответить с цитированием
  #7  
Старый 22.03.2015, 23:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

нет, не такой.
откуда у тебя вообще a взялось? В задаче его нет. ну и копирование строки в таком случае будет подругому выглядеть.
Ответить с цитированием
  #8  
Старый 22.03.2015, 23:11
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Не всё ведь нужно делать всё по задаче. Главное итог выходит правильный ведь? Т.е. итог такой что и требует задача?
Ответить с цитированием
  #9  
Старый 23.03.2015, 04:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если ты уверен, что итог правильный...
Лично я не могу вот так с ходу математически доказать, что программа работает правильно, т.к. твой алгорим не есть простое переложение задачи. Хотя, наверное, да. Будет работать...

Я бы, все-таки, делал прямо так, как написано в задаче.
Код:
...
SetLength(C,0);
For I := Low(B) To High(B) Do
  If B[0,I] = 0 Then
    Begin
      SetLength(C,LEngth(C)+1);
      SetLength(C[High(C)],Length(B[i]));
      For J := Low(B[i]) To Higth(B[i]) Do C[High(C),J] := B[i,J];
   End;
...
Что-то типа того.
Ответить с цитированием
  #10  
Старый 23.03.2015, 14:24
BlackMonsta BlackMonsta вне форума
Новичок
 
Регистрация: 22.12.2013
Сообщения: 67
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ну, то что я сделал он работает так что, вводится кол-во строк, и длина строк. После этого вводится рандомные числа. И в матрицу C записываются только строки у которых 1 элемент равен 0. Если я правильно понял то нужно было сделать так.
Ответить с цитированием
  #11  
Старый 23.03.2015, 19:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, да. задача поставлена именно так.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025