• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Две задачи на Паскале

  • Автор темы Автор темы tsss
  • Дата начала Дата начала

tsss

Ученик
Регистрация
30 Сен 2013
Сообщения
1
Реакции
0
Баллы
0
Две задачи на Паскале

Всем добрый вечер,прошу помощи)
не могу разобраться,что не так с программами.
Задание 1.
S=1+1/5^2+1/5^3+...
Найти значение S до указанной точности.
Мое решение :program v2;
var z,s:real;
n,E:integer;
begin
writeln('vvedite E');
readln(E);
n:=1;
z:=1/5;
while abs(z)>=E do
begin
S:=1+Z;
z:=1/(exp (E)*ln (5));
writeln('vot i vse',s,s:2:3);
readln
end;
end.

Задание 2.
В векторе x(n) поменять местами последний и максимальный элементы
program massiv;
const mmax=10;
var
h:array[1..mmax] of integer;
i,m,j:integer;
max:integer;
begin
max:=1;
writeln('vvedite kolichestvo elementov massiva');
readln(m);
for i:=1 to m do
begin
Write('h[',i,']=');
Readln(h);
end;
begin
j:=h[max];
h[m]:=h;
h[m]:=j;
end;
for i:=1 to m do
begin
writeln (h:9,'vector');
readln
end;
end.
 
не могу разобраться,что не так с программами.
По первой - а всё не так. Не понимаю, что у Вас изображает идентификатор E? Мера точности? Но как тогда понимать вот это:
z:=1/(exp (E)*ln (5));
Показатель степени? Но что за чуднОе условие выхода из цикла? И где он возрастает?
И почему "end", закрывающий цикл While..Do, поставлен после вывода результата?
И т.д. и т.п. и проч.
В общем, не программа, а какой-то бессмысленный набор символов.
Между прочим, этот ряд представляет собой бесконечно убывающую геометрическую прогрессию, и сумма его, определенная по формуле, есть
S = 1/(1-1/5) = 1.25
Это для контроля.
А теперь работающий вариант программы (точность Е вводится в виде 0.1, 0.001, 0.000005 и т.п.):
Код:
var
 z,S,E:real;
begin
 write('vvedite E: ');
 readln(E);
 z:=1;
 S:=0;
 while z>=E do
  begin
   S:=S+z;
   z:=z/5;
  end;
 writeln('vot i vse: ', S:0:5);
 readln
end.
 
Теперь - по второй.
Тут такой ужас, что я даже комментировать не берусь. Главное - абсолютно неграмотно организован обмен элементами. Впечатление, что фрагмент программы просто бездумно откуда-то скатан. Поиск максимального элемента массива отсутствует напрочь. И т.д.
Ладно, вот отлаженный вариант - разбирайтесь:
Код:
const
 mmax=10;
var
 h:array[1..mmax] of integer;
 i,m,j:integer;
 max:integer;
begin
 write('vvedite kolichestvo elementov massiva ');
 readln(m);
 for i:=1 to m do
  begin
   Write('h[',i,']= ');
   Readln(h[i]);
  end;
 Writeln;
 for i:=1 to m do write(h[i]:4);
 Writeln;
 Writeln;
 max:=1;
 for i:=2 to m do
  if h[i]>h[max] then max:=i;
 j:=h[max];
 h[max]:=h[m];
 h[m]:=j;
 for i:=1 to m do write(h[i]:4);
 readln
end.
 
Назад
Сверху