Pascal, работа с массивами

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Straker
Сообщения: 1
Зарегистрирован: 03 фев 2008, 10:43

Дело в том, что, попросил одного знакомого помочь решить задачи на pascal. (естественно не бесплатно). Через неделю он мне вернул все решения, но одну задачу сделать не смог, сказал, что позже поковыряет, хотя сам код мне дал (он был не рабочим). Через пару дней, замучив его вопросами, он мне все-таки принес недоделанную задачу и сказал что все норм. Деньги я ему заплатил, но вот когда сверил два кода той самой задачи с недельным промежутком, они оказались одинаковы! Он утверждает,что все работает, но я сомневаюсь в этом. Сам в паскале не силен, поэтому прошу помочь знающих людей. Дело не в деньгах, дело в принципе.

Условие задачи такое: напечатать те элементы массива, которые встречаются более одного раза.
код:

Код: Выделить всё

program zad4;
const n=10;
var j,i,x:integer;
a:array[1..n] of integer;
b:array[1..n] of integer;
begin
writeln('Zapolnite massive');
for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
 end;

writeln;
writeln('Ishodniy massive');
for i:=1 to n do
 write(a[i], ' ');

writeln;
write('Vstrechaetsa 2 raza: ');
for i:=1 to n do
 begin
  x:=0;
  for j:=i to n do
   if a[j]=a[i] then x:=x+1;

  if x>2 then
 end;
 writeln;

readln;
end.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Вы правы. Вас развели... ;-)
Причём, самое интересное, что, если бы Вы взяли Pascal и запустили под ним этот код, вы увидели, что он позволяет Вам задать (ввести с клавы) массив из 10 целых чисел, потом выводит исходный массив на экран, а после пишет текст 'Vstrechaetsa 2 raza:"... и всё... на этом полёт мысли вашего "программиста" останавливается... ;-))
Dim...ON
Сообщения: 75
Зарегистрирован: 28 янв 2008, 01:10
Контактная информация:

совершенно очевидно развели.... а Вы не пробовали запускать эту задачу? Вы бы сами увидели, что результат не зависит от вводимых Вами чисел
просто надо обращаться за помощью не к "знакомым", а к опытным людям... на таких вот форумах как этот например
потому что со знакомых потом спрос плохой, а тут Вы можете требовать за свои деньги всё что вам положено
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Если нужно решение, то можно так:
[syntax='delphi']
program mass;

const
N=10;

var
M1:array[1..n] of integer;
M2:array[1..n] of integer;
i,j,k,count,idx:integer;
b:boolean;

begin
writeln('Введите элементы массива');
for i:=1 to n do
readln(m1);
idx:=0;
for i:=1 to n do
begin
count:=0;
for j:=1 to n do
if M1=M1[j] then
inc(count);

if count>1 then
begin
b:=true;
for k:=1 to idx do
if M2[k]=M1 then
b:=false;
if b then
begin
inc(idx);
m2[idx]:=m1;
end;
end;
end;
writeln;
writeln('Встречаются более одного раза:');
writeln;
for i:=1 to idx do
writeln(M2);
readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

На мой взгляд, программа ПОЧТИ рабочая.
Собственнно, внутри цикла после строки
if x>2 then
просто-напросто отсутствует вывод найденного элемента массива, встречающегося более двух раз.
Ну и внутренний цикл мне кажется логичным "круить" не от i, а от единицы.
Ведь, если, например, a[1] = a[3], то пожалуй, логично, чтобы программа сообщила об обоих этих элементах. А при внутреннем цикле от i найден будет только элемент a[1]

Код: Выделить всё

write('Vstrechaetsa bolee 2 raz: ');
for i:=1 to n do
 begin
  x:=0;
  for j:=1 to n do    // здесь исправил
    if a[j]=a[i] then x:=x+1;
  if x>2 then
    writeln ('a [', i, '] = ', a [i]);    // добавлена эта строка
 end;
Ответить