Федеральное Агентство по образованию
Волгоградского Государственного Технического Университета
Волжский Политехнический институт
Кафедра ВИТ
Семестровая работа
по программированию
Выполнил: студентка
группы №107
Соколова О.А.
Проверил:
старший преподаватель:
Фадеева Марина Викторовна
Волжский, 2006 г.
Вариант №9.
Присвоить целой переменной d первую цифру из дробной части заданного положительного вещественного числа х. Например: х = 39.497, тогда d = 4.
Блок-схема:
Текст программы:
program odinodin;
uses crt;
var x,z: real;
y,d: integer;
begin
clrscr;
writeln('vvedite polozhitelnoe veshestvennoe chislo');
readln(x); {Задаем число}
z:=x*10; {Заданному числу присваиваем его значение, умноженное на 10}
y:=trunc(z); {Округляем число до целой части}
d:=y mod 10; {Делим число на 10 и берем остаток от деления}
writeln('pervaya cifra iz drobnoi chasti zadannogo polozhitelnogo chisla=',d);
readkey;
end.
Результаты программы:
x |
d |
23.123 |
1 |
3.567 |
5 |
2.456 |
4 |
12.657 |
6 |
3.78 |
7 |
345.67 |
6 |
34.86 |
8 |
8.09 |
0 |
56.23 |
2 |
68.987 |
9 |
Составить логическое выражение, принимающее значение ИСТИНА, если ладья, расположенная на поле (x1, y1) шахматной доски, бьёт поле (x2, y2) за один ход. Напечатать значение этого выражения для заданных x1, y1, x2, y2.
Блок-схема:
Текст программы:
Program odindva;
uses crt;
var x1,y1,x2,y2: integer;
begin
clrscr;
writeln('vvedite koordinati ladii: x1');
readln(x1); {Вводим координаты поля 1}
writeln('y1');
readln(y1);
writeln('vvedite koordinati polya: x2');
readln(x2); {Вводим координаты поля 2}
writeln('y2');
readln(y2);
if
((x1=x2) and ((y2
((y1=y2)
and
((x2
writeln('byot pole s 1 hoda') else writeln('ne byot pole s 1 hoda'); сведения на экран}
readkey;
end.
Результаты программы:
Координаты поля 1 |
Координаты поля 2 |
Результат |
2 3 |
3 5 |
ne byot pole s 1 hoda |
2 7 |
2 8 |
byot pole s 1 hoda |
6 1 |
4 1 |
byot pole s 1 hoda |
3 8 |
3 6 |
byot pole s 1 hoda |
2 8 |
3 5 |
ne byot pole s 1 hoda |
1 1 |
1 7 |
byot pole s 1 hoda |
3 7 |
3 8 |
byot pole s 1 hoda |
5 8 |
2 8 |
byot pole s 1 hoda |
7 3 |
4 5 |
ne byot pole s 1 hoda |
2 6 |
2 7 |
byot pole s 1 hoda |
Задано целое число n: 20 n 99. Напечатать его в словесной форме, например: 31 - тридцать один.
Блок-схема:
Текст программы:
Program odintri;
uses crt;
var n,m,k: integer;
begin
clrscr;
writeln('vvedite chislo n ot 20 do 99');
readln(n);
m:=n div 10; {Разбиваем двузначное число на два и задаем условия записи}
k:=n mod 10;
if m=2 then writeln('dvadcat');
if m=3 then writeln('tridcat');
if m=4 then writeln('sorok');
if m=5 then writeln('pyatdesyat');
if m=6 then writeln('shesdesyat');
if m=7 then writeln('semdesyat');
if m=8 then writeln('vosemdesyat');
if m=9 then writeln('devyanosto');
if k=1 then writeln('odin');
if k=2 then writeln('dva');
if k=3 then writeln('tri');
if k=4 then writeln('chetire');
if k=5 then writeln('pyat');
if k=6 then writeln('shest');
if k=7 then writeln('sem');
if k=8 then writeln('vosem');
if k=9 then writeln('devyat');
readkey;
end.
Результаты программы:
Вводимые данные |
Выводимые данные |
20 |
dvadcat |
31 |
tridcat odin |
42 |
sorok dva |
53 |
pyatdesyat tri |
64 |
shesdesyat chetire |
75 |
semdesyat pyat |
86 |
vosemdesyat shest |
97 |
devyanosto sem |
78 |
semdesyat vosem |
49 |
sorok devyat |
Вычислить приближенное значение интеграла по формуле прямоугольников для заданного целого n > 39.
Блок-схема:
Текст программы:
Program dvaodin;
uses crt;
const n=40;
var a,b,f,h,x,p,s: real;
i: integer;
begin
clrscr;
a:=0.1; {Задаем пределы интегрирования}
b:=0.5;
h:=(b-a)/n; {Задаем значения по формуле}
s:=0;
for i:=1 to n do
begin
p:=(1-sqr(a+i*h))/(a+i*h+sqr(a+i*h)*( a+i*h)); {Задаем значения по формуле}
s:=s+p;
end;
f:=h*s;
writeln(f);
readkey;
end.
Результаты программы:
1.3540421380Е+00
Дана квадратная матрица A(N,N). Выполнить перестановку строк и столбцов исходной матрицы таким образом, чтобы элементы первой главной диагонали упорядочились по возрастанию.
Блок-схема:
fuction proVd:
procedure zamen:
procedure printF:
procedure recur:
randomize:
Текст программы:
Program dvadva;
uses crt;
const n=3;
type massiv = array[1..n,1..n] of integer;
var mas:massiv;
i,j:integer;
function proVd(tmp:massiv):boolean; {функция проверяет главную диагональ на правильность к условию }
var toll:boolean;
i:integer;
begin
toll:=true;
for i:=1 to n - 1 do if tmp[i,i]>tmp[i+1,i+1] then toll:=false;
proVd:=toll;
end;
procedure zamen(var tmp:massiv;x,y:integer;toll:boolean); {процедура упорядочивает элементы главной диагонали по возрастанию}
var t,i:integer;
begin
for i:=1 to n do
if toll then
begin
t:=tmp[i,x];
tmp[i,x]:=tmp[i,y];
tmp[i,y]:=t;
end else
begin
t:=tmp[x,i];
tmp[x,i]:=tmp[y,i];
tmp[y,i]:=t;
end;
end;
procedure printF(tmp:massiv); {процедура выводит матрицу на экран}
var i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to n do write(tmp[i,j]:4);writeln;end;
end;
procedure recur(step:integer); { главная рекурсивная процедура, которая перебирает все возможны перестановки столбцов и строк, и если диагональ стала правильной выводит полученный массив и выходит}
var i,j:integer;
k:integer;
begin
if step>n then exit;
if proVd(mas) then
begin
printF(mas);
readkey;
halt;
end;
for i:=step to n-1 do
for j:=i+1 to n do
for k:= 0 to 1 do
begin
if k = 0 then
begin
zamen(mas,i,j,true);
recur(step+1);
zamen(mas,i,j,true);
end else
begin
zamen(mas,i,j,false);
recur(step+1);
zamen(mas,i,j,false);
end;
end;
end;
begin
clrscr;
randomize; {формируем матрицу случайным образом}
for i:=1 to n do
for j:=1 to n do mas[i,j]:=random(10);
printF(mas);
writeln('---');
recur(1);
readkey;
end.
Результаты программы:
Первоначальные данные |
Итоговые данные |
2 4 8 3 1 3 2 7 9 |
1 3 3 4 2 8 7 2 9 |
Напечатать слова заданной непустой строки в порядке увеличения их длины. Считать, что слова разделены одним или несколькими пробелами или запятой.
Блок-схема:
Текст программы:
Program dvatri;
uses crt;
var m,k,n,i,j:integer;
s,p:string;
a:array[1..100]of string;
begin
clrscr;
readln(s);
i:=1;
for j:=1 to length(s) do begin {Считаем кол-во букв в каждом слове}
if s[j]<>' ' then a[i]:=a[i]+s[j];
if ((s[j]=' ') and (s[j+1]<>' '))then i:=i+1;
end;
for j:=1 to i do begin
for n:=1 to i-1 do begin
m:=length(a[n]); {Присваиваем в цикле длину каждого слова новой переменной}
k:=length(a[n+1]);
if m>k then {Сравниваем длину слов и расставляем в порядке увеличения}
begin
p:=a[n];
a[n]:=a[n+1];
a[n+1]:=p;
writeln(a[j]);
end;
end;
end;
readkey;
end.
Результаты программы:
Вводимые данные |
Выводимые данные |
123 1234 1234567 12345 |
123 1234 12345 1234567 |
Wert werty wer wertyu we |
We wer wert werty wertyu |
Qazxsw edc rfvb gtyhn |
Edc rfvb gtyhn qazxsw |
Odin dva chetitre |
Dva odin chetire |
123456789 12345678 1234567 123456 12345 1234 123 12 1 |
1 123 1234 12345 123456 1234567 12345678 123456789 |
Tyugh okm rfgh |
Okm rfgh tyugh |
Abc ab abcd |
Ab abc abcd |
Za z zaz |
Z za zaz |
Ret tero er |
Er ret tero |
Koluni step lex |
Lex step koluni |
3.1 Используя множественный тип, описать функцию f(n), подсчитывающую количество гласных букв латинского алфавита в заданной непустой строке (прописные и строчные буквы не различать), и процедуру, печатающую эту строку без гласных букв и выводящую только первые вхождения каждого символа. Составить программу, использующую описанные процедуру и функцию. Пример: My name is Ann, функция f(x) возвращает 4, а процедура печатает буквы: MNS.
Блок-схема:
functin posch:
procedure print:
Текст программы:
program triodin;
uses crt;
var
str:string;
z:integer;
function posch(b:string):integer; {Функция считает кол-во гласных}
var
stroka:set of char;
i,k,j:integer;
glas:string;
begin
k:=0; {Обнуляем счетчик}
stroka:=[]; {Обнуляем строку}
glas:='EeYyUuIiOoAa'; {Задаем множество гласных}
for j:=1 to length(str) do
begin
if (glas[j] in stroka) or (glas[j+1] in stroka) then k:=k+1; {Проверяем букву на вхождение в множество гласных и, если она входит, увеличиваем счетчик}
end;
posch:=k;
end;
procedure print(str:string); {Процедура удаляет все гласные из строки и выводит каждое первое вхождение согласных}
var i: integer;
a: set of char;
b: char;
begin
a:=['E','e','Y','y','U','u','I','i','O','o','A','a']; {Задаем множество гласных букв}
b:=[ ]; {Задаем пустое множество}
for i:=1 to length(str) do
begin
if str[i] in a then delete(str,i,1); {Если буква входит в множество гласных, стираем ее}
if str[i] in b then break else b:=b+str[i]); {Если не входит, тогда записываем ее в множество b, если она там уже есть, то возвращаемся к началу цикла}
end;
writeln(b); {Выводим буквы на печать}
end;
begin
clrscr;
writeln('Vvedite stroky');
readln(str);
z:=posch(str);
writeln('Kolichestvo glasnih= ',z);
print(str,b);
readkey;
end.
Результаты программы:
Вводимые данные |
Выводимые данные |
My name is ann |
4 mns |
He is the man |
3 hsmnr |
Why are you |
8 whrt |
How do you do it |
7 hwdt |
You must |
4 mst |
Lets go |
2 ltsg |
Dont care |
3 dntcr |
Just wait |
3 jstw |
May be |
3 mb |
He will come |
4 hwlcm |
3.2. Описать рекурсивную функцию для вычисления биномиального коэффициента Составить программу, вычисляющую значение для m=0,1,...,n и n=1,2,...,k, где k1 - заданное целое число.
Блок-схема:
function Binom
Текст программы:
Program tridva;
uses crt;
var
n,m,k:integer;
sum : extended;
function Binom(bn:extended;n,k,kol:integer):extended;
{bn - промежуточное значение бинома;
n - нижний коэффициент бинома;
k - верхний коэффициент бинома;
kol - число использующая для вычисления факториала}
begin
if kol<=n then
begin
if kol>k then bn:=bn*kol;
if (n - k)>= kol then bn:=bn/kol;
Binom := Binom(bn,n,k,kol+1);
end else
Binom := bn;
end;
begin
clrscr;
sum:=0;
write('k = ');
read(k);
{writeln(binom(1,20,6,1):8:0);}
for n:=1 to k do
for m:=0 to n do sum:=sum + binom(1,n,m,1);
writeln('Summa = ',sum:8:0);
readkey;
end.
Результаты программы:
Водимые данные |
Выводимые данные |
1 |
2 |
2 |
6 |
3 |
14 |
4 |
30 |
5 |
62 |
6 |
126 |
7 |
254 |
8 |
510 |
9 |
1022 |
10 |
2046 |
4. Описать комбинированный тип для представления экзаменационной ведомости. Составить программу, которая обеспечивает ввод информации для заданного числа студентов и распечатку введенных данных в виде таблицы. Вычислить средний балл в каждой учебной группе и напечатать по каждой группе список студентов, имеющих средний балл выше среднего балла группы.
Блок-схема:
Текст программы:
Program cheture;
uses crt;
type
z=record
name: string[25];
lastn: string[25];
group: integer;
sb: real;
end;
const
n=10;
var
i,k6,k7,k10:integer;
s: array[1..n] of z;
sb6,sb7,sb10,s6,s7,s10: real;
sbg7,sbg6,sbg10: real;
begin
clrscr;
for i:=1 to n do
begin {Водим данные о студентах: имя, фамилию, номер группы и средний балл}
writeln('vvedite imya');
readln(s[i].name);
writeln('vvedite familiyu');
readln(s[i].lastn);
writeln('vvedite nomer gruppi: 106, 107 ili 110');
readln(s[i].group);
writeln('vvedite sredniy bal studenta');
readln(s[i].sb);
end;
for i:=1 to n do
begin
writeln(s[i].name,' ' ,s[i].lastn,' ',s[i].group,' ',s[i].sb);
{Выводим данные на экран}
end;
sb6:=0; sb7:=0; sb10:=0; k6:=0; k7:=0; k10:=0; sbg6:=0; sbg7:=0; sbg10:=0; {Обнуляем все счетчики}
for i:=1 to n do
begin {Считаем кол-во студентов в каждой группе}
if s[i].group=106 then
begin
k6:=k6+1;
sbg6:=sbg6+s[i].sb;
end;
if s[i].group=107 then
begin
k7:=k7+1;
sbg7:=sbg7+s[i].sb;
end;
if s[i].group=110 then
begin
k10:=k10+1;
sbg10:=sbg10+s[i].sb;
end;
end;
s6:=sbg6/k6; {Считаем средний балл каждой группы}
s7:=sbg7/k7;
s10:=sbg10/k10;
{Сравниваем средний балл группы со средним баллом студентов этой группы, если средний балл студента выше, то выводим сведения о студенте на экран}
For i:=1 to n do
begin
if s[i].group=106 then
begin
if s[i].sb>s6 then writeln(s[i].name,' ' ,s[i].lastn,' ',s[i].group,' ',s[i].sb);
end;
if s[i].group=107 then
begin
if s[i].sb>s7 then writeln(s[i].name,' ' ,s[i].lastn,' ',s[i].group,' ',s[i].sb);
end;
if s[i].group=110 then
begin
if s[i].sb>s10 then writeln(s[i].name,' ' ,s[i].lastn,' ',s[i].group,' ',s[i].sb);
end;
end;
readkey;
end.
Результаты программы:
Вводимые данные |
Выводимые данные |
Daniel Carvalho 107 5 Egor Titov 110 2 Vadim Evseev 110 3, 2 Petr Bystrov 110 2,4 Alexandr Kolinko 106 3, 4 Sergei Semak 107 4,8 Dmitriy Kirichenko 107 4,4 Andrey Arshavin 106 4,1 Alexandr Kerzhakov 106 3,3 Pavel Mamaev 106 3,7 |
Daniel Carvalho 107 5 Andrey Arshavin 106 4,1 Pavel Mamaev 106 3,7 Vadim Evseev 110 3, 2
|