Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 09.04.2017, 14:33   #1 (permalink)
Nastya556
Новичок
 
Регистрация: 09.04.2017
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Модульное программирование

Прошу помочь составить мне программу по информатике.
Самой разобраться не получилось, прошу вашей помощи

Составить подпрограмму определения суммы элементов одномерного массива, используя её, составить массив из сумм элементов строк матрицы А.
Nastya556 вне форума   Ответить с цитированием

Старый 09.04.2017, 14:33
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Содержание вашей темы довольно часто встречалось и ранее

Модульное программирование
Программирование на C#
Программирование МК

Старый 09.04.2017, 15:13   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Nastya556 Посмотреть сообщение
Прошу помочь составить мне программу по информатике.
Самой разобраться не получилось, прошу вашей помощи

Составить подпрограмму определения суммы элементов одномерного массива, используя её, составить массив из сумм элементов строк матрицы А.
М-да... Задача века!
Код:
Const
 N=10;

Type
 Vect=Array[1..N] of Integer;
 Matr=Array[1..N] of Vect;

Var
 A:Matr;
 i,j:Byte;

Function Sum(Q:Vect):Integer;
var
 k:Byte;
 S:Integer;
begin
 S:=0;
 for k:=1 to N do Inc(S,Q[k]);
 Sum:=S;
end;

Begin
 Randomize;
 for i:=1 to N do
  begin
   for j:=1 to N do
    begin
     A[i][j]:=Random(50);
     Write(A[i][j]:4);
    end;
   Writeln;
  end;

 Writeln;

 Writeln('Sums:');
 for i:=1 to N do Write(Sum(A[i]):4);

 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 16.04.2017, 00:00   #3 (permalink)
Nastya556
Новичок
 
Регистрация: 09.04.2017
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Function Sum(Q:Vect):Integer;
var
k:Byte;
S:Integer;
begin
S:=0;
for k:=1 to N do Inc(S,Q[k]);
Sum:=S;
end;
Цитата:
Writeln('Sums:');
for i:=1 to N do Write(Sum(A[i]):4);
Добрый вечер)
Форумчане, помогите мне написать в подробной форме выделенную операцию)
Машине эта операция понятна, мне не очень
Буду очень благодарна)
Nastya556 вне форума   Ответить с цитированием
Старый 16.04.2017, 01:28   #4 (permalink)
Viewer
Banned
 
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
По умолчанию

Цитата:
Сообщение от Nastya556 Посмотреть сообщение
Буду очень благодарна)
Это очередной вариант суммирования элементов массива ( вектора ):

Код:
var
ar: array of integer;

function _Sum1(ar: array of integer): integer;
var
  sum: integer;
begin
  sum := 0;
  for var i:=0 to High(ar) do sum := sum + ar[i];
  Result := sum;
end;

function _Sum2(ar: array of integer): integer;
var
  sum: integer;
begin
  sum := 0;
  for var i:=0 to High(ar) do Inc(sum, ar[i]);
  Result := sum;
end;

begin
  SetLength(ar,10);
  for var i:=0 to High(ar) do
    ar[i] := i;
  Println( _Sum1(ar));
  Println( _Sum2(ar));
end.

// Println:
// _Sum1= 45 
// _Sum2= 45
Viewer вне форума   Ответить с цитированием
Старый 16.04.2017, 09:17   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Nastya556 Посмотреть сообщение
Добрый вечер)
Форумчане, помогите мне написать в подробной форме выделенную операцию)
Машине эта операция понятна, мне не очень
Буду очень благодарна)
Настя, как я догадываюсь, некоторое недоумение вызывает обращение к массиву a[i].
Объясню.
Дело в том, что в классическом Паскале (за всякие там АВС не отвечаю) предусмотрена некая совместимость типов.
Пусть у нас есть двумерная, для простоты целочисленная, матрица А размером 8х10 (восемь строк и десять столбцов).
Мы можем описать такой тип несколькими способами:
1. "В лоб":
var A:Array[1..8,1..10] of Integer;
2. Можно то же самое, но с предварительным заданием типа:
type
Matrix=Array[1..8,1..10] of Integer;
var
A:Matrix;
3. А вот теперь - самое интересное. Двумерный массив в Паскале может трактоваться, как одномерный массив, каждый элемент которого есть тоже одномерный массив-строка:
type
Vector=Array[1..10] of Integer;
Matrix=Array[1..8] of Vector;
var
A:Matrix;
То есть теперь A[i] - это одномерный массив-строка размером [1..10]. И к элементу матрицы можно обратиться (например, присвоить значение 18) так:
A[i][j]:=18;
В свою очередь, со строками матрицы можно работать, как с обычными одномерными массивами, что и делается в программе.

А теперь - ВНИМАНИЕ!
В моей программе задание переменных способом 3 связано с двумя моментами:
1. Просто для наглядности.
2. Вы не написали, каким Паскалем пользуетесь. Дело в том, что я не уверен, что в этом... ну, в общем, в АВС эта совместимость работает. Что-то, мне помнится, там с этим (как всегда) проблемы.
В НОРМАЛЬНОМ Паскале ВСЕ ФОРМЫ ЗАДАНИЯ ДВУМЕРНЫХ МАССИВОВ АБСОЛЮТНО ТОЖДЕСТВЕННЫ! Т.е. я могу, например, описать массив способом 1, а потом работать со строкой A[i]. Я могу обращаться к элементу матрицы так: A[i,j], или так: A[i][j] - БЕЗ РАЗНИЦЫ. НОРМАЛЬНЫЙ Паскаль поймёт.

И еще. Может быть, смутил оператор Inc? На всякий случай:
Inc(c) эквивалентен c:=c+1;
Inc(c,d) эквивалентен c:=c+d;
Работает Inc ТОЛЬКО с целыми числами.

Если что-нибудь еще непонятно - спрашивайте, не стесняйтесь.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:33.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.