Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сумма элементов двух массивов (сложновато)

440
19 марта 2007 года
[FENIX]
83 / / 29.01.2007
Ребят, помогите кто-нибудь пожалуйста. Нужно составить программу вычисления суммы тех элементов одномерного массива "А", которые одновременно встречаются в массиве "В". (С использованием процедур, или функций).

Первую часть с вводом элементов я сделал, а вот с подсчётом трудновато:

Код:
Program vichislenie;
uses crt;

type
f=array[1..5] of integer;

var
a:f;
b:f;
g:integer;
Procedure Enter(var c:f; var d:f);
var i,j,g:integer;
begin
       For i:=1 to 5 Do
       begin
       writeln('Enter ',i,' element of array A: ');
       readln(c);
       end;

       For j:=1 to 5 Do
       begin
       writeln('Enter ',i,' element of array B: ');
       readln(d[j]);
       end;

       g:=0;

       For i:=1 to 5 Do
           for j:=1 to 5 Do

If c=d[j] then
    begin
    g:=g+c;
    readln;
    end
end;

BEGIN
clrscr;
Enter(a,b);
writeln('Summa=',g);
readln;
End.
622
19 марта 2007 года
nilbog
507 / / 19.12.2006
ну во первых я бы сделал процедуру ввода так
 
Код:
const n=5;
Procedure Enter(var a:f);
var i:integer;
begin
       For i:=1 to n Do
       begin
       writeln('Enter ',i,' element of array A: ');
       read(c);
       end
end;

не стоит ничего лишнего в нее пихать
Код:
function sum(var a,b:f):integer;
var i,s:integer;
function IsIn(x:integer;var b:f):boolean;
var i:integer; f:boolean;
begin i:=1; f:=false;
while (i<=n)and not f do
 begin f:=x=b; i:=i+1 end;
isin:=f
end;
begin
for i:=1 to n do
 if isin(a,b) then s:=s+a;
sum:=s
end;

что-то в таком ключе - но это только один из вариантов с описанием вложенной функции
8.2K
19 марта 2007 года
RusHak
86 / / 02.03.2006
можно было попроще:

 
Код:
procedure sum(x:integer);
 var
  i,s:integer;
 begin
    s:=0;
    for i:=1 to x do //Где X длина массива (количество цифр в массиве)
        if a(i)=b(i) then s:=s+a(i);
    writeln(' Ответ: Сумма:= ',s);
 end;

Здесь же написано "которые одновременно встречаются в массиве "В""
622
19 марта 2007 года
nilbog
507 / / 19.12.2006
ну там и написано
одновременно - вдумайтесь в это слово
это не значит a=b ))
20K
20 марта 2007 года
barmalej84
21 / / 05.03.2007
Первое что приходит на ум: из массива A убрать все повторяющиеся числа (т.е. оставить числа встречающиеся в массиве только один раз), то же самое сделать с массивом B. Потом каждый элемент массива A сравнить с каждым элементом массива B, соответственно если A=B[j], то S:=... Код смогу только завтра утром выложить (нет на работе Паскалика:( )
242
20 марта 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:

Нужно составить программу вычисления суммы тех элементов одномерного массива "А", которые одновременно встречаются в массиве "В".


нигде вроде не пишется об удалении дубликатов. просто написать функцию indexOf, которая принимает как параметры массив и переменную типа integer. проходим с помощью цикла массив А и каждый его элемент Х отправляем в эту функцию вместа с массивом B, если мы пробегая по массиву B(в функции) встречаем элемент равный Х, тогда возвращаем его индекс, иначе - возвращаем -1. если вернулся индекс > 0 - прибавляем к сумме текущий элемент...

20K
21 марта 2007 года
barmalej84
21 / / 05.03.2007
Код почти весь твой оставил, единственное подсчет результата сделал отдельной процедурой
Код:
Program vichislenie;
uses crt;

type
f=array[1..5] of integer;

var
a:f;
b:f;
g:integer;
Procedure Enter(var c:f; var d:f);
var i,j{,g}:integer;
begin
       For i:=1 to 5 Do
       begin
       writeln('Enter ',i,' element of array A: ');
       readln(c);
       end;

       For j:=1 to 5 Do
       begin
       writeln('Enter ',i,' element of array B: ');
       readln(d[j]);
       end;

       g:=0;
       {
       For i:=1 to 5 Do
           for j:=1 to 5 Do
               If c=d[j] then
               begin
               g:=g+c;
               readln;
               end;}
end;
{obrabotka massiva}
procedure Obrabotka(var c:f; var d:f);
var i,j,sum:integer;
begin
sum:=0;
for i:=1 to 5 do
    begin
    for j:=1 to 5 do
       begin
       if c=d[j] then sum:=sum+d[j];
       end;
    end;
writeln('Summa=',sum)
end;

BEGIN
clrscr;
Enter(a,b);
obrabotka(a,b);
{writeln('Summa=',g);}
repeat until keypressed;
End.

сразу оговорюсь что если в массиве B будет несколько одинаковых чисел, то сумма кривовато будет считаться, поэтому надо либо отобрать из массива B только уникальные значения чисел, либо как советовала OlgaKr сделать функцию, тем более что тебе и надо [QUOTE=[FENIX]С использованием процедур, или функций[/QUOTE].
622
21 марта 2007 года
nilbog
507 / / 19.12.2006
эта процедура будет работать просто неправильно
440
28 марта 2007 года
[FENIX]
83 / / 29.01.2007
Во всех предложенных вариантах на выходе получается неправильный результат, но всё равно спасибо вам.

Тут не нужно отбрасывать одинаковые элементы, даже если они встречаются в одном и том же массиве.
Просто если какой-то элемент массива "А"= какому-то элементу массива "В", то его нужно сложить с такими же элементами в этом же массиве "А", которые имеют свои "копии" в массиве "В", а если они "копий" не имеют, то их просто пропускаем.
622
28 марта 2007 года
nilbog
507 / / 19.12.2006
я не верю что моя процедура работает неверно ))
как условие написали так она и выдает
на массивы
а : 1 2 3 4 5
b: 8 8 4 1 9
сумму выдаст 5
8.2K
13 апреля 2007 года
RusHak
86 / / 02.03.2006
Цитата: nilbog
я не верю что моя процедура работает неверно ))
как условие написали так она и выдает
на массивы
а : 1 2 3 4 5
b: 8 8 4 1 9
сумму выдаст 5



Как так, откуда сумма 5? В начале же ясно написано:
"Нужно составить программу вычисления [SIZE="2"]суммы тех элементов одномерного массива "А", которые одновременно встречаются в массиве "В"[/SIZE]"
т.е. дано
a:2,3,4,5,6
b:5,3,2,1,6
Смотрим 2<>5 идём дальше 3=3, then увличиваем sum на 3 (sum=sum+a), -> 4<>2 -> 5<>1 -> 6=6 значит увеличиваем сумму sum на 6. Тоесть изначально sum 0 потом +3 (т.к совпали), а потом на 6.

Так где же у тебя совпадают, там сумма будет=0.
Здесь простой алгоритм. В одном цикле смотрим, совпадают ли цифры массива или нет, если да то суммируем.
for i:=1 to n do //Где n размерность одномерного массива.
if a=b then summ=summ+a // Если совпали, значит суммируем
Всё, а остальное дело ввода и вывода

622
13 апреля 2007 года
nilbog
507 / / 19.12.2006
нужно было четче формулировать - к тому же с вашей интерпретацией условия задача решается черезчур тривиально 1 циклом
"Нужно составить программу вычисления суммы тех элементов одномерного массива "А", которые одновременно встречаются в массиве "В""
логично трактовать если i элемент а есть в массиве b значит суммируем
242
13 апреля 2007 года
Оlga
2.2K / / 04.02.2006
[COLOR=black]тема закрыта. вопрос давно решен и не стоит обсуждения.[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог