Курсовая работа по программированию icon

Курсовая работа по программированию




Скачать 109.81 Kb.
НазваниеКурсовая работа по программированию
Дата конвертации04.03.2013
Размер109.81 Kb.
ТипКурсовая


Гимназия №1


Курсовая работа

по программированию


Подготовила:

ученица 11 «Е» класса

гимназии №1

Дурнова Ирина


Г. Саратов, 2005 год.

Задача №1


Условие.


Три мушкетера получили сведения, что 12 украденных алмазных подвесок хранятся в десяти различных замках Англии, причем, в каждом замке их по 12 штук (часть из них подлинные, а недостающие заменены фальшивыми). Известно, что у подлинных подвесок по 13 алмазов, у поддельных же различное количество камней, отличное от 13. Мушкетеры имеют план, в котором записаны сведения о количестве камней в каждой подвеске, хранящейся в каждом замке. По этому плану они определили, какие замки можно пропустить при сборе настоящих подвесок. Напишите программу, которая печатает план наличия подвесок в каждом замке (план заполнен случайным образом, количество камней в подвесках колеблется от 10 до 15, настоящих подвесок только 12); напечатайте номера замков, в которые мушкетеры не будут заезжать; напечатайте количество замков, в которых хранятся настоящие подвески.


Решение.


Условие данной задачи наталкивает на мысль, что для ее решения необходимо использовать двумерный массив, строки в котором будут представлять замки (их будет 10), а столбцы – ячейки для хранения подвесок (их будет 12).

Одним из главных пунктов условия является также существование ровно 12 настоящих подвесок. Поэтому в первую очередь в пустой массив [a] мы должны добавить в случайные ячейки 12 подвесок из 13 камней. Для этого будем генерировать номер случайного замка [z] и номер ячейки [n] до тех пор, пока их не будет ровно 12. Для остальных ячеек мы сгенерируем числа [g] от 10 до 15, отличные от 13. План готов. Напечатаем его, используя два вложенных цикла со счетчиком.

Для того чтобы ответить на два других вопроса (номера замков, в которые не надо заезжать, и количество замков с настоящими подвесками), заведем одномерный массив [b], в который, еще при генерации настоящих подвесок, запишем их количество. Тогда пробежавшись по каждой ячейке массива, мы будем знать, в какие замки нам заезжать не надо (там будет нулевое значение) и сможем посчитать количество нужных замков [s].


Код программы.


var

a: array [1..10,1..12] of integer;

b: array [1..10] of integer;

i,j,k,z,n,g,s: integer;


begin

randomize;

fillchar(a,sizeof(a),0);

fillchar(b,sizeof(b),0);


k:=0;

while (k<=12) do

begin

z:=random(11);

n:=random(13);

if (a[z,n]=0) then

begin

inc(k);

a[z,n]:=13;

inc(b[z]);

end;

end;


for i:=1 to 10 do

begin

for j:=1 to 12 do

begin

if (a[i,j]=0) then

begin

g:=13;

while (g=13) do g:=random(6)+10;

a[i,j]:=g;

end;

end;

end;


for i:=1 to 10 do

begin

writeln(i, ' замок: ');

for j:=1 to 12 do

begin

write(a[i,j],' ');

end;

writeln;

end;


s:=0;

writeln('Замки, в которые мушкетеры не будут заезжать: ');

for i:=1 to 10 do

begin

if (b[i]=0) then write(i,' ') else inc(s);

end;

writeln;

writeln(s, ' замков мушкетеры посетят');

end.


Задача №2


Условие.


Задана символьная строка. Создайте новую строку, в которой слова с номерами N и S будут выделены специальным символом (который тоже вводится с клавиатуры). Если в строке нет символов с указанными номерами, выдайте об этом сообщение на экран. Выведите на экран исходную и полученную строки.


Решение.


Для решения задачи необходимо ввести символьную строку [str], номера слов [n и s] и специальный символ [sp] в виде строки из одного символа.

Далее определим длину данной строки [l] и заведем переменную [k], в которой будем хранить количество слов в строке. В двумерном массиве [a] для каждого слова будем хранить его начало и конец, которые определим при помощи цикла со счетчиком. Начало слова будет характеризоваться переходом «начало строки – буква» или «пробел - буква», а конец – «буква – конец строки» или «буква - пробел».

Скопируем данную строку в переменную строкового типа [ans].

И, последним этапом, определим, есть ли слова с номерами N и S в строке, если нет, то выдадим об этом сообщение. В противном случае в начало и конец слова N вставим специальный символ. Для слова с номером S придется дополнительно определить, было ли уже выделено предыдущее слово и стоит оно в строке раньше или позже данного слова, и в зависимости от этого сдвинуть или не сдвинуть начало и конец слова.

Выведем на экран исходную [str] и полученную [ans] строки.


^ Код программы.


var

str,ans,sp: string;

s,n,k,i,j,l: longint;

a: array[1..255,1..2] of integer;


begin

write('Введите строку: ');

readln(str);

write('Введите номера слов (N, S): ');

readln(n,s);

write('Введите специальный символ: ');

readln(sp);


l:=length(str);

ans:=str;

k:=1;


for i:=1 to l do

begin

if (str[i]<>' ') then

begin

a[1,1]:=i;

break;

end;

end;


j:=i;


for i:=j+1 to l do

begin

if (ans[i]=' ') then

if(((ans[i-1]>='A')and(ans[i-1]<='z'))or((ans[i-1]>='А')and(ans[i-1]<='п'))or((ans[i-1]>='р')and(ans[i-1]<='я'))) then

begin

a[k,2]:=i-1;

end;

if (ans[i-1]=' ') then

if ( ((ans[i]>='A') and (ans[i]<='z')) or ((ans[i]>='А') and (ans[i]<='п')) or ((ans[i]>='р') and (ans[i]<='я'))) then

begin

inc(k);

a[k,1]:=i;

end;

end;


for i:=l downto 1 do

begin

if (str[i]<>' ') then

begin

a[k,2]:=i;

break;

end;

end;


if (n>k) then writeln('Слова с номером ', n ,' нет в строке!') else

begin

insert(sp,ans,a[n,1]);

insert(sp,ans,a[n,2]+2);

end;

if (s>k) then writeln(' Слова с номером ', s ,' нет в строке!') else

begin

if (l=length(ans)) then

begin

insert(sp,ans,a[s,1]);

insert(sp,ans,a[s,2]+2);

end;

if (l
begin

insert(sp,ans,a[s,1]+2);

insert(sp,ans,a[s,2]+4);

end;

if (ls) and (n<=k) then

begin

insert(sp,ans,a[s,1]);

insert(sp,ans,a[s,2]+2);

end;

end;


writeln('Исходная строка : ',str);

writeln('Полученная строка : ',ans);

end.


Задача №3


Условие.


  1. Создать файл, содержащий сведения о наличии справочной литературы в школьной библиотеке. Каждый файл содержит: наименование справочника, год издания, предмет для которого может быть использован. Количество записей произвольное.

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



Решение.


Создадим файл “lib.txt”, где в каждой строке будет храниться информация об одной книге в виде:

Название|Год|Предмет

с обязательными разделителями “|”. Для этого откроем файл [f, “lib.txt”] для записи и вызовем процедуру make.


В процедуре make выполним следующие действия:

- введем количество записей [k], которые следует записать в библиотеку;

- для каждой записи будем вводить название [name], год издания [year] и предмет [lesson];

- после каждой введенной записи в файл [f] запишем полученную информацию, используя разделители.


Для решения второй части задачи введем с клавиатуры год издания [syear] и предмет [slesson], по которому учащийся готовит доклад, и откроем файл библиотеки.

Потом при помощи цикла while/do, будем считывать по строке до конца файла и вызывать процедуру str.


В процедуре str со строкой выполним следующие действия:

- найдем разделители [r1] и [r2];

- в строковые переменные [name], [year], [lesson] скопируем соответственно из данной строки: название (с первого символа до первого разделителя), год (с первого до второго разделителя) и название предмета (со второго разделителя до конца строки);

- сравним введенные год и предмет с полученными из строки, если условия совпадают, то выведем на экран.


^ Код программы.


var

f: text;

s, name, year, lesson, syear, slesson: string;

i,j,r1,r2: longint;


procedure str;

begin

r1:=0; r2:=0;

for i:=1 to length(s) do

begin

if (s[i]='|') and (r1=0) then

begin

r1:=i;

continue;

end;

if (s[i]='|') and (r1<>0) then

begin

r2:=i;

break;

end;

end;

name:=copy(s,1,r1-1);

year:=copy(s,r1+1,r2-r1-1);

lesson:=copy(s,r2+1,length(s)-r2);

if (year>=syear) and (lesson=slesson) then writeln(name);

end;


procedure make;

var

i,k: integer;

begin

write('Количество записей: '); readln(k);

for i:=1 to k do

begin

write('Название справочника: '); readln(name);

write('Год издания: '); readln(year);

write('Предмет: '); readln(lesson);

writeln(f, name,'|',year,'|',lesson);

end;

end;


begin

writeln('### Создание подключаемой библиотеки ###');

assign(f,'lib.txt'); rewrite(f);

make;

close(f);

writeln;


writeln('### Поиск нужной литературы ###');

write('Год издания справочника: '); readln(syear);

write('Предмет: '); readln(slesson);

writeln;


writeln('### Результаты поиска ###');

assign(input,'lib.txt'); reset(input);


while not seekeof do

begin

readln(s);

str;

end;


close(input);

end.


^ Пример библиотеки.


Большая Советская Энциклопедия|1989|География

Большая Советская Энциклопедия|1989|Биология

История СССР|1999|История

Древние цивилицазии|2004|История

Великие люди|1998|История

Толковый словарь|1990|Литература

Словарь пушкинских слов|1968|Литература

Писатели 20 века|2003|Литература

Литература 15-19 вв.|1979|Литература

Поэзия|1989|Литература

Проза|1995|Литература

Орфографический словарь|1980|Русский язык

Словарь иностранных слов|1998|Русский язык

Орфографический справочник|2001|Русский язык

Растения|1997|Биология

Животные|1997|Биология

Бактерии|1997|Биология

Грибы|1997|Биология

Новейшая биологическая энциклопедия|2005|Биология

Анатомия|1990|Биология


Задача №4


Условие.


Принять экран за декартову систему координат с центром в середине экрана. Направление осей – стандартное. В этой системе заданы три точки своими координатами (ХА, УА), (ХВ, УВ), (ХС, УС). Полагая, что это вершины треугольника:

- нарисуйте на экране оси координат, заданный треугольник и медианы проведенные из вершин А и В;

- определите и напечатайте координаты точки D, пересечения этих медиан, и площадь треугольника ADB;

- выделите область искомого треугольника.


Решение.


По условию задачи, введем координаты трех точек, вершин треугольника [XA, YA, XB, YB, XC, YC], и изменим их числовое значение в соответствии с декартовой системой координат. Для этого к х-овым координатам прибавим 320 пикселей и из 240 вычтем у-овые координаты.

Далее по формулам (x=(x1+x2)/2 и y=(y1+y2)/2) найдем середины отрезков ВС и АС [max, may, mbx, mby] и по формулам (x=(x1+x2+x3)/3 и y=(y1+y2+y3)/3) найдем точку пересечения медиан треугольника АВС [dx, dy].

Перейдем к графическому режиму: нарисуем белым цветом две прямые (оси координат) и еще четыре – стрелочки; а красном цветом проведем линии АВ, ВС, АС и медианы из вершин А и В. Для того, чтобы закрасить область треугольника ADB, найдем точку пересечения его медиан и применим заливку к данной точке. Исходя из того, что точка пересечения медиан всегда находится внутри треугольника, то нужная область будет закрашена, верно.

Для того чтобы вычислить площадь треугольника ADB по формуле Герона, найдем длины сторон AB, AD, BD, используя теорему Пифагора [ab, ad, bd] и полупериметр [p] по формуле (p=(AB+AD+BD)/2). Вычислим искомого площадь [s].

И, наконец, выведем на экран координаты точки D и площадь треугольника ADB.


^ Код программы.


{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}

{$M 16384,0,655360}


program risunok;

uses Graph;


var

gd, gm: integer;

xa,xb,xc,ya,yb,yc,d1,d2: integer;

x,y,max,mbx,may,mby,dx,dy: integer;

p,s,ab,ad,bd : extended;


begin

gd:=detect;

gm:=1;

InitGraph(gd, gm, 'с:\bp\bgi');


d1:=320; d2:=240;


writeln('Введите координаты вершин треугольника: ');

readln(xa,ya);

readln(xb,yb);

readln(xc,yc);

xa:=xa+d1; xb:=xb+d1; xc:=xc+d1;

ya:=d2-ya; yb:=d2-yb; yc:=d2-yc;


cleardevice;


mAx:=(xb+xc) div 2;

mAy:=(yb+yc) div 2;

mBx:=(xa+xc) div 2;

mBy:=(ya+yc) div 2;

dx:= (xa+xb+xc) div 3;

dy:= (ya+yb+yc) div 3;


setColor(15);

line(0,240,640,240);

line(320,0,320,480);

line(630,230,640,240);

line(640,240,630,250);

line(320,0,310,10);

line(320,0,330,10);


SetColor(4);

setlinestyle(0,0,2);

line(xa,ya,xb,yb);

line(xb,yb,xc,yc);

line(xa,ya,xc,yc);

line(xa,ya,max,may);

line(xb,yb,mbx,mby);


setfillstyle(1,6);

x:=(xa+xb+dx) div 3;

y:=(ya+yb+dy) div 3;

floodfill(x,y,4);


ab:=sqrt(sqr(xa-xb)+sqr(ya-yb));

ad:=sqrt(sqr(xa-dx)+sqr(ya-dy));

bd:=sqrt(sqr(xb-dx)+sqr(yb-dy));

p:=(ab+ad+bd)/2;

s:=sqrt(p*(p-ab)*(p-ad)*(p-bd));

writeln('Координаты точки D: (',dx-d1,';',d2-dy,')');

writeln('Площадь треугольника ADB: ',s:0:2);


readln;

closeGraph;

end.


Пример.




/

Добавить документ в свой блог или на сайт


Похожие:

Курсовая работа по программированию iconКурсовая работа Курсовая- настоящее студенческое

Курсовая работа по программированию iconКурсовая работа от 20 до 30 листов, последний день сдачи 19. 12. 2011года Интеллектуальная собственность в современном обществе
Авторское и патентное право. Одинаковые темы не брать, звонить уточнять по телефону 8-937-33-833-29, курсовая работа от 20 до 30...

Курсовая работа по программированию iconКурсовая работа

Курсовая работа по программированию iconКурсовая работа по дисциплине

Курсовая работа по программированию iconДокументы
1. /курсовая работа.doc

Курсовая работа по программированию iconКурсовая работа по «Экономике организации»
Пути улучшения эффективности использования трудовых ресурсов ОАО «Сбербанк России»

Курсовая работа по программированию iconКурсовая работа «Программное решение задачи о 8 ферзях»
Московский государственный институт радиотехники, электроники и автоматики (технический университет)

Курсовая работа по программированию iconКурсовая работа по дисциплине «Конструкция самолетов» «Проект грузового самолета»
Мати российский государственный технологический университет им. К. Э. Циолковского

Курсовая работа по программированию iconКурсовая работа «Реализация консольного приложения матричный калькулятор»
Московский государственный институт радиотехники, электроники и автоматики (технический университет)

Курсовая работа по программированию iconМоя курсовая работа касается такой проблемы как миграция рабочей силы. Это явление было известно еще в Х веке

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©libdocs.ru 2000-2013
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы