Паскаль - Форум
Среда, 07.12.2016, 11:37
Задачи по информатике
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ignorer, KOT_B_MEIIIKE, PASCAL26, atvrider 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Паскаль (Помогите!надо решить на завтра 22/01/10)
Паскаль
YagodkaДата: Четверг, 21.01.2010, 16:08 | Сообщение # 1
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
1)Дано натуральное число п. Можно ли представить его в виде суммы двух квадратов натуральных чисел? Если можно, то:
А) указать, пару х,у таких натуральных чисел, что п=х(в квадрате)+у(в квадрате)
Б) указать все пары х,у таких натуральных чисел, что п=х(в квадрате)+у(в квадрате), х>=у

2) и 3) ВЫБОРОЧНО!!!
2) Даны пять попарно различных целых чисел a,b,c,d,e.Упорядочить их по возрастанию, используя для этого не более семи сравнений.
3)Даны децствительные числа А1,...,Ап. Получить попарно различные целые j1,...,jn. таких, что 1<=jk<=n, k=1,..,n и Aj1>=Aj2>=...>=Ajn

 
ignorerДата: Четверг, 21.01.2010, 16:24 | Сообщение # 2
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
поразительно, но здесь решается задачка аналогичная первой smile
 
ignorerДата: Четверг, 21.01.2010, 16:29 | Сообщение # 3
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
ну, вроде вот первая:
var n, x, y : integer;
begin
cls;
read(n);
for y:=1 to round(sqrt(n)) do
for x:=y to round(sqrt(n)) do begin
if sqr(x)+sqr(y)=c then writeln(x, ' ', y);
end.
 
YagodkaДата: Четверг, 21.01.2010, 16:49 | Сообщение # 4
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
ignorer,
спасибки за первую)))
 
ignorerДата: Четверг, 21.01.2010, 16:49 | Сообщение # 5
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
Quote (Yagodka)
2) Даны пять попарно различных целых чисел a,b,c,d,e.Упорядочить их по возрастанию, используя для этого не более семи сравнений.

прикольная задачка, мне очень нравится.
 
YagodkaДата: Четверг, 21.01.2010, 16:54 | Сообщение # 6
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
ignorer,
мне ниодна из них аж ни как не нравиться=)
 
ignorerДата: Четверг, 21.01.2010, 17:04 | Сообщение # 7
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
Quote (Yagodka)
мне ниодна из них аж ни как не нравиться=)

smile логично. просто мне тренироваться надо, а эта задачка хорошо заставляет подумать. мне задачка потому нравиться, что писать её алгоритм сложно, а как посмотреть на уже написанный алгоритм, так понимаешь, что задчка проще некуда(по крайней мере мне так кажется).
 
ignorerДата: Четверг, 21.01.2010, 17:07 | Сообщение # 8
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
но скажу сразу, что третью как решить я не знаю.
 
YagodkaДата: Четверг, 21.01.2010, 17:09 | Сообщение # 9
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
ignorer,
biggrin и вот кстате, ты ж мне напишеш, что там в каждой строке делается? и в 1 задаче там же А и Б, и как мне понять где ты мне А написал, а где Б?
 
ignorerДата: Четверг, 21.01.2010, 17:20 | Сообщение # 10
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
ну, кажись, получилось. и всё-таки задачка хоть и сложная, но интересная smile лучше конечно перепроверь, хотя чтобы полностью быть уверенным в правильности работы программы нужно перебрать 120 возможных вариантов расстановки чисел smile
procedure swap(var a, b : integer);
var c : integer;
begin
c:=a; a:=b; b:=c;
end;
var a, b, c, d, e : integer;
begin
cls;
read(a, b, c, d, e);
if a>e then swap(a, e);
if b>d then swap(b, d);
if b>c then swap(b, c);
if c>d then swap(c, d);
if d>e then swap(d, e);
if c>d then swap(c, d);
if b>c then swap(b, c);
write(a, ' ', b, ' ', c, ' ', d, ' ', e);
end.
 
YagodkaДата: Четверг, 21.01.2010, 17:25 | Сообщение # 11
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
ignorer,
спасибки тебе огромное! так это ты мне 2 или всетаки 3 решил? и что значит ВАР в скобках, почему оно в скобках?и где в 1 А и где Б! чтото я ничего не пойму(((


Сообщение отредактировал Yagodka - Четверг, 21.01.2010, 17:26
 
ignorerДата: Четверг, 21.01.2010, 17:26 | Сообщение # 12
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
Quote (Yagodka)
где ты мне А написал, а где Б?

я решил Б. впринципе, по-моему А и Б - одно и то же, только в Б отсекаются все одинаковые варианты.
вот А:
var n, x, y : integer;
begin
cls;
read(n);
for y:=1 to round(sqrt(n)) do
for x:=y to round(sqrt(n)) do
if sqr(x)+sqr(y)=n then writeln(x, ' ', y);
end.
вот Б:
var n, x, y : integer;
begin
cls;
read(n);
for y:=1 to round(sqrt(n)) do
for x:=y to round(sqrt(n)) do
if sqr(x)+sqr(y)=n then writeln(x, ' ', y);
end.
 
ignorerДата: Четверг, 21.01.2010, 17:33 | Сообщение # 13
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
Quote (Yagodka)
чтото я ничего не пойму(((

ща усё объясню:
принцип действия 1Б:
var n, x, y : integer;
begin
cls; очищаем экран
read(n); считываем с клавиатуры число
for y:=1 to round(sqrt(n)) do перебираем y от 1 до round(sqrt(n)). round(sqrt(n)) - округлённое значение квадратного корня из n
for x:=y to round(sqrt(n)) do перебираем x от y до round(sqrt(n)). перебираем от y чтобы было х>=у
if sqr(x)+sqr(y)=n then writeln(x, ' ', y); если n равно сумме квадратов x и y, то выводим х и у и переходим на следующую строку.
end.
 
ignorerДата: Четверг, 21.01.2010, 17:45 | Сообщение # 14
Генералиссимус
Группа: Модераторы
Сообщений: 602
[ 18 ]
Статус: Offline
Quote (Yagodka)
так это ты мне 2 или всетаки 3 решил? и что значит ВАР в скобках, почему оно в скобках?

я тебе решил вторую. вот принцип действия:
procedure swap(var a, b : integer); объявляем процедуру, которая будет называться swap. в скобках написаны названия переменных в этой процедуре. ты знаешь как работает процедура, как связываются переменные в процедурах с переменными в программе и т.п.?
var c : integer; тут мы объявляем переменную в самой процедуре, т.е. на ход программы она не влияет, но нужна во время действия процедуры.
begin
c:=a; a:=b; b:=c; это тело процедуры. здесь мы просто меняем местами переменные а и b
end;
var a, b, c, d, e : integer; объявляем переменные
begin
cls; чистим экран
read(a, b, c, d, e); читаем значения переменных
следующие 7 строк - сам алгоритм сравнения
if a>e then swap(a, e); сравниваем a и е
if b>d then swap(b, d); сравниваем b и d
if b>c then swap(b, c); сравниваем d и c
if c>d then swap(c, d); сравниваем c и d
if d>e then swap(d, e); сравниваем d и е
if c>d then swap(c, d); сравниваем c и d
if b>c then swap(b, c); сравниваем b и c
write(a, ' ', b, ' ', c, ' ', d, ' ', e); выводим переменные в следующем порядке: а, b, c, d, e (они должны выводиться по возрастанию), разделяя их пробелами
end.
я не умею объяснять поэтому если не понимаешь, что такое процедура и с чем её едят, то лучше посмотреть в инете.
 
YagodkaДата: Четверг, 21.01.2010, 17:45 | Сообщение # 15
Лейтенант
Группа: Участник
Сообщений: 13
[ 0 ]
Статус: Offline
ignorer,
о супер!спасибо тебе!
 
Форум » Решение задач по информатике » Задачи по программированию + блок-схемы » Паскаль (Помогите!надо решить на завтра 22/01/10)
Страница 1 из 11
Поиск:

Copyright MyCorp © 2016