TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

Типовые программы работы с целыми числами и массивами

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

Program Rablnt; {Работа с целыми числами}
Uses Crt;
Type aa = Array[1..100] Of Integer; {Описаны одномерные и двумерные массивы}
bb = Array[1..100, 1..2]Of Integer;
Label 10,20,30,40,50,60,70,80,90;
Var p: aa;
pp: bb;
t,n,k,a,b : Longlnt;
s,i,j : Byte;

Procedure ProsDel(Var t,n: Longlnt); {Является ли число t простым?)
Var i : Byte;
Begin n:=0;
For i:=2 to t Div 2 Do If t Mod i=0 Then n:=n+1;
If n=0 Then WriteLn(t:10,'Простое число');
End;

Begin
ClrScr; Randomize;
WriteLn('Варианты работы:');
WriteLn('1-Ввод числа и поиск его перевертыша');
WriteLn('2-Нахождение цифр числа и работы с ними ');
WriteLn('3-Поиск характеристик чисел в интервале');
Write('Выберите номер варианта '); ReadLn(s);
If s=3 Then Goto 30;
If s=1 Then Goto 10 Else Goto 20;

10:
WriteLn('Число вводится (1) или определяется как случайное (2)?');
ReadLn(s);
If s =2 Then
Begin
Write('Целочисленная база');
ReadLn(t);
n:=Random(t);
End
Else
Begin
Write('Введите число');
ReadLn(n);
End;
a:=n; WriteLn; WriteLn('Введенное число',n); b:=0; WriteLn;
While a<>0 Do
Begin
WriteLn( a Mod 10 ); b:=b*10+a Mod 10; a:=a Div 10;
End;
ReadLn; WriteLn; WriteLn('Перевертыш',b); ReadLn; Goto60;

20:
Write('Введите целое число ');ReadLn(t); n:=0;
While t<>0 Do Begin
n:=n+1;P[n]:=t Mod 10; t:=t Div 10;
WriteLn(n:5,P[n]:5);
End; WriteLn; WriteLn('Количество цифр в числе ',n); ReadLn;
WriteLn('Дальнейшая работа с цифрами :');
WriteLn('1-Выстроить их по убыванию');
WriteLn('2-Найти одинаковые цифры');
WriteLn('3-Построить из цифр наибольшее число');
ReadLn(s);
If (s=1) Or (s=3) Then Goto 70 Else Goto 80;

70:
For i:=1 to n-1 Do For j:=i+1 To n Do
Begin
If P[i]<=P[j] Then
Begin
a:=P[i]; P[i]:=P[j]; P[j]:=a;
End;
End;
WriteLn('Отсортированные данные');a:=0;
For i:=1 to n Do
Begin
a:=a*10+P[i]; WriteLn('N цифры',i,'',P[i]);
End;
WriteLn;
If s=3 Then WriteLn('Наибольшее число',a); ReadLn;
Goto 60;

80:
k:=0;
WriteLn('Поиск одинаковых цифр');
For i:=1 to n-1 Do For j:=i+1 to n Do If P[i]=P[j] Then
Begin
WriteLn('Цифра',P[i]',на',i',u',j',местах');
k:=k+1;
End;
If k=0 Then WriteLn('Во введенном числе нет одинаковых цифр');
ReadLn; Goto 60;

30:
Write('Введите через пробел границы интервала'); ReadLn(a,b);
k:=0;
WriteLn('Вариант работы:');
WriteLn('1-Собрать в массив Р все простые числа');
WriteLn('2-Записать в массиве РР числа и количество их делителей');
ReadLn(s);
If s=1 Then Goto 40 Else Goto 50;

40:
For t:=a to b Do
Begin
ProsDel(t,n);
If n=0 Then
Begin
k:=k+1; P[k]:=t;
End;
End;
WriteLn; WriteLn('В интервале',a:5,'-',b:5,",k:5,'простых чисел');
ReadLn; Goto 60;

50;
For t:=a to b Do
Begin
ProsDel(t,n);
If n<>0 Then
Begin
k:=k+1; PP[k,1]:=t; PP[k,2]:=n;
WriteLn('Число',t:10,'Количество делителей',n:5);
End;
End; ReadLn;
WriteLn('Дальнейшая работа с полученными данными :');
WriteLn('Выдать числа с количеством делителей равных k');
WriteLn('k='); ReadLn(t); n:=0;
For i:=1 to k Do
Begin
If PP[i,2]=t Then
Begin
n:=n+1;
WriteLn('Число',PP[i,1]:20,'количество делителей',PP[i,2]);
End;
End;
If n=0 Then WriteLn('Чисел с количеством делителей ',t:5,'нет');
ReadLn;

60:
End.

Вторая программа отображает последовательность и особенности работы с так называемыми ''Пифагоровыми тройками'', то есть целыми числами a, b, c, связанными условиями a2 + b2 = c2.

Program Pifagor; {Работа с Пифагоровыми тройками и сопутствующие задачи}
Uses Crt;
Type aa = Array[1..100,1..3]Of Integer;
Var a,b,c,i,j,n,m : Integer;
v1,v2,v3 : Real;
P : aa;

Begin
ClrScr;
{Простое определение и выдача на печать Пифагоровых троек}
n:=0;
Write('Определите границы '); ReadLn(a,b);
If a>=b Then
Begin
Write('Границы интервала указаны не верно.Повторите ввод');
ReadLn;
End
Else
Begin
For i:=2 to b Div 2 Do
For j:=i+1 to b Do
Begin
v1:=Sgrt(i*i+j*j);
If v1=Int(v1) Then
Begin
Inc(n);
WriteLn('n=',n:10,'i=',i:10,'j='j:10,'',Round(v1):10);
P[n,1]:=i; P[n,3]:=Round(v1);
End;
End; WriteLn;
WriteLn('В интервале',a:10,'-',b:10,'выявлено',n:10,'троек');
WriteLn;
End;
ReadLn;

{Окончание 1-й части программы}
{Выявление некратных Пифагоровых троек}

For i:=1 to n-1 Do For j:=i+1 to n Do If(P[j,1] Mod P[i,1]=0) And(P[j,2] Mod P[i,2]=0) And (P[j,1] Div P[i,1]=P[j,2] Div P[i,2]) Then P[j,1]:=-1;
m:=0; WriteLn;
WriteLn('Некратные Пифагоровы тройки'); WriteLn;
For i:=1 to n Do If P[i,1]<>-1 Then
Begin
m:=m+1;
WriteLn('Некратная тройка N',m:5,P[i,1]:5,P[i,2]:5,P[i,3]:5);
end;
end; WriteLn; WriteLn('В интервале',a:5'',b:5,'некратных троек',m:5);
ReadLn;
End.

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

Program StrArray;
Uses Crt;
Type ff = Array[1..15]of Integer;
Var Mas1,Mas2; ff;
gg : Text;
a,b : Longlnt;
c,d,f : Integer;
i,j,k,n : Byte;
name : String[10]; {Переменная для имени файла}

Begin
ClrScr;
WriteLn('Имя файла для записи данных'); Read(name);
Assign(gg,name); {Файл с именем name объявлен}
ReWrite(gg); {Файл с именем name, привязанный к файловой переменной gg, открыт для записи данных}
Write('Число элементов массива'); ReadLn(n);
Write('Заполнять массив с клавиатуры (1) или случайными числами (2) ?');
ReadLn(k);
Case k Of
1: For i:=1 to n Do
Begin
Write('Введите элемент N',i,' '); Read(Mas1[i]);
End;
2: Begin Randomize;
Write('Определите базу случайного числа'); ReadLn(a);
For i:=1 to n Do Mas1[i]:= Random(a);
End;
Else WriteLn('Такой вариант не предусмотрен');
End;
Write('Исходный массив'); WriteLn;
Write(gg,'Исходный массив'); WriteLn;
For i:=1 to n Do
Begin
Write(Mas1[i],' ');
Write(gg,Mas1[i],' ');
End;
For i:=1 to n Do Begin Mas2[i]:=Mas1[i] End; WriteLn;
WriteLn('Пересортировать элементы массива по убыванию');
For i:=1 to n-1 Do For j:=i+1 to n Do
Begin
If Mas2[j]>Mas2[i] Then
Begin
a:=Mas2[j]; Mas2[j]:=Mas1[i]; Mas2[i]:=a;
End;
End; WriteLn; WriteLn(gg,' ');
WriteLn('Пересортированный массив');
WriteLn(gg,'Пересортированный массив');
For i:=1 to n Do
Begin
WriteLn(Mas2[i],' '); Write(gg,Mas2[i],' ');
End; WriteLn;
WriteLn('Заменить элементы массива суммой их делителей');
WriteLn(gg,'Замена элементов массива суммой их делителей');
For i:=1 to n Do Mas1[i]:=Mas2[i];
For i:=1 to n Do
Begin k:=0;
For j:=2 to Mas1[i] Div 2 Do If Mas1[i] Mod j = 0 Then k:=k+j;
If k<>0 Then Mas1[i]:=k;
End; WriteLn;
For i:=1 to n Do
Begin
Write(Mas1[i],' ');
Write(gg,Mas1[i],' ');
End;
ReadKey;
End.

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

Program MatArray; {Работа с двумерным массивом}
Uses Crt;
Type su = Array[1..100,1..15] of Integer;
sr = Array[1..100] of Real;
Var a,b : Longlnt;
m,n : Integer;
i,j,k : Byte;
r : Real;
V : sr;
Mas1,Mas2 : su;

Begin
ClrScr; Randomize;

Write('Размерности массива'); ReadLn(m,n);
Write('База случайного числа'); ReadLn(a);
For i:=1 to m Do For j:=1 ton Do Mas1[i,j]:=Random(a);
WriteLn('Исходный массив'); WriteLn;
For i:=1 to m Do For j:=1 to n Do
If m<>n Then Write(Mas1[i,j]:6) Else WriteLn(Mas1[j,i]:6);
WriteLn('Переставить строки по возрастанию среднего значения');
For i:=1 to m Do
Begin V[i]:=0;
For j:=1 to n Do V[i]:= V[i]+Mas1[i,j];
V[i]:=V[i]/n;
End;
For i:=1 to m-1 Do Forj:=1 to m Do
Begin
If V[i]<V[j] Then
Begin
r:=V[i]; V[i]:=V[j]; V[j]:=r;
For k;=1 to n Do
Begin
b:=Mas1[i,k]; Mas1[i,k]:=Mas1[i,k]; Mas1[j,k]:=b;
End;
End;
End;
For i:=1 to m Do
Begin
For j:=1 to n Do Write(Mas1[i,j]:6);
WriteLn('Среднее',V[i]:7:2);
end; ReadKey;
End.

содержание

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz