IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Массивы, Из 2-х третий
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  0  +


Помогите решить задачку или исправить эту!
Даны два одномерных массива чисел А и В.
Сформировать из них массив С, где к каждому четному элементу А
добавлено сколько раз этот элемент встречается в массиве В.
Короче надо чтобы все эл-ты из массива А передалась массиву С (это
работает), а потом надо чтобы все чётные (i mod 2 = 0) масива С при
совпадении с элементом массива В увеличивались на 1.

Код

UNIT Modul;

Interface
Procedure Reshenie;

Implementation
Uses CRT;
const
N = 100;{MaxLengthArray}
M = N*2;{MaxLengthArrayC}
K = 10; {random(10)}

type
TArray1 = array [1..N] of Real;
TArray2 = array [1..M] of Real;

Procedure Inform;
begin
ClrScr;
Writeln('Programma OK bla-bla');
Writeln;
end;

Procedure VvodMassivov(var lengA,lengB:Integer; var A,B:TArray1);
var i,par:Integer;
    ch:Char;
begin
repeat
  Writeln('Vvedite dlinnu massiva a, ne bolshe ',N);
  Readln(lengA);
  Writeln('Vvedite dlinnu massiva b, ne bolshe ',N);
  Readln(LengB);
  par:=0;
  if (lengA > 0) and (lengA <= N) and (lengB > 0) and (lengB <= N) then
    begin
     Writeln('Vi vveli: dlina massiva A = ',lengA);
     Writeln('          dlina massiva B = ',lengB);
     par:=1;
    end
else
  begin
   Writeln('Eror: Neverno vvedeni dannie');
   Writeln('Povtorit vvod/vidti? Y/N');
   ch:=ReadKey;
   if UpCase(ch) = 'N' then
      exit;
  end;
until par = 1;
randomize;
Writeln('Massive A:');
for i:= 1 to lengA do
     begin
      A[i]:=random(K);
      Write(A[i]:1:0,' ');
     end;
Writeln;
Writeln('Massive B:');
for i:= 1 to lengB do
     begin
      B[i]:=random(K);
      Write(B[i]:1:0,' ');
     end;
end;

Procedure ZapolnitC(lengA,lengB:Integer; A,B:TArray1; var C:TArray2);
var i,j:Integer;
begin
for i:=1 to lengA do
     C[i]:= A[i];
{Tut bla ne rabotaet sto-to}
for i:= 1 to lengA do
   if (i mod 2 = 0) then
     for j:=1 to lengB do
        if C[i] = B[j] then
           C[i]:= C[i] + 1;
end;
Procedure Reshenie;
var A,B:TArray1;
    C:TArray2;
    lengA,lengB,i:Integer;
begin
Inform;
VvodMassivov(lengA,lengB,A,B);
ZapolnitC(lengA,lengB,A,B,C);
Writeln;
Writeln('C');
for i:=1 to lengA do
     Write(C[i]:1:0,' ');
end;
end.

не знаю как сделать в окошке как вы извиняюсь

Сделал в окошке... smile.gif

Сообщение отредактировано: APAL -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
сообщение
Сообщение #2


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Уверен что это нужно?
Особенно первую строчку...
Код

Procedure Reshenie;
var A,B:TArray1;
    C:TArray2;
    lengA,lengB,i:Integer;


И в конце тогда убрать еще и "end;"



P.S.: Сорри, не сразу заметил, что это модуль...

Сообщение отредактировано: APAL -


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






rol5en, у тебя как только С[i] первый раз изменилось - уже дальше будет неверно... Надо запоминать это значение и с ним дальше сравнивать:
Код
Procedure ZapolnitC(lengA, lengB: Integer;
  A,B: TArray1; var C: TArray2);
var
  i,j:Integer;
  T: real;
begin
  for i:=1 to lengA do
    C[i]:= A[i];

  for i:= 1 to lengA do
    if (i mod 2 = 0) then begin
     T := C[i]; { <--- Здесь !!! }
     for j:=1 to lengB do
        if T = B[j] then
           C[i]:= C[i] + 1;
   end;

end;


Кстати, почему бы не сделать целые массивы? Или для Real есть другие причины?
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.09.2025 23:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name