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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2011, 18:29   #1
Jafrey
Новичок
Джуниор
 
Регистрация: 13.05.2011
Сообщений: 2
Печаль Массивы,паскаль. Ошибка в задачке

Код:
Program kontr3; 
var n,i:integer; 
 s:real; 
 m:array [0..100] of real; 
begin 
s:=0; 
write('Введите кол-во вводимых чисел'); 
readln(n); 
writeln('Вводите числа'); 
for i:= 1 to n do begin 
readln(m); 
if (m<0) and (m mod 2=1) then writeln(m) end; 
writeln('Отрицательные нечетные числа:',m); 
readln; 
end.
(m mod 2=1) - ругается на эту строчку "Error: Incompatible types: got "real" expected "longInt"

Последний раз редактировалось Stilet; 13.05.2011 в 19:44.
Jafrey вне форума Ответить с цитированием
Старый 13.05.2011, 18:33   #2
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 143
По умолчанию

Вы пытаетесь получить остаток от деления десятичного числа, по правилам Pasсal этого делать нельзя, исправьте тип данных массива на Integer
RomiKon вне форума Ответить с цитированием
Старый 13.05.2011, 18:35   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

m у вас это массив т.е. название области в памяти, в которой хранятся переменные с именами m[0], m[1] и т.д. (мб не совсем технически верно, но надеюсь поняли в чем ошибка)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.05.2011, 18:39   #4
Jafrey
Новичок
Джуниор
 
Регистрация: 13.05.2011
Сообщений: 2
По умолчанию

Блин) я в массивах ваще не секу да и в паскале в целом не особо, если пишу integer то у меня тупо выводит последнее вводимое значение суть задачи вот:
Пользователь вводит с клавиатуры N чисел. Вывести на экран все отрицательные нечетные числа
А сдать завтра надо!!! Очень выручайте кенты!
Jafrey вне форума Ответить с цитированием
Старый 13.05.2011, 18:48   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Сообщение выше прочитайте, у вас не только в типе массива ошибка. Невозможно такое сделать с массивами: вы пытаетесь что-то сделать со всем массивом сразу, но, к счастью, компилятор вас не понимает. Именно поэтому вы используете цикл for : чтобы обращаться к каждому элементу массива. Только надо записывать это не m, a m[i] ( readln( m[i] ); и т.д.)
И вывод чисел (writeln) тоже должен быть в цикле.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 13.05.2011 в 19:46.
Alex11223 вне форума Ответить с цитированием
Старый 13.05.2011, 19:37   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) переменную S выкинуть - она не нужна в этой задаче

2) описание массива должно быть (как уже НЕОДНОКРАТНО Вам говорили выше):
Код:
m:array [0..100] of integer;
3) ввод чисел нужно выполнять в отдельном цикле.
результаты выводить - в отдельном цикле.

4) опять же, как Вам ранее говорили, проверять надо так:
Код:
if (m[i]<0) and (m[i] mod 2=1) then writeln(m[i]) end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2011, 19:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пользователь вводит с клавиатуры N чисел. Вывести на экран все отрицательные нечетные числа
Безмассивный вариант:
Код:
uses crt;
var n,x,y,e:integer;
begin
Write('Input N ');readln(n);x:=1;clrscr;
while n>0 do begin Gotoxy(1,1);write(' ':20);
 GotoXY(1,1); Write('Input number ');Readln(e);
 if (e<0)and((e mod 2)=0) then begin GoToXY(x,2);write(e:5);inc(x,5);end; dec(n);
end; GotoXY(1,3);
write('...press enter to escape');readln;
end.
Мож и пригодится кому...
Цитата:
(m[i] mod 2=1)
Точно приоритеты соблюдены? Не заругается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2011, 22:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Виталий, ваш код выдаёт чётные отрицательные, а по условию надо нечётные!


Цитата:
Код:
(m[i] mod 2=1)
Точно приоритеты соблюдены? Не заругается?
приоритеты соблюдены. не заругается.
Но и работать не будет

минут пять потратил, прежде чем понял, в чём фишка
надо или так:
Код:
  if (m[i]<0) and (m[i] mod 2=-1) then writeln(m[i]);
или так
Код:
  if (m[i]<0) and (abs(m[i]) mod 2=1) then writeln(m[i]);
остаток от деления на два для отрицательного числа - это отрицательное число

но лучше всего, конечно, так:
Код:
  if (m[i]<0) and odd(m[i]) then writeln(m[i]);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в интересной задачке.. swink Паскаль, Turbo Pascal, PascalABC.NET 15 11.05.2009 15:10
Помощь в Задачке для начинающих С++ Woha Общие вопросы C/C++ 7 24.10.2008 20:11
Двухмерные массивы - ошибка fudzy79 Помощь студентам 21 06.02.2008 22:50