IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Паскаль. массивы.
aigulia
сообщение 22.04.2010 15:14
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Женский

Репутация: -  0  +


Помогите написать программы на Паскале! Сама в этом не разбираюсь, по этому прошу вашей помощи! Заранее спасибо!!

1. Если уравнение ax2 + bx + c = 0 (a не равно 0) имеет вещественные корни, то логической переменной t присвоить значение true, а переменным x1 и x2 – сами корни, иначе же переменной t присвоить false, а значения переменных x1и x2 не менять.
2. Дано 50 вещественных чисел. Найти порядковый номер того из них, которое наиболее близко к какому-нибудь целому числу.
3. Дано натуральное k. Напечатать k-ю цифру последовательности 1234567891011121314…, в которой выписаны подряд все натуральные числа.
4.Даны целые числа x1, x2, …, x55. Вычислить величину
x1(x2+x3)(x4+x5+x6)(x7+x8+x9+x10)…( x46+x47+…+x55).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
TarasBer
сообщение 22.04.2010 15:57
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Сама в этом не разбираюсь, по этому прошу вашей помощи!

Зря. Начали бы сами, помогли бы нормально. А так...

Специально напишу не на паскале, а на псевдокоде. Чтобы вам было, над чем подумать.
И правильность не проверял.

1.
Код

d := b^2-4ac; дискриминант
if d >= 0
  t := true;
  s := sqrt(d);
  x1 := (-b-s)/2a;
  x2 := (-b+s)/2a;
else
  t := false;
end if

2.
Код

for i from 0 upto 49
  ad := abs(M[i] - N); расстояния от текущего элемента массива до того числа
  if i = 0 or d > ad
    MinIndex := i;
    d := ad;
  end if;
end for;

3.
Код

N := 0;
L := 1;
M := 9;
while K > N     вычисление первой степени десятки, запись до которой содержит хотя бы K цифр
  ON := N;
  N := N + M * L;
  L := L + 1;
  M := M * 10;
end while;
RN := (K - ON - 1) div (L - 1) + M div 90;   вычисление числа, в запись которого попала K-я цифра
RD := L - 2 - (K - ON - 1) mod (L - 1);       порядковый номер цифры в числе
for i from 0 upto RD
  RN := RN div 10;
end for
Result := RN mod 10;

4.
Код

P := 1;
S := 0;
N := 1;
K := 2;
for i from 1 upto 55
  S := S + X[i];  временная сумма
  if i = N        номер элемента, в котором надо обнулить временную сумму
    P := P * S;   ответ
    S := 0;
    N := N + K;
    K := K + 1;
  end if;
end for


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.04.2010 4:09
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


По 4-й задаче: я б сделал вот так:
  p:=1;
for i:=1 to 10 do begin
s:=0;
for j:=1 to i do s:=s+x[(i-1)*i div 2+j];
p:=p*s
end;



P.S.
"псевдокод" я бы не приветствовал на форуме по Паскалю.. Правильно оформить реальный кусок кода - уже некоторая задача для новичка. Если недостаточно - есть и другие способы усложнить..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.04.2010 5:15
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


3-я задача тоже интересная. Я написал, потом стал смотреть решение TarasBer'а. Выяснилось, что ход решения практически тот же )). Потом я все же дал себе труд перевести этот "псевдокод" на Pascal, и - результат негативный ((. TarasBer, ищи ошибку. Мне кажется, ты запутался в последних подсчетах, но настаивать не буду..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.04.2010 8:17
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Во 2-й задаче, TarasBer, ты несколько не понял условие.. Нужно искать число, максимально близкое к любому (не важно, какому именно) целому.

Млжно примерно вот так:
  for i:=1 to 50 do a[i]:=Random*100;    {задаем массив вещественных чисел от 0 до 100}
d:=1.0; {подготавливаем минимальное расстояние}
for i:=1 to 50 do if Abs(a[i]-Round(a[i]))<d then m:=i; {поиск}
WriteLn('самое близкое к целому - число ',a[m],' под номером ',m); {вывод результата}


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 23.04.2010 10:02
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> for i:=1 to 50 do if Abs(a[i]-Round(a[i]))<d then m:=i;

А кто будет менять d?


for i := 1 to 50 do begin
ad := Abs(a[i] - Round(a[i]));
if (i = 1) or (ad < d) then begin
m := i;
d := ad;
end;
end;



> По 4-й задаче: я б сделал вот так:

Да, так лучше, тут я сбыдлокодил.

> Потом я все же дал себе труд перевести этот "псевдокод" на Pascal, и - результат негативный ((. TarasBer, ищи ошибку. Мне кажется, ты запутался в последних подсчетах, но настаивать не буду..

Очень может быть. Надо посмотреть. Вообще, конечно, можно тупо писать по очереди в строку, пока её длина не превысит k (чтобы память не тратилась, можно только запоминать длину, а строку заново переписывать для каждого числа), но это другой порядок скорости - O(n) вместо логарифма, мне это не нравится.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 23.04.2010 10:24
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Попробовал

for i := 0 to RD do RN := RN div 10;

Заменить на

for i := 0 to RD - 1 do RN := RN div 10;

Так лучше. Прогнал до k=1000, вроде достоверно.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.04.2010 10:24
Сообщение #8


Гость






Цитата
3. Дано натуральное k. Напечатать k-ю цифру последовательности 1234567891011121314…, в которой выписаны подряд все натуральные числа.
Задача решалась, причем не одним пользователем на этом форуме (См. Олимпиадные задачи, пост №15). Прежде всего надо было обратиться к поиску. Автор даже этого не сделал. Надо ему очень эти фрагменты решений? От сейчас их возьмет и пойдет на другой форум. А там ему слепят из них очередного монстра... "Псевдокод"... Я тебе, TarasBer, тоже как-нибудь отвечу с использованием псевдокода. Посмотрим, сколько тебе времени понадобится, чтобы разобраться и перенести решение на любой другой язык...
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.04.2010 10:55
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 23.04.2010 11:24) *
Задача решалась, причем не одним ...
Автор даже этого не сделал. Надо ему очень эти фрагменты решений?
volvo, я не думаю, что ты думаешь, что я думаю, что эта задача не решалась )). Но дело же не в этом..
В конце концов, главное - потрепаться, и чтоб задача была хорошая )). А что до автора - ну, ну.. ну - чиво тут поделаешь?.. СУДБА..

TarasBer, спасибо за поправку. И обрати внимание на слова volvo по псевдокоду тоже (я не одинок)).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"