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

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

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

> Массивы, Из 2-х третий
rol5en
сообщение 11.12.2005 13:03
Сообщение #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 - 11.12.2005 13:12
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
APAL
сообщение 11.12.2005 13:17
Сообщение #2


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

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

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


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

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


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



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

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


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2005 13:22
Сообщение #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

 



- Текстовая версия 20.07.2025 10:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"