• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Модульное программирование

Nastya556

Ученик
Регистрация
9 Апр 2017
Сообщения
2
Реакции
0
Баллы
0
Модульное программирование

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

Составить подпрограмму определения суммы элементов одномерного массива, используя её, составить массив из сумм элементов строк матрицы А.
 
Прошу помочь составить мне программу по информатике.
Самой разобраться не получилось, прошу вашей помощи :sigh:

Составить подпрограмму определения суммы элементов одномерного массива, используя её, составить массив из сумм элементов строк матрицы А.
М-да... Задача века!
Код:
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.
 
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):4);


Добрый вечер):sigh:
Форумчане, помогите мне написать в подробной форме выделенную операцию)
Машине эта операция понятна, мне не очень :nini:
Буду очень благодарна)
 
Буду очень благодарна)

Это очередной вариант суммирования элементов массива ( вектора ):

Код:
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
 
Добрый вечер):sigh:
Форумчане, помогите мне написать в подробной форме выделенную операцию)
Машине эта операция понятна, мне не очень :nini:
Буду очень благодарна)
Настя, как я догадываюсь, некоторое недоумение вызывает обращение к массиву a.
Объясню.
Дело в том, что в классическом Паскале (за всякие там АВС не отвечаю) предусмотрена некая совместимость типов.
Пусть у нас есть двумерная, для простоты целочисленная, матрица А размером 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 - это одномерный массив-строка размером [1..10]. И к элементу матрицы можно обратиться (например, присвоить значение 18) так:
A[j]:=18;
В свою очередь, со строками матрицы можно работать, как с обычными одномерными массивами, что и делается в программе.

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

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

Если что-нибудь еще непонятно - спрашивайте, не стесняйтесь.
 
Назад
Сверху