Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
1. Найдите все простые числа от 1 до 100. Используйте параметризацию, чтобы потом легко было искать простые числа в других диапазонах. Составной частью программы должен быть блок, проверяющий наличие делителей и записывающей эту информацию в переменную-флаг.
2. Пусть имеется корабль с 10-ю грузовыми отсеками. Максимальная грузоподъемность корабля 100 тонн. Пока не заполнены все отсеки или не достигнута максимальная грузоподъемность, ваша программа должна запрашивать массу груза, помещаемого в очередной отсек. Как только дальнейшая загрузка станет невозможной, программа должна прекратить запрашивать массу новых грузов и вывести сообщение о причинах этого прекращения: «Трюм полон» или «Достигнута максимальная грузоподъемность». Запрос массы грузов и вывод результатов загрузки рассматривайте как отдельные блоки программы, информация между которыми передается с помощью переменной-флага.
3. Последовательность чисел, заданной формулой
не содержит отрицательных элементов при малых значениях x. С точностью до 0.0001 определите, начиная с какого x, отрицательные числа появляются среди первых 20-ти элементов этой последовательности. Используйте переменную-флаг для обозначения наличия или отсутствия отрицательных чисел в последовательности.
Следующий раздел:
Предыдущий раздел:
Нужна подсказка на второе задание ;p
Даже не знаю, как подсказать :) Вроде бы все очень просто.
Надо ещё раз внимательно прочитать :D
Ваши слова волшеблны :D С первой попытки после того как прочитал сделал xD
Не понимаю, как сделать задачу №3. Даже с чего начать не знаю.((( Подскажите, пожалуйста.
P.S. Вот… если бы формула выглядела так: y=sin(x^n) — проблем не возникло бы… а тут…
Извиняюсь, n должна быть в низу
Здравствуйте, никак не могу выполнить задание 1, может дадите какую-то зацепку? задание 2 так или надо доработать?:
var
massa, tonna, grus: integer;
max: boolean;
begin
grus:=0;
for tonna:=1 to 100 do
begin
readln(massa);
grus:=grus+massa;
max:=(grus>=100);
if max then
begin
write(‘stop’);
break;
end;
end;
end.
1-я, вроде, простая задача. Проверить, что одно число делится на другое, можешь?
По 2-й есть недостатки:
1) Отсеков 10, а запросов максимум сто.
2) Когда погрузка оканчивается, надо прекращать запрашивать массу новых грузов.
3) Сообщение в итоге должно быть не просто «стоп», а по какой из двух причин остановилась погрузка.
по второй задаче я наверное не совсем поняла условие, оператор break у меня в первом варианте ведь тоже используется, проверьте, пожалуйста, второй вариант:
var
massa, otsek, grus,x: integer;
max, max1: boolean;
begin
grus:=0;
for otsek:=1 to 10 do
begin
readln(massa);
grus:=grus+massa;
max:=(grus>=100);
max1:=(otsek=10);
x:=grus-100;
if max then
begin
write(‘dostignuta max grusopod. ‘,’svishe normi ‘,x,’ tonn’);
break;
end;
if max1 then
begin
write(‘trum perepolnen’);
break;
end;
end;
Первая задача наверняка легкая, но что-то я застопорилась на ней, попробую еще подумать))
2-я — правильна.
Задача с простыми числами оказалась не простой. Мой код получился такой, но вот куда воткнуть флаг — проблема.
var
a,b,c,d,i:integer;
begin
a:=2;
b:=3;
c:=5;
d:=7;
write(2,’, ‘,3,’, ‘,5,’, ‘,7,’, ‘);
for i:=10 to 100 do
if (i mod a)>0 then
if (i mod b)>0 then
if (i mod c)>0 then
if (i mod d)>0 then
write(i,’, ‘);
writeln;
end.
У меня тоже проблема с флагом (куда его) во второй, я ее расписала до полного заполнения трюмов и корабля, вот сокращенный вариант:
Решение написано для 4-х трюмов 40-тонного корабля.
program zadacha_2;
var
i, t: integer;
n, g, v1, v2, v3, v4, z1, z2, z3, z4: real;
begin
g:=40; {Грузоподъемность корабля}
v1:=10; {Вместимость трюма №1}
v2:=10; {Вместимость трюма №2}
v3:=10; {Вместимость трюма №3}
v4:=10; {Вместимость трюма №4}
for i:= 1 to 100000 do
begin
writeln (‘введите вес в тоннах’);
readln(n);
if g>0 then
begin
writeln (‘в трюме №1 — ‘, v1, ‘ тонн свободного места’);
writeln (‘в трюме №2 — ‘, v2, ‘ тонн свободного места’);
writeln (‘в трюме №3 — ‘, v3, ‘ тонн свободного места’);
writeln (‘в трюме №4 — ‘, v4, ‘ тонн свободного места’);
writeln (‘Введите номер трюма’);
readln (t);
if t = 1 then
begin
if v1=0 then
begin
writeln (‘Трюм уже полон, выберите другой.’);
g:=g+n;
end;
if v1>0 then
begin
z1:=v1;
v1:=v1-n;
end;
if v10 then
begin
z2:=v2;
v2:=v2-n;
end;
if v20 then
begin
z3:=v3;
v3:=v3-n;
end;
if v30 then
begin
z4:=v4;
v4:=v4-n;
end;
if v4<0 then
begin
writeln ('в трюме недостаточно места для этого груза, выберите другой трюм или груз поменьше');
v4:=z4;
g:=g+n;
end;
end;
end;
g:=g-n;
writeln('Осталось загрузить ', g, ' тонн.');
if g=0 then
begin
writeln ('Достигнута максимальная грузоподъемность.');
break;
end;
end;
end.
Третья с перебором от x=0,0001, 0,0002 до x, при котором формула содержит отрицательный элемент. Ответ:
при х = 1.059, элемент последовательности №20 отрицательный.
Правильно?
Роман, первая у меня так выглядит с флагом:
program zadacha_1;
var
c, n, i, k, d: integer;
R: boolean; {Переменая-флаг}
begin
writeln (‘Найдите все простые числа от 1 до n, введите n’);
readln(n);
for k:= 1 to n do
begin
d:=0;
for i:= 1 to k do
begin
c:= k mod i;
if c = 0 then
d:= d + i;
R:= (d=1+k);
end;
if R then
begin
write(k,’ ‘);
end;
end;
end.
Ответ в четвертой задачи:
785711 точек из 1000000 попало в круг.
Писала отдельно блок для верхнего полукруга и нижнего полукруга, можно ли так и есть ли способ проще?
Не сюда по четвертой написала, относится к следующему блоку заданий, сотрите, пожалуйста.
АленА, спасибо за флаг к первой задаче. Понравилось решение с кораблем (у Оксаны задача малоэффективна в реальной жизни). Думаю может и самому попробовать решать задачи ночью, а то днем до такого решения не дохожу:-)
program zadacha7_2;
var
a,b,c,d,e,v:boolean;
x,y,z,h:integer;
n,g,k:real;
begin
for x:=1 to 1 do
begin
for y:= 1 to 10 do
begin
n:=g;
b:= (n>=0) and (n=10) or (k<=0);
if a=true then
break;
end;
if a=true then
for h:=1 to 1 do
begin
if (a=true) then
break;
end;
g:=n-10;
if k<=0 then
writeln('Please enter a valid number!!!');
if k<=0 then
break;
c:= (y<10) and (g=0);
d:= (y0);
e:= (y=10) and (g=0);
v:= (y=10) and (g>0);
if c=true then
writeln(‘The compartment number ‘,y,’ is full.’);
if d=true then
writeln(‘The compartment number ‘,y,’ is full. The remained ‘,g,’ tones are transfered to next compartments.’);
if e=true then
writeln(‘The compartment number 10 is full.’);
if v=true then
writeln(‘The compartment number 10 is full. There are remained ‘,g,’ tones.’);
end;
if k>0 then
writeln(‘The ship is full!!’);
end;
end.
d:= (y0);
program N_2;{погрузка корабля}
var
i, k, p:integer;
x, y, s, d:real;
R:boolean;
begin
y:=0; s:=0; p:=1;
for i:=1 to (i+10-p) do
for k:=1 to 11-p do
begin
readln(x);
x:=x+d;
d:=0;
writeln(‘Масса нового груза=’, x);
if y+x<=10 then
begin
y:=y+x;
s:=s+x;
end else
begin
d:=y+x-10;{излишек веса отсека}
s:=s+10-y;
y:=10;
end;
if y=10 then
begin
p:=p+1;
y:=0;
end;
R:=(s=100);
writeln('Общая масса груза=', s);
end;
if R then
writeln('STOP!Достигнута максимальная грузоподъемность');
end.
Ответ:начиная с х=1,0152 sin(x в степени n)<0
program N7_3; {y_n=sin(x в степени n}
var
i, k, g:integer;
x, p, Step:real;
R:boolean;
begin
g:=8;
p:=1;
x:=1+Step;
Step:=0.0001;
for i:=1 to g+i do
for k:=1 to 20 do
begin
p:=p*x;
if p<=pi then
begin
x:=x+Step;
end else
begin
R:=true;
g:=0;
end;
end;
if R then
write('x=', x);
end.
Program Z_7_1;
var
i, k, n: integer;
flag: boolean;
begin
readln(n);
writeln(‘ N=’, n);
for i:=1 to n do
begin
flag:=true;
for k:=2 to i-1 do
begin
if ((i mod k)=0) then
flag:=false
else
flag:=flag and true;
end;
if (flag) then
write(‘ ‘,i);
end;
writeln;
writeln(‘ FINISH’);
end.
Program Z_7_2; {ПОГРУЗКА КОРАБЛЯ с 5 трюмами}
Const
Vmax=100; {грузоподъемность корабля}
v1=15; v2=20; v3=40; v4=20; v5=15; {v1+v2+v3+v4+v5>Vmax}
var
massa, gruz, gr, dv, i: integer;
gr1, gr2, gr3, gr4, gr5: integer;
flag1, flag2: boolean;
begin
gruz:= 0;
gr1:=0; gr2:=0; gr3:=0; gr4:=0; gr5:=0;
for i:=1 to 100 do
begin
write(‘ gr1=’, gr1, ‘ gr2=’, gr2, ‘ gr3=’, gr3, ‘ gr4=’, gr4, ‘ gr5=’, gr5);
writeln(‘ gruz=’, gruz);
writeln(‘ запрос массы нового груза’);
readln(massa);
writeln(‘ massa=’, massa);
gruz:= gruz+massa;
flag2:=(gruz>=Vmax);
if (flag2) then
begin
writeln(‘ STOP, Достигнута макс.грузоподъемность судна, dv=’, gruz-Vmax);
break;
end else
if ((gr1+massa)<=v1) then
begin
gr1:=gr1+massa;
writeln(' gr1=', gr1);
end else
if ((gr2+massa)<=v2) then
begin
gr2:=gr2+massa;
writeln(' gr2=', gr2);
end else
if ((gr3+massa)<=v3) then
begin
gr3:=gr3+massa;
writeln(' gr3=', gr3);
end else
if ((gr4+massa)<=v4) then
begin
gr4:=gr4+massa;
writeln(' gr4=', gr4);
end else
if ((gr5+massa)<=v5) then
begin
gr5:=gr5+massa;
writeln(' gr5=', gr5);
end else
begin
flag1:=true;
end;
if (flag1) then
begin
writeln(' STOP, ТРЮМ ПОЛОН');
break;
end;
end;
end.
Кажется так лучше:
Program Z_7_2; {ПОГРУЗКА КОРАБЛЯ с 5 трюмами}
Const
Vmax=100; {грузоподъемность корабля}
v1=15; v2=20; v3=40; v4=20; v5=15; {v1+v2+v3+v4+v5>Vmax}
var
massa, gruz, gr, dv, i: integer;
gr1, gr2, gr3, gr4, gr5: integer;
flag1, flag2: boolean;
begin
gruz:= 0;
gr1:=0; gr2:=0; gr3:=0; gr4:=0; gr5:=0;
for i:=1 to 100 do
begin
write(‘ gr1=’, gr1, ‘ gr2=’, gr2, ‘ gr3=’, gr3, ‘ gr4=’, gr4, ‘ gr5=’, gr5);
writeln(‘ gruz=’, gruz);
writeln(‘ запрос массы нового груза’);
readln(massa);
writeln(‘ massa=’, massa);
if ((gr1+massa)<=v1) then
begin
gr1:=gr1+massa;
writeln(' gr1=', gr1);
end else
if ((gr2+massa)<=v2) then
begin
gr2:=gr2+massa;
writeln(' gr2=', gr2);
end else
if ((gr3+massa)<=v3) then
begin
gr3:=gr3+massa;
writeln(' gr3=', gr3);
end else
if ((gr4+massa)<=v4) then
begin
gr4:=gr4+massa;
writeln(' gr4=', gr4);
end else
if ((gr5+massa)=Vmax);
if (flag2) then
begin
writeln(‘ STOP, Достигнута макс.грузоподъемность судна, dv=’, gruz-Vmax);
write(‘ gr1=’, gr1, ‘ gr2=’, gr2, ‘ gr3=’, gr3, ‘ gr4=’, gr4, ‘ gr5=’, gr5);
writeln(‘ gruz=’, gruz);
break;
end;
end;
end;
end.
В предидущем коменте не все скопировалось:
Program Z_7_2; {ПОГРУЗКА КОРАБЛЯ с 5 трюмами}
Const
Vmax=100; {грузоподъемность корабля}
v1=15; v2=20; v3=40; v4=20; v5=15; {v1+v2+v3+v4+v5>Vmax}
var
massa, gruz, gr, dv, i: integer;
gr1, gr2, gr3, gr4, gr5: integer;
flag1, flag2: boolean;
begin
gruz:= 0;
gr1:=0; gr2:=0; gr3:=0; gr4:=0; gr5:=0;
for i:=1 to 100 do
begin
write(‘ gr1=’, gr1, ‘ gr2=’, gr2, ‘ gr3=’, gr3, ‘ gr4=’, gr4, ‘ gr5=’, gr5);
writeln(‘ gruz=’, gruz);
writeln(‘ запрос массы нового груза’);
readln(massa);
writeln(‘ massa=’, massa);
if ((gr1+massa)<=v1) then
begin
gr1:=gr1+massa;
writeln(' gr1=', gr1);
end else
if ((gr2+massa)<=v2) then
begin
gr2:=gr2+massa;
writeln(' gr2=', gr2);
end else
if ((gr3+massa)<=v3) then
begin
gr3:=gr3+massa;
writeln(' gr3=', gr3);
end else
if ((gr4+massa)<=v4) then
begin
gr4:=gr4+massa;
writeln(' gr4=', gr4);
end else
if ((gr5+massa)=Vmax);
if (flag2) then
begin
writeln(‘ STOP, Достигнута макс.грузоподъемность судна, dv=’, gruz-Vmax);
write(‘ gr1=’, gr1, ‘ gr2=’, gr2, ‘ gr3=’, gr3, ‘ gr4=’, gr4, ‘ gr5=’, gr5);
writeln(‘ gruz=’, gruz);
break;
end;
end;
end;
end.
Непонятные искажения копирования программы.
Определите сами место вставки:
if ((gr5+massa)=Vmax);
//Задание 7: Переменные-флаги
//2. Пусть имеется корабль с 10-ю грузовыми отсеками. Максимальная грузоподъемность корабля 100 тонн.
//Пока не заполнены все отсеки или не достигнута максимальная грузоподъемность, ваша программа должна запрашивать массу груза, помещаемого в очередной отсек.
//Как только дальнейшая загрузка станет невозможной, программа должна прекратить запрашивать массу новых грузов и вывести сообщение о причинах этого прекращения:
//«Трюм полон» или «Достигнута максимальная грузоподъемность». Запрос массы грузов и вывод результатов загрузки рассматривайте как отдельные блоки программы,
//информация между которыми передается с помощью переменной-флага.
program a72;
var
otsek, qruz, massa: integer;
max, max1: boolean;
begin
qruz:=0;
for otsek:=1 to 10 do
begin
write (‘Введите массу добавляемого груза (можно в граммах) ‘);
read (massa);
qruz:=massa+qruz;
max:=(qruz>=100);
max1:=(otsek=10);
if max then
begin
write (‘Достигнута максимальная грузоподъемность ‘);
break;
end;
if max1 then
begin
write (‘Трюм полон’);
break;
end;
end;
end.
Задача сформулирована неправильно.
2. Пусть имеется корабль с 10-ю грузовыми отсеками. Максимальная грузоподъемность корабля 100 тонн. Пока не заполнены все отсеки или не достигнута максимальная грузоподъемность, ваша программа должна запрашивать массу груза, помещаемого в очередной отсек. Как только дальнейшая загрузка станет невозможной, программа должна прекратить запрашивать массу новых грузов и вывести сообщение о причинах этого прекращения: «Трюм полон» или «Достигнута максимальная грузоподъемность». Запрос массы грузов и вывод результатов загрузки рассматривайте как отдельные блоки программы, информация между которыми передается с помощью переменной-флага.
Ошибка тут в «Пока не заполнены все отсеки». Откуда мы можем знать заполнен ли определенный отсек. Нам не известно сколько тон вмещает каждый отсек. Неизвестно какого типа груз вмещается в них (если это хлопок, то естественно отсек заполнится при меньшей массе, чем если это свинец).
Ну а если просто взять, что в каждый отсек будем класть по 1 грамму груза, то программа выведет ‘Трюм полон’. Это смешно.
program задача_1;
var
i, n1, n2, x, y: integer;
a: real;
simple: boolean;
begin
writeln(‘1. Найдите все простые числа от 1 до 100. Используйте параметризацию, чтобы потом легко было искать простые числа в других диапазонах. Составной частью программы должен быть блок, проверяющий наличие делителей и записывающей эту информацию в переменную-флаг.’);
n1:=1;
n2:=100;
for i:=n1 to n2 do
begin
y:=0;
// составной блок
for x:=2 to i-1 do
begin
a:=i/x-i div x;
if a=0 then
y:=y+1;
end;
// составной блок
simple:=(y=0) and (i>1);
if simple then
write(i,’, ‘);
end;
writeln(‘…’);
end.