Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 18:54   #1
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию Четность элементов в массиве Pascal

Добрый день. Нужно написать программу, которая выбирает из массива элементы по двум критериям. 1 - они должны быть из диапазона 16-226 и 2 - они должны быть четными.
Программа вроде должна работать, но в итоге не работает =). Помогите найти ошибку. Код ниже:
Код:
program otbor;
uses crt;
var
a:array[1..20] of real;
i,n,k:integer;
x:real;
begin
textcolor(14);
textbackground(0);
clrscr;
writeln('Программа создает массив чисел и выбирает из них те числа,');
writeln('Которые являются четными и принадлежат промежутку от 16 до 226');
writeln;
repeat
write('Введите максимальное количество элементов массива - ');
read(n);
 if (n<=0) or (n>10) then
  begin
   writeln('Ошибка, число эл-тов строго больше 0 и не строго больше 10');
   writeln;
  end;
until (n>0) and (n<=10);
writeln;
writeln('Теперь заполним массив элементами');
writeln;
 for i:=1 to n do
  begin
   write('Сейчас вводим''[',i,']''элемент массива а, равный - ');
   read(a[i]);
  end;
 writeln;
  begin
   textcolor(12);
   textbackground(0);
   writeln('Исходный массив');
    for i:=1 to n do
     write(a[i]:1:1,' ');
    writeln;
    writeln;
  end;
   begin
    textcolor(14);
    textbackground(0);
    k:=0;
     for i:=1 to n do
      if (a[i]>16) and (a[i]<226) then
       begin
        k:=k+1;
       end
      else
       k:=k+0;
     writeln('Число элементов из промежутка 16--226 равно ',k);
   end;
    begin
     x:=0;
      for i:=1 to k do
       if (a[i] mod 2=0) then
        begin
         x:=x+1;
        end
       else
        x:=x+0;
      writeln;
       begin
        textcolor(12);
        textbackground(0);
        writelel('Получившийся массив');
         for i:=1 to x do
          write(a[i],' ');
       end;
    end;
repeat
until keypressed;
end.
Вначале делаем отсев по числам от 16 до 226. Тут все норм, дальше делаем проверку на четность и тут вот косяки. Компилятор постоянно ругается на строчку if (a[i] mod 2=0) then. Смотрел другие коды с аналогичными заданиями, но там реализуют проверку так, а у меня чего-то не работает. =(
Помогите пожалуйста.

Последний раз редактировалось Stilet; 30.07.2010 в 10:45.
Brian Spilner вне форума Ответить с цитированием
Старый 29.07.2010, 19:01   #2
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Код:
For i:=1 to n do
begin
If (a[i]>16) and (a[i]<226) and (a[i] mod 2=0) then
writenl('Число подходит');
Код:
   begin //тут бегин не нужен
    textcolor(14); 
    textbackground(0); 
    k:=0; 
     for i:=1 to n do 
      if (a[i]>16) and (a[i]<226) then 
       begin 
        k:=k+1; 
       end 
      else 
       k:=k+0; 
     writeln('Число элементов из промежутка 16--226 равно ',k); 
   end;//енд не нужен
В коде кое-где есть ненужные бегины и енды. Но это не влияет на правильность...
Должно быть так:
Код:
k:=0;
For i:=1 to n do
If (a[i]>16) and (a[i]<226) then
begin
inc(k); //k:=k+1
b[k]:=a[i]; //массив для новых значений, удовлетвор. 1-му условию
end;
x:=0;
For i:=1 to k do
If b[i] mod 2 = 0 then
begin
inc(x);
c[x]:=b[i];
end;
//В итоге получаем исходный массив, массив по 1-му условию и массив по второму условию.
Удачи ;-)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 29.07.2010 в 19:10.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 29.07.2010, 19:04   #3
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

так ведьн никакого отсева нет! массив не меняется
протсо считаетя количество подходящих
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 29.07.2010, 19:12   #4
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Код:
 
for i:=1 to n do 
if (a[i]>16) and (a[i]<226) then 
k:=k+1; 
writeln('Число элементов из промежутка 16--226 равно ',k); 
x:=0; 
for i:=1 to k do 
if (a[i] mod 2=0) then 
x:=x+1;
Первый фор:
Шаг 1:
a[1]=18;
k=1;
Шаг 2:
a[2]=24;
k=2;
Шаг 3:
a[3]=25;
k=2;
Шаг 6:
a[3]=30;
k=3;!!!!!!!!!!!!!! ВНИМАНИЕ!
и т.д.
Второй фор:
Шаг 1: (i=1..3) ТАК КАК к=3!
a[1]=18;
mod=0
Шаг 2:
a[2]=24;
mod=0
Шаг 3:
a[3]=25;!!!!!!!!!!!!!!!!!!
mod=1
и т.д.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 29.07.2010 в 19:25.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 29.07.2010, 19:30   #5
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

Все правлю как указано, но компилятор все равно подчеркивает знак "=" в строке a[i] mod 2=0. =( и выдает "Operand types don't match operator"...

Даже вот, пишу кусочек ( как-будто есть только одно условие - четность ) все равно не пускает дальше a[i] mod 2 = 0; Пример:
Код:
program hard;
uses crt;
var
a:array[1..20] of real;
i,n,k:integer;
begin
textcolor(14);
textbackground(0);
clrscr;
repeat
write('Кол-во эл-тов в массиве - ');
read(n);
 if (n<=0) or (n>20) then
  begin
   writeln('ЋиЁЎЄ*');
   writeln;
  end;
until (n>0) and (n<=20);
randomize;
 for i:=1 to n do
  a[i]:=random(225);
 begin
  for i:=1 to n do
   write(a[i]:1:1,' ');
 end;
 k:=0;
  for i:=1 to n do
   if a[i] mod 2=0 then
    begin
     k:=k+1;
    end
   else
    k:=k+0;
repeat
until keypressed;
end.

Последний раз редактировалось Stilet; 30.07.2010 в 10:46.
Brian Spilner вне форума Ответить с цитированием
Старый 29.07.2010, 21:05   #6
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я не вижу, чтобы у вас было написано так, как я сказал - это раз. Два: попробуйте создать новый файл, начал новый проект и/или подключить модуль math. я просто не знаю в чем тут может быть дело. попробуйте в скобки чтоли взять: (a[i] mod 2)=0
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 29.07.2010, 22:36   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
и выдает "Operand types don't match operator"...
Проблема в типе элементов массива, т.е. тип элементов должен быть целый:
Код:
a:array[1..20] of Integer;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 30.07.2010, 11:39   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

[QOUTE]
1 - они должны быть из диапазона 16-226 и 2 - они должны быть четными.
[/QUOTE]
Для этого вполне достаточно:
Код:
for i:=1 to n do
  if (not odd(a[i])) and (a[i] in [16..226]) then
    //a[i] - четное и принадлежит заданному диапазону и делайте с ним что угодно...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 02.08.2010, 21:22   #9
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

Спасибо всем огромное, разобрался!!!
Brian Spilner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
подсчет элементов в массиве счастливая Помощь студентам 1 17.05.2010 19:11
В массиве A, состоящем из 10 элементов, подсчитать количество положительных элементов Alex61 Помощь студентам 5 16.05.2009 23:06
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Количество элементов в массиве skit Общие вопросы C/C++ 3 18.03.2009 21:56