2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Олимпиадная задача по Pascal
Сообщение24.09.2010, 16:36 
~На круговую нитку нанизаны бусы. Таблица В содержит веса бусинок b1, b2, ..., bn, причём первым указан вес самой тяжёлой бусинки, веса остальных бусинок указываются в соответсвии с расположнием их на нитке при обходе её по часовой стрелке.
Перестроить таблицу В так, чтобы обход нитки по часовой стрелке начинался с бусинки с минимальным весом. Нитка не разрывается. Если решение не единственное, то найти любое (1<=n<=100, 1<=bi<=1000).
____________________________

Суть задачи понятна и ход решений тоже, только при написании уже в паскале выдается ошибка :cry: ...(там где описание переменных, а именно массива)


Код:
program Z6;
var    f1,f2:text;
        k,min,i:longint;
        a:array[1..n]of integer;
begin
assign(f1,'Intup.txt');
assign(f2,'Output.txt');
reset(f1);
rewrite(f2);
for i:=1 to n do
readln(f1,a[i]);
min:=a[1];
for i:=2 to n do
if a[i]<min then
a[i]:=k;
for i:=k to n do
writeln(f2,a[i]);
for i:=1 to k-1 do
writeln(f2,a[i]);
close(f1);
close(f2);
end.

 
 
 
 Re: Олимпиадная задача по VPascal
Сообщение24.09.2010, 16:42 
Где объявление n? Откуда взялось k?
Я бы объявил массив фиксированного размера, т.к. по условию n не больше 100. Но настоящее значение n должно быть где-то во входных данных, и переменную n всё равно надо объявить и прочитать.

 
 
 
 Re: Олимпиадная задача по Pascal
Сообщение24.09.2010, 16:59 
venco k-это переменная которой потом как раз присваиваю значения с мин и т.д...(чтоб не вводить второй массив)

т.к 9 класс то про фиксированный пока вообще не знаю ничего)
но опять вылетает в строке a:array[1..n]of integer "Cannot evaluate this expression"

 
 
 
 Re: Олимпиадная задача по Pascal
Сообщение24.09.2010, 17:04 
Nefik в сообщении #355808 писал(а):
venco k-это переменная которой потом как раз присваиваю значения с мин
Где?

Nefik в сообщении #355808 писал(а):
т.к 9 класс то про фиксированный пока вообще не знаю ничего)
но опять вылетает в строке a:array[1..n]of integer "Cannot evaluate this expression"
Что значит "опять"? Вы что-то изменили?

Совет:
прочитайте программу сверху вниз, и попытайтесь исполнить (хотя бы в уме) только то, что написано.
Например, дошли до строчки:
a:array[1..n]of integer
Заводим место под массив размера n... а сколько это? Ведь надо выделить конкретное количество памяти. Т.е. в этот момент значение n должно быть известно. А у Вас оно известно?

 
 
 
 Re: Олимпиадная задача по Pascal
Сообщение24.09.2010, 17:16 
Этот момент:
Код:
a[i]:=k;
for i:=k to n do
writeln(f2,a[i]);
for i:=1 to k-1 do
writeln(f2,a[i]);


Цитата:
Что значит "опять"? Вы что-то изменили?

добавила n в описание переменных, и перед началом цикла прочитала ее.

 
 
 
 Re: Олимпиадная задача по Pascal
Сообщение24.09.2010, 18:38 
Nefik в сообщении #355816 писал(а):
Этот момент:
Код:
a[i]:=k;
for i:=k to n do
writeln(f2,a[i]);
for i:=1 to k-1 do
writeln(f2,a[i]);
И где тут присваивание k?

Nefik в сообщении #355816 писал(а):
Цитата:
Что значит "опять"? Вы что-то изменили?

добавила n в описание переменных, и перед началом цикла прочитала ее.
При чём тут начало цикла. Массив-то объявлен выше. Так вот в строчке, где массив объявлен, границы индексов должны быть уже известны компилятору. Т.к. прочитать ещё ничего нельзя, предлагаю границы массива объявить фиксированным числом (100 достаточно), или именованной константой.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group