Язык программирования

Автор: Пользователь скрыл имя, 15 Мая 2013 в 16:47, курсовая работа

Краткое описание

Язык Паскаль, названный в честь французского математика и философа Блеза Паскаля (1623-1662), был создан как учебный язык программирования в 1968-71 годах швейцарским ученым Никлаусом Виртом на кафедре информатики Стэнфордского университета (Цюрих). В настоящее время это язык имеет более широкую сферу применения, чем предусматривалось при его создании.

Оглавление

Введение 4
1 Теоретическая часть 5
1.1 Математическая постановка задачи 5
1.2 Язык программирования 5
1.3 Описание данных 20
1.4 Алгоритм решения задачи 21
1.5 Структурные схемы 23
2 Экспериментальная часть 27
2.1 Применение программы 27
2.2 Описание данных 27
2.3 Описание структуры программы 27
2.4 Руководство программиста 29
2.5 Анализ ошибок при отладке программы 29
2.6 Инструкция для использования 29
2.7 Анализ результатов решения 32
Заключение 33
Список литературы 34
Приложение. Листинг программы

Файлы: 1 файл

Никита.doc

— 294.00 Кб (Скачать)
    1. Описание данных

Входные данные:

  • число строк и столбцов матрицы М и N.
  • целочисленная матрица размерностью М´N.

Выходные данные:

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

Константы:

usl – строковой массив с условием задачи.

menupnt – количество пунктов меню (5).

menunames – массив наименований пунктов меню.

ymenu – вертикальная координата пунктов меню.

xmenu – массив горизонтальных координат пунктов меню.

Пользовательские типы:

massiv – тип одномерный массив размерностью 15 состоящий из целых чисел.

matrica – тип двумерный массив размерностью 15´15 состоящий из целых чисел.

Глобальные переменные.

m – число строк матрицы, тип integer.

n – число столбцов матрицы, тип integer.

menu – номер режима работы с программой, тип integer.

i, j – счетчики циклов, тип integer.

a – матрица, тип matrica.

v1,v2,v3,v4 – сформированные векторы, тип massiv.

s – служебная строка.

с – символ, считанный с клавиатуры.

t – текстовый файл для вывода результата.

Подпрограммы пользователя.

Процедура initialize

Назначение: инициализация графического режима работы и формирование рабочего окна программы.

Локальные переменные:

bgiMode – номер графического режима работы экрана, тип integer.

bgiDriver – номер графического драйвера, тип integer.

i – счетчик циклов, тип integer.

Функция mainmenu(i)

Назначение: движение по меню, выбор пункта.

Входные параметры:

i – номер текущего пункта меню, тип integer.

Выходные параметры: номер выбранного пункта меню.

Локальные переменные:

ch – код нажатой клавиши, тип char.

Процедура sumrow(a, m, n)

Назначение: нахождение суммы элементов в каждой строке.

Входные параметры:

m – число строк матрицы, тип integer.

n – число столбцов матрицы, тип integer.

a – матрица, тип matrica.

Процедура выводит в файл матрицу  и найденные суммы в конце каждой строки.

Локальные переменные:

sum – сумма элементов текущей строки строки, тип integer;

i, j – счетчики циклов, тип integer.

Процедура SbDivSa(v, n)

Назначение: расчет отношения суммы элементов массива, расположенных до минимального элемента в массиве, к сумме элементов, расположенных после минимального.

Входные параметры:

v – обрабатываемый вектор, тип massiv.

n – размерность вектора, тип integer.

Локальные переменные:

i – счетчик цикла, тип integer.

imin – индекс минимального элемента, тип integer.

s1 - сумма элементов вектора, расположенных до минимального элемента, тип integer.

s2 - сумма элементов, расположенных после минимального, тип integer.

otn - отношение найденных сумм, тип real.

    1. Руководство программиста

После завершения набора текста программы необходимо записать его на диск командой Save (F2).

Отредактированную программу необходимо преобразовать в машинные коды (скомпилировать). Для компиляции программы используется комбинация клавиш Alt+F9 или команда Compile меню Compile. Если программа использует нескомпилированные модули (или модули с обновленным текстом), то компиляция осуществляется командами меню Compile: Make (F9) – с компиляцией измененных модулей или Build – с перекомпиляцией всех модулей. Компилятор выявляет синтаксические ошибки, устанавливает на неправильном операторе курсор и выдает соответствующее сообщение. После исправления ошибки необходимо снова запустить компилятор.

В результате компиляции программы  образуется исполняемый файл (расширение .ЕXE) в оперативной памяти если установлена опция Memory в меню Compile, Destination или на диске (опция Disk) в каталоге, указанном в строке EXE & TPU directory меню Options, Directories.

Для запуска программы из среды  программирования необходимо использовать комбинацию клавиш Ctrl – F9 или пункт Run из меню Run.

    1. Анализ ошибок при отладке программы

При отладке программы  ошибок периода компиляции выявлено не было.

    1. Инструкция для использования

Выполняемый файл программы SMBDMA.EXE должен быть размещен в отдельном каталоге. В этом же каталоге должны находиться файлы:

Egavga.bgi – драйвер графического режима;

Trip.chr – русифицированный шрифт для графики.

Чтобы начать работать необходимо:

    • открыть папку Мой Компьютер;
    • выбрать диск на котором расположена программа;
    • найти папку с программой и открыть ее;
    • запустить файл SMBDMA.EXE.

После загрузки программы на экран  выводится окно с областью ввода  – вывода и главным меню, расположенным в нижней части (рис. 4). При начальной загрузке в окне ввода – вывода расположено условие задачи.

 

  1. Окно программы

Требуемый режим выбирается пользователем  клавишами управления курсором ¬ и ®, активация – нажатие клавиши Enter.

Рассмотрим назначение и использование пунктов меню.

1) Ввод с клавиатуры. На экран будет выведено приглашение к вводу данных. Пользователю необходимо ввести два целых числа от 2 до 15 (размерность матрицы). После этого необходимо задать построчно элементы матрицы (рис. 5). Разделитель значений внутри строки – пробел. И в завершении вводится число на которое будут сдвинуты элементы вектора.

 

  1. Диалог ввода

2. Загрузить из файла. Данный пункт позволяет загрузить данные из текстового файла. Пользователем вводится имя файла (рис. 6а). Файл может быть создан в любом текстовом редакторе или средствами самой программы.

 

а)

б)

  1. Ввод имени файла

Если файл не существует, программа  выведет сообщение об ошибке.

3. Сохранить массив. Введенную матрицу можно записать в текстовый файл и использовать в дальнейших расчетах. Для этого необходимо ввести имя файла (рис. 6б). При этом программа не проверяет существование файла с заданным именем. Если он существует, то производится перезапись данных.

4. Поиск решения. После выбора этого пункта программа произведет расчет в соответствии с постановкой задачи.

Результат будет помещен в текстовый  файл с именем v4 и выведен на экран в область вывода. Решение выводится в два приема – вначале матрица и найденные минимумы, затем. после нажатия любой клавиши –сформированные векторы.

5. Выход. Завершение работы с программой.

    1. Анализ результатов решения

Для проверки программы была взята  произвольная матрица. Прогонка программы на компьютере дала следующий результат:

 

Рис. 1. Результат

Заключение

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

Программа позволяет:

  • осуществлять ввод исходных данных с клавиатуры или файла;
  • находить для каждой строки сумму элементов;
  • формировать из строк таблицы векторы и подсчитывать соотношение сумм в заданных частях векторов.

Созданная программа позволяет  производить вычисления для любых целочисленных матриц.

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

Анализируя полученные результаты можно увидеть их полное совпадение с результатами ручного счета.

Также были освоены основные приемы программирования на языке Паскаль и работа в интегрированной среде по отладке и выполнению программы.

 

 

Список литературы

  1. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. –М.: Наука, 1987. –112 с.
  2. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. –Харьков: Фолио, 1997. –368 с.
  3. Гусева А. И. Учитесь программировать: Pascal 7.0; Задачи и методы их решения. – М.: «ДИАЛОГ–МИФИ», 1997. – 256 с.
  4. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. –М.: Диалог–МИФИ, 1995. –288 с.
  5. Поляков Д.Б., Круглов И.Ю. Программирование в среде Турбо Паскаль / Справочно–методическое пособие. –М.: Изд–во МАИ, 1992. –506 с.
  6. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. –М.: Нолидж, 1997. –616 с.
  7. http://www.pascaler.ru/enter/enter_1.html
  8. http://samcram.narod.ru/sait_pascal/st08.htm

 

 

Приложение. Листинг программы

Program SummRow_MinBDivMinAft;

Uses Crt, Graph;

const

  usl: array [1..6] of string[80] = (

  'Дан двумерный массив размером M*N. Найти сумму элементов',

  'каждой строки массива. Из  первых четырех строк массива',

  'сформировать четыре новых  вектора (одномерные массивы).',

  'Определить отношение суммы  элементов массива, расположенных',

  'до минимального элемента  в массиве, к сумме элементов,',

  'расположенных после минимального.');

  menupnt = 5;

  menunames: array [1..menupnt] of string[40] =

  ('Ввод с клавиатуры', 'Загрузить из файла',

   'Сохранить массив', 'Поиск  решения', 'Выход');

  ymenu=460;

  xmenu:array [1..menupnt] of integer=(20,180,335,460,575);

type

  massiv = array [1..15] of integer;

  matrica = array [1..15] of massiv;

var

m,n,k,menu,i,j:integer;

a: matrica;

v1,v2,v3,v4:massiv;

s:string;

c:char;

t:text;

procedure initialize;

var

  bgiDriver,bgiMode,i:integer;

begin

  bgiDriver := VGA; bgiMode := VGAHi;

  initgraph(bgiDriver, bgiMode, 'bgi');

  directvideo := false;

  setcolor(0);

  settextjustify(0, 0);

  settextstyle(1, 0, 1);

  SetUserCharSize(1, 3, 1, 2);

  setfillstyle(1,15);

  bar3d(1, 1, getmaxx-2, getmaxy-2,0,false);

  bar3d(5, 5, getmaxx-7, getmaxy-7,0,false);

  setfillstyle(1,8);

  bar3d(7, getmaxy-39, 450, getmaxy-9,0,false);

  setfillstyle(1,1);

  bar3d(455, getmaxy-39, 552, getmaxy-9,0,false);

  setfillstyle(1,4);

  bar3d(557, getmaxy-39, getmaxx-9, getmaxy-9,0,false);

  setcolor(2);

  SetUserCharSize(1, 2, 1, 1);

  for i:=1 to 6 do

    outtextxy(25, 40 + (i - 1) * 30, usl[i]);

  SetUserCharSize(1, 3, 1, 2);

  setcolor(15);

  for i:=1 to menupnt do

    outtextxy(xmenu[i], ymenu, menunames[i]);

  rectangle(xmenu[1]-3, ymenu+7,

  xmenu[1]+textwidth(menunames[1])+2, ymenu-15);

  menu:=1;

end;

function mainmenu(i:integer):integer;

{движение по меню, выбор пункта}

var

  ch: char;

begin

  repeat

    ch := Readkey; {читаем клавишу}

    if ch = #0 then

      ch := Readkey;

    if ch in [#75, #77] then

      begin

        if i in [1..3] then

          setcolor(8)

        else

          if i = 4 then

            setcolor(1)

          else

            setcolor(4);

        rectangle(xmenu[i]-3, ymenu+7,

        xmenu[i]+textwidth(menunames[i])+2, ymenu-15);

        case ch of {обработка}

          #77: begin

                 i := i + 1;

                 if i > menupnt then i := 1;

               end;

          #75: begin

                 i := i - 1;

                 if i < 1 then i := menupnt;

               end;

        end;

        setcolor(15);

        rectangle(xmenu[i]-3, ymenu+7,

        xmenu[i]+textwidth(menunames[i])+2, ymenu-15);

      end;

  until ch = #13; {пока не нажата Enter}

  mainmenu:=i;

end;

procedure sumrow(a: matrica; m,n: integer);

{нахождение суммы элементов  каждой строки}

var

  sum,i,j: integer;

begin

  writeln(t,'Исходная матрица и  суммы элементов строк');

  for i := 1 to M do

    begin

      sum := 0;

      for j := 1 to N do

        begin

          write(t, a[i,j]:6);

          sum := sum + a[i, j];

        end;

      writeln(t,'| Сумма=',sum);

    end;

end;

procedure SbDivSa(v: massiv; n: integer);

{отношение суммы элементов массива,  расположенных

 до минимального элемента  в массиве, к сумме элементов,

 расположенных после минимального}

var

  i,imin,s1,s2: integer;

  otn: real;

begin

  for i := 1 to n do

    write(t, v[i]:6);

  writeln(t);

  imin := 1;

  for i := 1 to n do

    if v[i] < v[imin] then

      imin := i;

  writeln(t,'Минимум ',v[imin],' позиция ', imin);

  s1 := 0;

  s2 := 0;

  for i := 1 to n do

    begin

      if i < imin then

        s1 := s1 + v[i];

      if i > imin then

        s2 := s2 + v[i];

    end;

  otn := s1 / s2;

  writeln(t,'Отношение ',otn:3:2);

end;

begin

  initialize;

  repeat

    menu:=mainmenu(menu);

    case menu of

     1:begin {клавиатура}

         setfillstyle(1,0);

         bar(7, 7, getmaxx-9, getmaxy-43);

         window(2,2,79,24);

         write('Задайте размерность матрицы M*N ');

         readln(m,n);

         writeln('Задайте  матрицу построчно');

         for i:=1 to m do

           begin

             write(i, ': ');

             for j:=1 to n do

               read(a[i,j]);

             readln;

           end;

         writeln('для продолжения нажмите клавишу ...');

       end;

     2:begin {файл}

         setfillstyle(1,0);

         bar(7, 7, getmaxx-9, getmaxy-43);

         window(2,2,79,24);

         write('Задайте имя файла ');

         readln(s);

         {$I-} assign(t, s); reset(t); {$I+}

         if ioresult <> 0 then

           begin

             writeln('Файл ' + s + ' не найден!');

             continue;

           end;

         readln(t,m,n);

         for i:=1 to m do

           begin

             for j:=1 to n do

               read(t, a[i,j]);

             readln(t);

           end;

         readln(t,k);

         close(t);

         writeln('Данные  успешно считаны.');

       end;

     3:begin {запись}

         setfillstyle(1,0);

         bar(7, 7, getmaxx-9, getmaxy-43);

         window(2,2,80,25);

         write('Задайте имя файла ');

Информация о работе Язык программирования