01.10.2013, 00:02 | #1 (permalink) |
Новичок
Регистрация: 30.09.2013
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Две задачи на Паскале
не могу разобраться,что не так с программами. Задание 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[i]); end; begin j:=h[max]; h[m]:=h[i]; h[m]:=j; end; for i:=1 to m do begin writeln (h[i]:9,'vector'); readln end; end. |
01.10.2013, 00:02 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Скорее всего тут вы найдете много полезной информации Простые задачи в Паскале Две задачи с массивами в Паскале Решение задачи в паскале |
01.10.2013, 09:45 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
По первой - а всё не так. Не понимаю, что у Вас изображает идентификатор 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. |
01.10.2013, 10:00 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Теперь - по второй.
Тут такой ужас, что я даже комментировать не берусь. Главное - абсолютно неграмотно организован обмен элементами. Впечатление, что фрагмент программы просто бездумно откуда-то скатан. Поиск максимального элемента массива отсутствует напрочь. И т.д. Ладно, вот отлаженный вариант - разбирайтесь: Код:
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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|