09.04.2017, 14:33 | #1 (permalink) |
Новичок
Регистрация: 09.04.2017
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Модульное программирование
Самой разобраться не получилось, прошу вашей помощи Составить подпрограмму определения суммы элементов одномерного массива, используя её, составить массив из сумм элементов строк матрицы А. |
09.04.2017, 14:33 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Содержание вашей темы довольно часто встречалось и ранее Модульное программирование Программирование на C# Программирование МК |
09.04.2017, 15:13 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. |
|
16.04.2017, 00:00 | #3 (permalink) | ||
Новичок
Регистрация: 09.04.2017
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
Цитата:
Форумчане, помогите мне написать в подробной форме выделенную операцию) Машине эта операция понятна, мне не очень Буду очень благодарна) |
||
16.04.2017, 01:28 | #4 (permalink) |
Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Это очередной вариант суммирования элементов массива ( вектора ):
Код:
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 |
16.04.2017, 09:17 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Объясню. Дело в том, что в классическом Паскале (за всякие там АВС не отвечаю) предусмотрена некая совместимость типов. Пусть у нас есть двумерная, для простоты целочисленная, матрица А размером 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 ТОЛЬКО с целыми числами. Если что-нибудь еще непонятно - спрашивайте, не стесняйтесь. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|