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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 12:22   #1
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию Найти ошибку в задаче на массивы

Даны три массива,надо сформировать массивы x и y по правилам:
x=a+b
y=b+c,
где a=a[i]/(max(a)-min(a)), b=b[i]/(max(b)-min(b)), c=c[i]/(max(c)-min(c)).

вот программа:

const nmax=30;
type tm=array[1..nmax] of integer;
var a,b,c,x,y:tm;
i,n,amax,amin,bmax,bmin,cmax,cmin:i nteger;
begin
writeln('razmer maccivov');
readln(n);
writeln('vvod elementov macciva A');
for i := 1 to n do read(a[i]);
readln;
writeln('vvod elementov macciva B');
for i := 1 to n do read(b[i]);
readln;
writeln('vvod elementov macciva C');
for i := 1 to n do read(c[i]);
readln;
amax:=a[1];
amin:=a[1];
bmax:=b[1];
bmin:=b[1];
cmax:=c[1];
cmin:=c[1];

for i:=1 to n do
begin
if a[i] > amax then
amax:=a[i];
if a[i] < amin then
amin:=a[i];
if b[i] > bmax then
bmax:=b[i];
if b[i] < bmin then
bmin:=b[i];
if c[i] > cmax then
cmax:=c[i];
if c[i] < cmin then
cmin:=c[i];
end;

for i:=1 to n do
begin
x[i]:=(a[i]/(amax-amin)) + (b[i]/(bmax-bmin))
y[i]:=(b[i]/(bmax-bmin)) + (c[i]/(cmax-cmin));
end;
readln;
end.
writeln('macciva x');
for i := 1 to n do write(x[i]:6:1);
readln;
writeln('macciva y');
for i := 1 to n do write(y[i]:6:1);
readln;
end.


у меня почему-то высвечивается ошибка в строке "y[i]:=(b[i]/(bmax-bmin)) + (c[i]/(cmax-cmin));"
что не так?
Катакомба вне форума Ответить с цитированием
Старый 14.10.2011, 12:28   #2
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

x[i]:=(a[i]/(amax-amin)) + (b[i]/(bmax-bmin))

возможно ";" в конце не хватает ))
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 14.10.2011, 12:33   #3
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

нет,если я ставлю ";" ,то он выделяет уже и эту "x[i]:=(a[i]/(amax-amin)) + (b[i]/(bmax-bmin))" строку
Катакомба вне форума Ответить с цитированием
Старый 14.10.2011, 12:42   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
type tm=array[1..nmax] of integer;
var a,b,c,x,y:tm;
У вас элементами массивов являются целые числа, а в результате деления
Цитата:
x[i]:=(a[i]/(amax-amin)) + (b[i]/(bmax-bmin))
элементом массива может оказаться и действительное число
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 14.10.2011, 12:44   #5
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

потому что x[i] ожидается что будет целое число а при делении a[i]/(amax-amin) получается вещественное
вам надо либо округлять (Round), либо делить нацело (div), либо менять тип выходных массивов на real.

Последний раз редактировалось Dush; 14.10.2011 в 12:50.
Dush вне форума Ответить с цитированием
Старый 14.10.2011, 12:52   #6
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

а как же тогда задать типы переменных?

type tm=array[1..nmax] of real;
var a,b,c,x,y:tm;
amax,amin,bmax,bmin,cmax,cmin:integ er;
n,i:real;
если так,то ему не нравится строка:"for i := 1 to n do read(a[i]);"


а так:
"type tm=array[1..nmax] of real;
var a,b,c,x,y:tm;
amax,amin,bmax,bmin,cmax,cmin:integ er;
n,i:integer;"
строка:"amax:=a[1];"
Катакомба вне форума Ответить с цитированием
Старый 14.10.2011, 12:53   #7
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

а зачем индексы i и n вы делаете вещественным? оставьте его integer
введите новый тип type tr=array[1..nmax] of real; x и y сделайте этим типом. все остальное оставьте без изменений
Dush вне форума Ответить с цитированием
Старый 14.10.2011, 12:56   #8
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

я пробовала:
"type tm=array[1..nmax] of real;
var a,b,c,x,y:tm;
amax,amin,bmax,bmin,cmax,cmin:integ er;
i:integer;
n:real;"

тогда не сходится что-то в строке: "for i := 1 to n do read(a[i]);"
Катакомба вне форума Ответить с цитированием
Старый 14.10.2011, 12:56   #9
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

входные массивы и индексы - integer, выходные - real
Dush вне форума Ответить с цитированием
Старый 14.10.2011, 13:04   #10
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

ура,работает

СПАСИБО ВСЕМ ОГРОМНОЕ за помощь!
Катакомба вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немогу найти ошибку в задаче на Си. Nox4o Помощь студентам 3 25.05.2011 13:11
найти ошибку в задаче! dark999 Помощь студентам 4 25.03.2011 15:15
НАйти ошибку в задаче dragun4ik Помощь студентам 6 29.06.2010 23:24
Помогите найти ошибку в задаче на С++ Nastya123 Помощь студентам 2 26.05.2009 14:18
помогите найти ошибку в задаче. Wia Помощь студентам 1 14.12.2008 17:19