Курсовая Разработка консольных приложений в среде Delphi
Работа добавлена на сайт bukvasha.net: 2015-10-25Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Кафедра информационных технологий
Учебная дисциплина
«Информатика и программирование»
КУРСОВАЯ РАБОТА
На тему: Разработка консольных приложений в среде Delphi
Выполнила Жолобова Д. Е.
Руководитель Родин Д. А.
Тула, 2010 год
Оглавление
Введение. 2
Глава 1. Простейшие арифметические и логические операции. 2
Глава 2. Линейные программы.. 2
Глава 3. Ветвящиеся программы.. 2
Глава 4. Циклические программы.. 2
Глава 5. Двумерные массивы.. 2
Глава 6. Строковый тип данных. 2
Глава 7. Операции с файлами. 2
Заключение. 2
Список использованной литературы.. 2
Введение
В наше время программированием занимаются многие ПК-пользователи. И это вполне объяснимо: с помощью программ можно решать достаточно сложные задачи – задачи, которые могут отнять у человека много драгоценных часов, в то время как компьютер решит их за доли секунд. Кроме того, поработав какое-то время с чужими программами, хочется создать нечто свое, родное. И тогда возникает вопрос: с чего начать? Выбор языков программирования на данный момент очень велик: Basic, Pascal, C, Perl и так далее. Basic – самый легкий из этого списка, его не зря называют основой программирования, так как обычно начинают именно с него. Однако этот язык недостаточно мощный, поэтому сейчас многие начинают с чего-то более серьезного, например, с Паскаля (Pascal)[1].
Именно с ним в данной курсовой работе мы и будем работать. В качестве среды для разработки приложений на этом языке выберем среду языка Delphi, который развился из Турбо Паскаля, а тот, в свою очередь, – из Паскаля.
Delphi позволяет разрабатывать приложения Windows. Но в этой работе мы рассмотрим только создание программ в стиле MS-DOS, называемых консольными приложениями. Внешне они выглядят, как программы с текстовым интерфейсом, но способны обращаться к большинству функций Windows. Пример консольного приложения показан ниже, на рис. 1.
Чтобы создать консольное приложение, например, в Borland Delphi 7, надо дать команду File
►
New
и в диалоговом окне New
Items выбрать значок Console
application (рис. 2.).
Ну и в завершение вступительных слов скажем, что цель данной курсовой работы – продемонстрировать, как, разрабатывая консольные приложения, эффективно решать ряд задач.
Глава 1. Простейшие арифметические и логические операции
Задача 1.7. Некто располагает суммой в А руб. Он хочет купить В книг по С руб. и D журналов по Е руб. Написать программу, проверяющую, возможна ли такая покупка.
Решение.
Вначале составим алгоритм решения поставленной задачи.
1. Ввести с клавиатуры исходные данные: А, В, С, D
,
E
2. Проверить корректность введенных данных. Например, очевидно, что количество не может быть меньше единицы, так же как и стоимость не может быть отрицательной.
3. Повторить ввод данных, если они некорректны, или перейти к следующему шагу, если все верно.
4. Подсчитать стоимость всей покупки.
5. Сравнить сумму имеющихся денег (А) со стоимостью покупки (K) и вывести соответствующее сообщение: если A < K, то покупка не удастся, в ином случае покупка удастся.
Так как в данном случае количество может быть только целым числом, мы присвоим переменным, обозначающим количество книг и журналов, B и D целочисленный тип integer, а переменным A
,
C
,
E
,
K – вещественный тип real.
В данной задаче удобно воспользоваться циклом с постусловием repeat
…
until, который повторяется до тех пор, пока не станет истинным условие. Чтобы организовать из него выход, введем еще одну, дополнительную, переменную f логического типа boolean и присвоим ей значение false. Так, если пользователь ввел некорректные данные, то переменной f присваивается значение true, цикл повторяется, и ввод данных осуществляется снова; если данные корректны, то цикл завершается.
repeat //входим в цикл repeat...until
f:=false; //предположим, что ошибок нет
write ('Введите сумму (A): ');
readln(A);
write ('Количество желаемых книг (B): ');
readln(B);
write ('Стоимость одной книги (C): ');
readln(C);
write ('Количество желаемых журналов (D): ');
readln(D);
write ('Стоимость одного журнала (E): ');
readln(E);
if ((A<1) or (B<1) or (C<0) or (D<1) or (E<0)) then // Проверяем правильность ввода
begin
f:=true; //Если что-то введено неправильно, присваиваем переменной f значение true
writeln ('Ошибка! Повторите ввод, пожалуйста');
end;
until not f; //Если ошибок нет, выходим из цикла
Посчитаем общую стоимость покупки: количество книг умножим на цену одной книги и сложим с произведением количества журналов на стоимость одного журнала. Получившуюся сумму присвоим переменной K и сравним со значением переменной А.
K := C * B + E * D; // считаем общую стоимость покупки
If A<K then // Проверяем возможность покупки и выводим соответствующее сообщение
Для удобства, при выводе результатов типа real целесообразно их округлять. Что мы и сделали:
writeln('Покупка невозможна, так как ее стоимость (',K:2:2,') превышает ',A:2:2,' р.')
else
writeln('Покупка возможна, ее стоимость (',K:2:2,') не превышает ',A:2:2,' р.');
Двойка после первого двоеточия означает количество позиций, выделяемых для вывода значения численной переменной, включая знак, целую часть, десятичную точку и цифры после запятой. Двойка после второго двоеточия означает количество цифр после десятичной запятой. Лишние позиции будут заменены пробелами перед целой частью числа и нулями после дробной части.
Теперь, когда мы обсудили все основные моменты, приведем полный листинг программы:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var B, D:integer;
A,C,E,K: real;
f:boolean;
begin
repeat //входим в цикл repeat...until
f:=false;
write ('Введите сумму (A): ');
readln(A);
write ('Количество желаемых книг (B): ');
readln(B);
write ('Стоимость одной книги (C): ');
readln(C);
write ('Количество желаемых журналов (D): ');
readln(D);
write ('Стоимость одного журнала (E): ');
readln(E);
if ((A<1) or (B<1) or (C<0) or (D<1) or (E<0)) then // Проверяем правильность ввода
begin
f:=true; //Если что-то введено неправильно, присваиваем переменной f значение true
writeln ('Ошибка! Повторите ввод, пожалуйста');
end;
until not f; //Если ошибок нет, выходим из цикла
K := C * B + E * D; // считаем общую стоимость покупки
If A<K then //Проверяем возможность покупки и выводим соответствующее сообщение
writeln('Покупка невозможна, так как ее стоимость (',K:2:2,') превышает ',A:2:2,' р.')
else
writeln('Покупка возможна, ее стоимость (',K:2:2,') не превышает ',A:2:2,' р.');
readln; // Задерживает выполнение программы до нажатия кнопки Enter
end.
На рис. 1.1. показана экранная форма с результатами работы программы.
В заключении отметим, что хотя мы и попытались предусмотреть некоторые варианты некорректности ввода данных, все же остаются в нашей программе уязвимые места. Например, если пользователь при вводе десятичного числа вместо точки введет запятую, то возникнет ошибка.
Глава 2. Линейные программы
Задача
2.7. Написать программу, определяющую, на какую цифру заканчивается заданное натуральное число.
Решение.
Для начала составим алгоритм.
1. Ввести натуральное число N.
2. Вычислить остаток от деления числа N на 10, который и будет являться последней цифрой этого числа.
3. Вывести результат.
Итак, для того, чтобы определить последнюю цифру числа N, достаточно вычислить остаток от деления этого числа на 10. В Паскале для этого существует операция mod – получение остатка от целочисленного деления. Давайте рассмотрим примеры, представленные в таблице 1. 1. В первой колонке дано действие, во второй – результат.
12345 mod 10 | 5 |
1234 mod 10 | 4 |
123 mod 10 | 3 |
12 mod 10 | 2 |
1 mod 10 | 1 |
Разобравшись с методом решения задачи, перейдем к ее реализации на языке Паскаль. Нам понадобятся две переменные типа integer – N и M. В переменную M запишем конечный результат программы – последнюю цифру числа N, а затем выведем на экран.
Приведем полный код программы:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var N,M: integer;
begin
write ('Введите натуральное число: ');
readln(N); // Вводим натуральное число
M:=N mod 10; // вычисляем остаток от деления на 10
Write ('Число ',N,' оканчивается на цифру ',M); // выводим результат
readln;
end.
Экранная форма с результатами работы программы:
Глава 3. Ветвящиеся программы
Задача
3.7. Написать программу, проверяющую, поместится ли равносторонний треугольник площадью Р в круг площадью S, или круг поместится в треугольник, или они не поместятся друг в друга.
Решение.
Составим алгоритм решения задачи.
1. Ввести исходные данные: площадь круга (S) и треугольника (P).
2. Вычислить радиус круга.
3. Вычислить сторону треугольника (a).
4. Вычислить радиус описанной окружности около данного треугольника через его сторону.
5. Вычислить радиус вписанной окружности для данного треугольника через его сторону.
6. Сравнить радиус круга с результатами пунктов 4 и 5 и вывести соответствующее сообщение.
Итак, чтобы определить, поместится ли треугольник в круг, или круг поместится в треугольник, необходимо:
· Вычислить радиус круга.
· вычислить радиус описанной окружности, т.е. той, которая бы могла пройти через все три его точки (рис. 3.1).
· вычислить радиус вписанной окружности, т.е. той, которая бы могла касаться всех его сторон (рис. 3.2).
Очевидно, что для того чтобы треугольник вошел в круг, его радиус не должен быть меньше радиуса описанной окружности около треугольника; а для того чтобы круг вошел в треугольник, радиус круга не должен превышать радиус вписанной окружности в треугольник.
Перед тем как приступить к разбору кода программы, отметим, что всем переменным следует присвоить вещественный тип real.
1: program Project3;
2: {$APPTYPE CONSOLE}
3: uses
4: SysUtils;
5: var S, P, r, r1, r2, a:real;
6: begin
7: write ('S = ');
8: readln(S); //ввод площади круга
9: write ('P = ');
10: readln(P); //ввод площади треугольника
11: r:=sqrt(S/Pi); //радиус круга
12: a:=sqrt(4*P/sqrt(3)); //сторона треугольника a
13: r1:=a*sqrt(3)/3; //радиус описанной окружности около треугольника
14: r2:=a*sqrt(3)/6; //радиус вписанной окружности в треугольник
15:
if (r < r1) and (r > r2) then write ('Они не войдут друг в друга')
16:
else
if r1 < r then write ('Треугольник поместится в круге')
17:
else if r2 > r then write('Круг войдет в треугольник');
18: readln;
19: end.
Как видите, на сей раз мы пронумеровали строки – для удобства.
Радиус круга S (строка 11) вычисляется по формуле: . Перед тем, как вычислять радиус описанной окружности около треугольника, необходимо сначала найти его стороны. Так как нам дан равносторонний треугольник, наша задача существенно упрощается, потому что, как известно, у такого треугольника все стороны равны, и, следовательно, его площадь рассчитывается по следующей формуле: . Исходя из этой формулы, получаем, что (строка 12). Функция sqrt
(
x
) извлекает квадратный корень из числа x, причем необходимо помнить, что возвращаемый результат всегда вещественного типа.
Найдя сторону a, мы можем вычислить радиус описанной () и радиус вписанной () окружности для данного треугольника: (строка 13) и (строка 14). Далее нам остается только сравнить. В строке 15 говорится, что если и , то они не войдут друг в друга; если то треугольник войдет в круг (строка 16); а если , то круг поместится в треугольнике (строка 17). Давайте теперь посмотрим результаты работы программы (рис. 3.3.):
Глава 4. Циклические программы
Задача
4.7. Написать программу, позволяющую вычислить с помощью цикла: , где n задается с клавиатуры.
Решение.
Вначале, как обычно, составим алгоритм, по которому будет решаться наша задача.
1. Ввести число n.
2. Присвоить переменной s значение n.
3. Прибавить к переменной s выражение n – 1.
4. Повторить предыдущую операцию (пункт 3) m раз.
5. Прибавить к переменной s число 2, а затем 1.
6. Вывести результат.
В этой задаче нам необходимо вычислить выражение , в котором n – 1 суммируется с самим собой m раз. Заметим, что переменная m в данном случае является константой[2]. Теперь приступим к разбору кода программы.
1: program Project4;
2: {$APPTYPE CONSOLE}
3: uses
4: SysUtils;
5: const m = 10; // объявляем константу m и присваиваем ей значение 10
6: var n,i,s:integer;
7: begin
8: write('n = ');
9: readln(n);
10: s:=n; // стартовое значение
11: for i:=1 to m do
// i будет поочередно принимать значения от 1 до m
12: s:=s+(n-1); //(n - 1) прибавляется к общей сумме
13: s:=s+2+1;
14: write (' Результат выражения: ', s); //вывод результата
15: readln;
16: end.