Задание 1 1. Переведите данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления. Получите три знака после запятой в двоичном представлении (см. Табл. 1). 2. Переведите данное число в десятичную систему счисления (см. Табл. 1). 3. Сложите числа. Проверьте правильность вычислений переводом исходных данных и результатов в десятичную систему счисления (см. Табл. 1). 4. Переведите числа из восьмеричной системы счисления в шестнадцатеричную (см. Табл. 1). 5. Переведите числа из шестнадцатеричной системы счисления в восьмеричную (см. Табл. 1). 6. Проверьте полученные результаты при помощи программы КАЛЬКУЛЯТОР (СТАНДАРТНЫЕ). 7. По результатам вычислений оформите отчет в ТП Word.
Переводим числа 777; 305; 153,25; 162,25; 248,46 из десятичной системы в двоичную систему счисления методом подбора: 1) 500=11111101002; 2) 675=10101000112; 3) 810,25=1100101010,012; 4) 1017,25=1111111001,012; 5) 123,72=1111011,1012. Переводим число 777; 305; 153,25; 162,25; 248,46 из десятичной системы в восьмеричную систему счисления методом деления: 1) 500= 7648; 2) 675= 12438; 3) 810,25=1452,28; 4) 1017,25=1452,28; 5) 123,72=173,568. Переводим число 777; 305; 153,25; 162,25; 248,46 из десятичной системы в шестнадцатеричную систему счисления методом путём деления: 1) 500=1F416; 2) 675=2A316; 3) 810,25=32A,416; 4) 1017,25=3F9,416; 5) 123,72=81, B8516. Переводим числа 1101010001(2); 100011100(2); 1101110001,011011(2); 110011000,111001(2); 1347,17(8); 155,6C(16) в десятичную систему счисления путём разложения по степеням: 1) 1101010001(2)=1*29+1*28+0*27+1*26+0*25+1*24+0*23+0*22+0*21+ +1*20=849(10); 2) 100011100(2)= 1*28+0*27+0*26+0*25+1*24+1*23+1*22+0*21+ +0*20=284(10); 3) 1101110001,011011(2)=1*29+1*28+0*27+1*26+1*25+1*24+0*23+ +0*22+0*21+1*20+0*2-1+1*2-2+1*2-3+0*2-4+1*2-5+1*2-6= =881, 0,421875(10); 4) 110011000,111001(2)= 1*28+1*27+0*26+0*25+1*24+1*23+ +0*22+0*21+0*20+1*2-1+1*2-2+1*2-3+0*2-4+0*2-5+1*2-6= =408, 890625(10); 5) 1347,17(8)= 1*83+3*82+4*81+7*80+1*8-1+7*8-2=743,234375(10); 6) 155,6C(16)=1*162+5*161+5*160+6*16-1+C*16-2=341,109375(10). Слаживаем числа и проверяем правильность сложения путём перевода в десятичную систему счисления: 1) 1000101101(2)+1100000010(2)= 10100101111(2) Проверка 557+770=1327 • 1000101101(2)=557(10) • 1100000010(2)=770(10) • 10100101111(2)=1327(10) 2) 1111011010(2)+111001100(2)= 10110100110(2) Проверка 986+460=1446 • 1111011010 (2)=986(10) • 111001100(2)=460(10) • 10110100110 (2)=1446(10)
3) 1001000011,1(2)+10001101,101(2)= 1011010001,001 Проверка 986+460=1446 • 1001000011,1(2)=579,5(10) • 10001101,101(2)=141,625(10) • 1011010001,001(2)=721,125(10) 4) 415,24(8)+1345,04(8)=1762,3(8) Проверка 986+460=1446 • 415,24(8)=269,3125(10) • 1345,04(8)=741,0625(10) • 1762,3(8)=1010,375(10) 5) 113,B(16)+65,8(16)=179,3(16) Проверка 986+460=1446 • 113,B(16)=275,6875(10) • 65,8(16)=101,5(10) • 179,3(16)=377,1875(10) Перевести число 1017,2(8) из восьмеричной в шестнадцатеричную, для этого переводим число 1017,2(8) сначала в двоичную систему записав каждую цифру в восьмеричной системе как три цифры в двоичной системе (триада): 1017,2(8)=001 000 001 111 ,010; после этого полученное двоичное число разбиваем на группы по четыре (тетрады): 0010 0000 1111, 0100; и записав тетрады в шестнадцатеричном счислении получим шестнадцатеричное число: 20F,4(16)=1017,2(8). Перевести число 334,A(16) из шестнадцатеричной в восьмертчную, для этого переводим число 334,A(16) сначала в двоичную систему записав каждую цифру в шестнадцатеричной системе как четыре цифры в двоичной системе (тетрада): 0011 0011 0100, 1010; после этого полученное двоичное число разбиваем на группы по три (триады): 001 100 110 100, 101; записываем полученные триада в восьмеричном счислении и получаем: 334,A(16)=1464,5(8).
ЗАДАНИЕ 2 Составить программу вычисления выражения согласно указанному преподавателем варианту. Необходимо уточнить условие задания, количество, наименование, типы исходных данных. В соответствии с этим установить необходимое количество компонент TEdit, тексты заголовков на форме, размеры шрифтов, а также типы переменных и функции преобразования при вводе и выводе результатов. С помощью инспектора объектов изменить цвет формы, шрифт выводимых символов.
{$R *.dfm} function fact(n: integer): integer; var i,f: integer; begin if n<2 then fact:=1 else begin f:=1; for i:=1 to n do f:=f*i; fact:=f; end; end;
procedure TForm1.Button1Click(Sender: TObject); var xn,xk,x,h,e,a,s,y :Extended; n,k:Integer; begin Memo1.Lines.Add('Вычисление таблицы значений функции'); Memo1.Lines.Add('Исходные данные:'); xn:=StrToFloat(Edit1.Text); Memo1.Lines.Add('xn='+FloatToStrF(xn,ffFixed,6,2)); xk:=StrToFloat(Edit2.Text); Memo1.Lines.Add('xk='+FloatToStrF(xk,ffFixed,6,2)); m:=StrToInt(Edit3.Text); h:=(xk-xn)/m; Memo1.Lines.Add('h='+FloatToStrF(h,ffFixed,8,3)); e:=StrToFloat(Edit4.Text); Memo1.Lines.Add('eps='+FloatToStrF(e,ffFixed,8,5)); Memo1.Lines.Add('Таблица значений функции'); Memo1.Lines.Add('x S(x) Y(x) n'); x:=xn; Repeat S:=1; a:=1; n:=0; While Abs(a) > e Do Begin Inc(n); a:=(2*n+1)/fact(n)*power(x,2*n); s:=s+a End; y:=(1+2*x*x)*Exp(x*x); Memo1.Lines.Add(FloatToStrF(x,ffFixed,6,2)+' '+FloatToStrF(s,ffFixed, 8,4)+' ' + FloatToStrF(y,ffFixed,8,4)+ ' '+ IntToStr(n)); x:=x+h; Until x>xk+h/2 end;
procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Clear; end; procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text:='0.1'; Edit2.Text:='1'; Edit3.Text:='14'; Edit4.Text:='0.001'; Memo1.Clear; end; end.
Задание 5 Найти произведение и количество элементов массива, расположенных до первого отрицательного элемента. Составить блок-схему алгоритма.
Задание 6 Задана матрица размером n•m. Определить k – количество «особых» элементов матрицы, считая элемент «особым», если в его строке слева от него находятся элементы, меньшие его, а справа – большие. Код программы: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit2: TEdit; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; Const Nmax=100; // Максимальный размер массива Type // Объявление типа одномерного массива Mas = Array[1..Nmax,1..Nmax] of Extended; // размерностью Nmax Var Form1: TForm1; A:Mas; // Объявление одномерного массива i, j, n, m: Byte; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); Begin Memo1.Clear; Edit1.Text:='3'; // Ввод размерности массива Edit2.Text:='4'; // Ввод размерности массива n:=StrToInt(Edit1.Text); m:=StrToInt(Edit2.Text); StringGrid1.RowCount:=n+1; StringGrid1.ColCount:=m+1; For j:=0 To m Do Begin // Заполнение верхней строки For i:= 0 to n do if j=0 then StringGrid1.Cells[j, i]:=' i= '+IntToStr(i) else if i=0 then StringGrid1.Cells[j, i]:=' j= '+IntToStr(j) // поясняющими подписями else StringGrid1.Cells[j, i]:='0'; End; StringGrid1.Cells[0,0]:='Массив'; end; procedure TForm1.Button1Click(Sender: TObject); // Изменить размер Begin // таблицы n:=StrToInt(Edit1.Text); m:=StrToInt(Edit2.Text); StringGrid1.RowCount:=n+1; StringGrid1.ColCount:=m+1; For j:=0 To m Do Begin // Заполнение верхней строки For i:= 0 to n do if j=0 then StringGrid1.Cells[j, i]:=' i= '+IntToStr(i) else if i=0 then StringGrid1.Cells[j, i]:=' j= '+IntToStr(j) // поясняющими подписями else StringGrid1.Cells[i, j]:='0'; End; StringGrid1.Cells[0,0]:='Массив'; End; procedure TForm1.Button2Click(Sender: TObject); Var k,flag : Byte; kol: integer; Begin {$R+} Memo1.Clear; Try {Заполнение массива А элементами из таблицы StringGrid1} Memo1.Lines.Add('"Особые" элементы матрицы:'); For i:=1 To n Do FOR j:=1 to m do A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]); kol:=0; For i:=1 To n Do begin FOR j:=1 to m do begin flag:=1; for k:=1 to j-1 do if A[i,k]>=A[i,j] then flag:=0; for k:=j+1 to m do if A[i,k]<=A[i,j] then flag:=0; if flag=1 then begin Memo1.Lines.add('A[' + inttostr(i) +','+inttostr(j)+'] = ' + floattostr(a[i,j])); kol:=kol+1; end; end; end; Memo1.Lines.add('Количество элементов = '+ inttostr(kol)); Except On ERangeError Do Begin ShowMessage('Выход за пределы массива. Уменьшите размер'+ 'массива.'); Exit; End; On EConvertError Do Begin ShowMessage('В ячейке отсутствует значение,'+ ' либо число введено не правильно.'); Exit; End Else Begin ShowMessage('Возникла неизвестная исключительная ситуация!'); Exit; End; End; End; End.
Задание 7 На междугородной АТС информация о разговорах содержит: дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе и номер телефона абонента. Вывести по каждому городу общее время разговоров с ним и сумму. Код программы: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit2: TEdit; Label2: TLabel; Edit3: TEdit; Label3: TLabel; Edit4: TEdit; Label4: TLabel; Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Edit1: TEdit; Label1: TLabel; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Label5: TLabel; Label6: TLabel; Label7: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Type TPhone = record date: string[10]; code: string[6]; city: string[20]; time: real; tarif: real; nom1: string[15]; nom2: string[15]; end; var Form1: TForm1; Fz : file of TPhone; Ft : TextFile; phone : array[1..100] of TPhone; cities: array[1..100] of string; nzap: integer; FNameZ, FNameT : string; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear; Edit7.Clear; Memo1.Clear; Button1.Hide; nzap:=0; end; procedure TForm1.Button1Click(Sender: TObject); begin nzap:=nzap+1; with phone[nzap] do begin date:=Edit1.Text; code:=Edit2.Text; city:=Edit3.Text; time:=StrToFloat(Edit4.Text); tarif:=StrToFloat(Edit5.Text); nom1:=Edit6.Text; nom2:=Edit7.Text; Memo1.Lines.Add(date+' '+code+' '+city+' '+FloatToStr(time)+' '+ FloatToStr(tarif)+nom1+' '+nom2); end; Write(fz,phone[nzap]); Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear; Edit7.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin OpenDialog1.Title :='Создать новый файл'; if OpenDialog1.Execute then begin FNameZ:= OpenDialog1.FileName; AssignFile(Fz, FNameZ); Rewrite(Fz); end; Button1.Show; end; procedure TForm1.Button3Click(Sender: TObject); begin if OpenDialog1.Execute then begin FNameZ:= OpenDialog1.FileName; AssignFile(Fz, FNameZ); Reset(Fz); end; nzap:=0; Memo1.Lines.Clear; if (FNameZ<>'') then begin while not eof(fz) do begin nzap:=nzap+1; Read(fz,phone[nzap]); with phone[nzap] do Memo1.Lines.Add(date+' '+code+' '+city+' '+FloatToStr(time)+' '+ FloatToStr(tarif)+' '+nom1+' '+nom2); end; Button1.Show; end; end; procedure TForm1.Button4Click(Sender: TObject); var i, j, inc, ncit : integer; sum, tim: real; ph: TPhone; begin ncit:=0; for i:=1 to nzap do begin inc:=0; for j:=1 to ncit do if cities[j]=phone[i].city then inc:=1; if inc=0 then begin ncit:=ncit+1; cities[ncit]:=phone[i].city; end; end; AssignFile(Ft, 'Rez.txt'); Rewrite(Ft); Memo1.Clear; for i:=1 to ncit do begin sum:=0;tim:=0; for j:=1 to nzap do if cities[i]=phone[j].city then begin sum:=sum+phone[j].time*phone[j].tarif; tim:=tim+phone[j].time; end; Memo1.Lines.Add('Общее время разговоров по городу '+cities[i]+' = '+FloatToStr(tim)+ '. Сумма разговоров = '+FloatToStr(sum)); Writeln(Ft,'Общее время разговоров по городу '+cities[i]+' = '+FloatToStr(tim)+ '. Сумма разговоров = '+FloatToStr(sum)); end; CloseFile(ft); end; procedure TForm1.Button5Click(Sender: TObject); var i:integer; begin if SaveDialog1.Execute then begin FNameT:= SaveDialog1.FileName; AssignFile(Ft, FNameT); Rewrite(Ft); end; for i:=1 to nzap do with phone[i] do Writeln(Ft, date+' '+code+' '+city+' '+FloatToStr(time)+' '+ FloatToStr(tarif)+' '+nom1+' '+nom2); CloseFile(Ft); end; procedure TForm1.Button6Click(Sender: TObject); begin CloseFile(fz); end; end.