Алгоритмизация и программирование. 2

Министерство  образования Российской Федерации

Пензенский  Государственный Университет 
 

Кафедра ________________МОиПЭВМ_______________________________

Зав. Кафедрой _________________

      _____________________________

                                                                                              (ученое звание, ученая степень) 

      _______________________________2011г.

                                                                                               (подпись, инициалы, фамилия) 
 
 
 

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ

Пояснительная записка

к курсовой работе 

ПГУ 151001-2ДП-10ММ1-3-ПЗ

(обозначение  документа) 

Автор работы                                                    _________Е.А.Сидоркин____

      (подпись,  инициалы, фамилия)

Группа____10ММ1__________________Специальность____151001_________ 

Руководитель  Работы               ____________А.Н. Ракова__________________

                                                   (подпись, дата, инициалы, фамилия) 

Работа защищена «_____»_______2011г. Оценка_________________________ 

Члены комиссии:                                                     _________________________

      _________________________

      _________________________ 
 
 
 
 
 
 
 
 

2011 
 
 

Реферат

    Пояснительная записка содержит 16 листов, 2 рисунка, структуру ЭВМ, схему алгоритма, программу, результаты расчетов.

    В данной курсовой работе приведено задание, требующее для решения использования  современных средств вычислительной техники. Дана структура и описано  функциональное назначение блоков ЭВМ. Изложены математические подходы к решению задачи, поставленной в работе. Разработана схема алгоритма реализации ее решения. Предложен текст программы на алгоритмическом языке Turbo Pascal 7, представлены результаты расчетов и проведен их анализ. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

    Содержание

Введение………………………………………………………………………….5

1 Теоретическая  часть

       1.1 Современное направление развития  внутренней памяти ЭВМ………6

       1.2 Определение цикла в Turbo Paskal…………………………………….7

2 Определение  двух параметров геометрической  фигуры

       2.1 Математическая часть………………………………………………….12

       2.2 Описание алгоритма решения  задачи…………………………………13

       2.3 Анализ результатов вычисления………………………………………16

Заключение………………………………………………………………………17

Список используемых источников…………………………………………….18

Приложение. Текст  программы и распечатка с ЭВМ………………………. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Введение 

    Составление программ для ЭВМ и их эксплуатация – весьма сложное и трудоемкое занятие. Оно требует больших  затрат умственного труда и времени. Поэтому разработчики новых алгоритмических языков стремятся к тому, чтобы программирование было как можно более простым и доступным широкому кругу людей, работающих в различных отраслях промышленности.

    Язык  Паскаль, утвержденный в качестве стандартного в 1979 г., является наиболее совершенным по сравнению с такими универсальными языками программирования, как Алгол, Фортрант, Бейсик и др.

    Благодаря своей эффективности, простоте и  логичности, он быстро получил широкое  распространение во всем мире. В  настоящее время почти все вычислительные машины и особенно микроЭВМ, могут работать на этом языке. Тексты программ легко проверяются на правильность, так как смысл их прост и очевиден. И наконец язык Паскаль подходит для обучения начинающих программистов стилю программирования. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

        1 Теоретическая часть

        1.1 Современное направление развития внутренней памяти ЭВМ 

    Одним из основных направлений элементов  компьютера, позволяющим ему нормально  функционировать, является память. Внутренняя память компьютера (оперативная и кэш- память)  - это место хранения информации, с которой он работает. Она является временным рабочим пространством. Информация во внутренней памяти не сохраняется при выключении питания, на диске же или дискете может храниться годами без потребления питания. В постоянной памяти (ROM) персонального компьютера записан набор программ базовой системы ввода-вывода (BIOS). Эта память энергозависима и BIOS всегда готова к чтению при включении питания компьютера.

    Основная (оперативная) память (RAM- Random Access Memory – память с произвольным доступом) компьютера отличается от прочих устройств памяти, прежде всего тем, что к любому ее месту можно обратиться одинаково быстро, даже если делать это в случайном (произвольном) порядке(random аccess).

    Большинство старых программ, работающих под управлением  DOS, укладываются в сотни Кбайт – ведь DOS адресует только 640 Кбайт. Современные операционные системы многозадачные. Они позволяют нескольким программам действовать одновременно, а главное, взаимодействовать между собой. Поэтому для их работы требуется значительный объем оперативной памяти, например, для операционной системы Windows МЕ = 64 Мбайт, для Windows ХР = 128 Мбайт. Причем эти требования минимальны. Для приемлемой скорости работы с наиболее часто используемыми комбинациями программ эти цифры надо хотя бы удвоить или учетверить.

    Физически оперативная память устанавливается  в виде модулей SIMM(Single In-line Memory Modules) или DIMM (Double In-line Memory Modules) в специальные гнезда на материнской плате.

На системной  материнской плате модули памяти организуются в банки памяти. В  компьютерах последних лет разъемы  для модулей SIMM полностью исключены, так, что используются только DIMM  модули объемом 64 Мбайт и выше. Оперативная память подвержена многим помехам. Поэтому обычно к каждому  байту добавляют девятый бит – для контроля на четность. Существуют также способы автоматического восстановления информации при сбое. Однако они требуют большей избыточности памяти и , соответственно, повышают ее цену. Поэтому память с расширенным корректирующем кодом (ЕСС – Extended Correction Code) используют прежде всего, в мощных машинах, решающих серьезные задачи. 

     1.2 Операторы цикла в Турбо Паскале

   В большинстве  задач, встречающихся на практике, необходимо производить многократное выполнение некоторого действия. Такой многократно повторяющийся участок вычислительного процесса называется циклом.

   Если  заранее известно количество необходимых  повторений, то цикл называется арифметическим. Если же количество повторений заранее неизвестно, то говорят об итерационном цикле.

   В итерационных циклах производится проверка некоторого условия, и в зависимости от результата этой проверки происходит либо выход  из цикла, либо повторение выполнения тела цикла. Если проверка условия производится перед выполнением блока операторов, то такой итерационный цикл называется циклом с предусловием (цикл "пока"), а если проверка производится после выполнения тела цикла, то это цикл с постусловием (цикл "до").

   Особенность этих циклов заключается в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, а тело цикла с предусловием может ни разу не выполниться. В зависимости от решаемой задачи необходимо использовать тот или иной вид итерационных циклов.

   Арифметические циклы

   Синтаксис:

   for переменная := значение 1 to значение 2 do оператор

   или

   for переменная := значение 1 downto значение 2 do оператор

   Оператор for вызывает оператор, находящийся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.

   Переменная  цикла, начальное и конечное значения должны иметь порядковый тип. Со словом to, значение переменной цикла увеличивается на 1 при каждой итерации цикла. Со словом downto, значение переменной цикла уменьшается на 1 при каждой итерации цикла. Не следует самостоятельно изменять значение управляющей переменной внутри цикла.

   Как и  в случае использования оператора  условного прехода, следует помнить, что синтаксис языка допускает  запись только одного оператора после  ключевого слова do, поэтому, если вы хотите в цикле выполнить группу операторов, обязательно надо объединить их в составной оператор (окаймить операторными скобками begin ... end). В противном случае будет сделана логическая ошибка программы.

   Пример 1. Квадраты чисел от 2-х до 10-и.

   for x:=2 to 10 do WriteLn(x*x);

   Пример 2. Латинский алфавит.

   for ch:='A' to 'Z' do Writeln(ch);

   Пример 3. Использование  цикла с downto.

   for i:=10 downto 1 do WriteLn(i);

   Пример 4. Использование  составного оператора.

   for x:=1 to 10 do begin

        y:=2*x+3;

        WriteLn('f(',x,')=',y);

      end;

   Итерационные  циклы с предусловием

   Синтаксис:

   while выражение do оператор

   Оператор после do будет выполняться до тех пор, пока логическое выражение принимает истинное значение (True). Логическое выражение является условием возобновления цикла. Его истинность проверяется каждый раз перед очередным повторением оператора цикла, который будет выполняться лишь до тех пор, пока логическое выражение истинно. Как только логическое выражение принимает значение ложь (False), осуществляется переход к оператору, следующему за while.

   Выражение оценивается до выполнения оператора, так что если оно с самого начала было ложным (False), то оператор не будет выполнен ни разу.

   Здесь также следует помнить, что позволяется использовать только один оператор после ключевого слова do. Если необходимо выполнить группу операторов, то стоит использовать составной оператор.

   Пример.

   eps:=0.001;

   while x > eps do x:=x/2;

   Итерационные  циклы с постусловием

   Синтаксис:

   repeat

      оператор;

      оператор;

      ...

      оператор

   until выражение

   Операторы между словами repeat и until повторяются, пока логическое выражение является ложным (False). Как только логическое выражение становится истинным (True), происходит выход из цикла.

   Так как  выражение оценивается после выполнения операторов, то в любом случае операторы выполнятся хотя бы один раз.

   Пример.

   repeat

      WriteLn('Введите положительное число');

      ReadLn(x);

   until x>0;  

    

   Операторы завершения цикла

   Для всех операторов цикла выход из цикла осуществляется как вследствие естественного окончания оператора цикла, так и с помощью операторов перехода и выхода.

   В версии Турбо Паскаль 7.0 определены стандартные  процедуры:

   Break

   Continue

   Процедура Break выполняет безусловный выход  из цикла. Процедура Continue обеспечивает переход к началу новой итерации цикла.

   Заметим, что хотя и существует возможность  выхода из цикла с помощью оператора  безусловного перехода goto, делать этого  не желательно. Во всех случаях можно  воспользоваться специально предназначенными для этого процедурами Break и Continue.  
 
 
 
 
 
 
 
 
 

2 Определение двух  параметров геометрической  фигуры

2.1 Математическая часть 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рисунок 1 – Геометрические фигуры 

Объем цилиндрической трубы вычисляется по формуле (1):

 

(1) 

где h – высота цилиндрической трубы, r1 и r 2 – внутренний и внешний радиусы цилиндрической трубы.

Объем шара находим  по следующей формуле (2):

 
 
 

(2)

где r3 – радиус шара. 

Для решения  поставленной задачи надо найти минимальное  значение высоты цилиндрической трубы. 
 
 
 

    1. Описание  алгоритма решения  задачи
 
 
 

Функции:

  1. Vtr
 

     

          вход

      Vtr:= pi*h1*(sqr(r2)-sqr(r1)) 

             выход      

  1. Vchar

     

                               вход 

              Vshar:=(4*pi*r3*r3*r3)/3 
 
 

        выход 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Программа:

          начало  

 

                                                      h1, h2, m, r1,

                               r2, r3, r4, r5, k

цикл 1

h1:=h1+m

r3:=r3+k

  vtrub:=Vtr(h1,r1,r2)

  vsh:=Vchar(r3)

                                                            

                                                              цикл 1

vtrub<=vsh

h1<h2

r3>r5

                                                            h1:=h1-m

r3:=r3-k

vtr(h1,r1,r2), Vchar(r3),h1,r3

h1:=h1+m

r3:=r3+k

vtr(h1,r1,r2), Vchar(r3),h1,r3

h1:=h1-2*m

r3:=r3-2*k

vtr(h1,r1,r2), Vchar(r3),h1,r3

  конец

    По  условию задачи цилиндрической трубы  изменяется от h1 до h2 с шагом m и вычисляем объем цилиндрической трубы по формуле (1).

    Задаем  условие, что объем цилиндической  трубы не меньше объема шара радиуса  r3 (радиус r3 изменяется от r4 до r5 с шагом k одновременно с h), который вычисляется по формуле (2).

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

    Как только условие выполнится, будет  произведен вывод рассчитанных значений.

    В изображенном алгоритме блоки имеют  описанное ниже значение:

    1. Начало программы.

    2. Ввод данных.

    3. Начало цикла.

    4. Увеличиваем значение высоты  цилиндрической трубы.

    5. Увеличиваем значение радиуса  шара.

    6. Расчет объема цилиндрической  трубы.

    7. Расчет объема шара.

    8. Выход из цикла 1 при условии,  что объем цилиндрической трубы  меньше объема шара или при условии, что значение высоты цилиндрической трубы меньше конечного значения высоты цилиндрической трубы, или при условии, что значение радиуса шара превышает конечное значение радиуса шара.

    9. Уменьшаем значение высоты цилиндрической  трубы.

   10. Уменьшаем значение радиуса шара.

   11. Вывод рассчитанных данных.

   12. Увеличиваем значение высоты  цилиндрической трубы.

   13. Увеличиваем значение радиуса  шара.

   14. Вывод  рассчитанных данных.

   15.Уменьшаем  значение высоты цилиндрической  трубы на два шага.

   16.Уменьшаем значение радиуса шара на два шага.

   17. вывод  рассчитанных данных.

   18. Конец  программы. 

2.3 Анализ результатов  вычисления

    Расчеты, произведенные в программе, позволили  получить результаты, приведенные в таблице 1:

H1 16,1
h2 0,8
m -0.1
r4 1,8
r5 5,5
k 0,1
r1 6,6
r2 9,3
Объем Цилиндрической трубы  1429,607
Объем шара 696,910
Минимальное значение высоты 10,6
Максимальное  значение радиуса  шара 5,5
 

Таблица 1 – Результаты работы программы 
 
 
 

  
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Заключение 

    При разработке данной курсовой работы была составлена схема алгоритма. По данной схеме разработана программа. Она составлена на языке программирования высокого уровня Турбо Паскаль. Были описаны характеристики технических средств и используемой операционной системы, алгоритма, программы. Ошибки при отладке программы были исправлены и проанализированы. При выполнении программы получены результаты поставленной задачи. Следовательно, поставленная цель – достигнута.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Список  используемых источников 

  1. В.Ф. Шаньгин, П.М. Поддубная – «Прогаммирование на языке «Паскаль».
  2. Александр Левин «Турбо Паскаль 7.0» изд. «Питер».
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Приложение  А.

Текст программы и распечатка с ЭВМ

program kursovaya;

uses crt;

var

h1, h2, m, r1, r2, r3, r4, r5, k, vsh, vtrub:real;

function Vtr(h1,h2,r2:real):real;

begin

Vtr:= pi*h1*(sqr(r2)-sqr(r1));

end;

function Vshar(r3: real):real;

begin

Vshar:=(4*pi*r3*r3*r3)/3;

end;

begin

clrscr;

writeln('Vvod dannih:');

write('nachalnoe znacheni visoti h1:');

readln(h1);

write('konechnoe znachenie visotih2:');

readln(h2);

write('prirachenie visoti m:');

readln(m);

write('vnutrennii radius zilindricheskoi trubi r1:');

readln(r1);

write('vnechnii radius zilindricheskoi trubi r2:');

readln(r2);

write('nachlnoe znacenie radiusa chara r4:');

readln(r4);

write('konechnoe znachenie radiusa chara r5:');

readln(r5);

write('prirachenie radiusa k:');

readln(k);

repeat

h1:=h1+m;

r3:=r3+k;

vtrub:=Vtr(h1,r1,r2);

vsh:=Vshar(r3);

until(vtrub<=vsh) or (h1<h2) or (r3>r5);

h1:=h1-m;

r3:=r3-k;

writeln('rezultati  vichesleni:');

writeln('obiem zilindricheskoi trubi:', vtr(h1,r1,r2):8:3);

writeln('obiem chara:', Vshar(r3):8:3);

writeln('minimalnoe znachenie visoti:', h1:8:3);

writeln('maksimalnoe znachenie radiusa chara:',r3:8:3);

h1:=h1+m;

r3:=r3+k;

writeln('rezultat vicheslenii predidychii chag:');

writeln('obiem zilindricheskoi trubi:', vtr(h1,r1,r2):8:3);

writeln('obiem chara:', Vshar(r3):8:3);

writeln('minimalnoe znacenie visoti:',h1:8:3);

writeln('maksimalnoe znachenie radiusa chara:', r3:8:3);

h1:=h1-2*m;

r3:=r3-2*k;

writeln('rezultati vichslenii posledujuchi chag:');

writeln('obiem zilindricheskoi trubi:', vtr(h1,r1,r2):8:3);

writeln('obiem chara:', Vshar(r3):8:3);

writeln('minimalnoe znacheni visoti:', h1:8:3);

writeln('maksimalnoe znachenie radiusa chara:',r3:8:3);

readkey;

end. 

 

      Рисунок 2 – Результат вычислений 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Алгоритмизация и программирование. 2