Дослідження режимів функціонування інтерфейсу RS-232C

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерної техніки, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт
Предмет:
Периферійні пристрої

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІНСТИТУТ КОМП’ЮТЕРНОЇ ТЕХНІКИ АВТОМАТИКИ ТА МЕТРОЛОГІЇ ЗВІТ ЛАБОРАТОРНИХ РОБІТ №1-4 З ПРЕДМЕТУ: «Периферійні пристрої» ТЕМА: «Дослідження режимів функціонування інтерфейсу RS-232C» Львів – 2012 Мета роботи: ознайомитися з процесом передачі даних через асинхронний інтерфейс RS-232C (COM-порт). Теоретичні відомості Асинхронний послідовний інтерфейс – це основний тип інтерфейсу, за допомогою якого здійснюється передача даних між комп’ютерами. Термін асинхроний означає, що при передачі даних не використовуються ніякі синхронізуючі сигнали, і окремі символи можуть передаватись з випадковими інтервалами, як, наприклад при вводі даних з клавіатури. Кожному символу, який передається через послідовне з’єднання, мусить передувати стандартний стартовий сигнал, а завершувати його передачу – стоповий сигнал. Термін послідовний означає, що передача даних виконується по одиночному провіднику, а біти передаються послідовно один за другим. Такий тип зв’язку характерний для телефонної мережі, в якій кожний напрямок обслуговує один провідник. В основному у всіх пристроях, для яких потрібен двонапрямлений зв’язок з комп’ютером, використовується порт, який став стандартом – RS-232C (Reference Standard number 232 version C – стандарт обміну номер 232 версії С), який позволяє передавати дані між несумісними пристроями. Інтерфейс RS-232C розроблено в 1969 році рядом корпорацій США для забезпечення з’єднання комп’ютерів та різноманітних периферійних пристроїв. Стандарт RS-232 в загальному випадку описує 4 інтерфейсні функції: 1. Визначення керувальних сигналів, що передаються через інтерфейс. 2. Визначення формату даних користувача, що передаються через інтерфейс. 3. Передачу тактових сигналів для синхронізації потоку даних. 4. Формування електричних характеристик інтерфейсу. Інтерфейс RS-232 є послідовним асинхронним інтерфейсом, в якому перед бітами даних передається спеціальний стартовий біт, після бітів даних йде біт паритета та 1 чи 2 стопових біти. Така сукупність бітів носить назву старт-стопного символу. Кожний старт-стопний символ, як правило, у якості бітів даних містить один інформаційний символ, наприклад, символ стандартного коду для обміну інформацією, що задається таблицею ASCII. Символи ASCII відображаються семибітовими кодовими словами. Так, наприклад, латинська буква А має код 1000001. Її передача рівнями ТТЛ зображена на рисинку. Початок асинхронного символу завжди відмічається низьким рівнем стартового рівня (“0”). Після нього йдуть 7 біт даних, потім біт паритету, та 2 стопових біти. Біт паритету встановлюється в “1”, або “0”, наприклад, непарний паритет характеризується тим, що загальна кількість одиниць в групі з семи біт (сім даних + один біт паритету) повинно бути непарним числом. Стопові біти передаються високим рівнем (“1”).  Для двопровідної лінії зв'язку у випадку передачі з комп'ютера на зовнішній пристрій використовуються сигнали SG і TхD. Всі 10 сигналів інтерфейсу задіюються лише при з'єднанні комп'ютера з модемом. Власне дані (5, 6, 7 або 8 біти) супроводжуются стартовим бітом, бітом парності і одним або двома стоповими бітами. Отримавши стартовий біт, приймач вибирає з лінії біти даних через визначені інтервали часу. Дуже важливо, щоб тактові частоти приймача і передавача були однаковими, допустима розбіжність - не більше 10 %  Формат даних RS-232C Всі сигнали RS-232C передаються спеціально вибраними рівнями, що забезпечують високу завадостійкість зв'язк. Відзначимо, що дані передаються в інверсному коді (логічній одиниці відповідає низький рівень, логічному нулю - високий рівень).  Рівні сигналів RS-232C на передавальному і приймаючому кінцях лінії зв'язку. Хід роботи: Створила програму для передачі даних між COM портами, яка має наступний вигляд (рис.1):  Рис.1. Для того щоб почати передачу, спочатку потрібно відкрити порти, натиснувши на кнопку «Відкрити». Після цього можна відсилати дані, для цього потрібно натиснути на кнопку «Надіслати дані». З’являється вікно «Передавач», де потрібно ввести текст, який потрібно передати, наприклад ввожу своє прізвище (рис.2), після цього натискаю кнопку «ОК».  Рис.2. Дані, які надсилались заносяться у поле «Приймач» (рис.3), а також з’являється можливість закрити порти і переглянути часові діаграми, виводиться швидкість, з якою передавалось повідомлення.  Рис.3. Для того, щоб переглянути часові діаграми кожної літери, яка передавалась для підтвердження потрібно натиснути на кнопку «Відображення часових діаграм». Після цього з’являться кнопки з назвою кожної літери, яка передавалась (рис.4), якщо натискати на кожну з них можна побачити відображення передачі кожної літери (рис.5-12).  Рис.4.  Рис.5.  Рис.6.  Рис.7.  Рис.8.  Рис.9.  Рис.10.  Рис.11.  Рис.12. Для виходу з програми потрібно натиснути на кнопку «Вихід». Висновки: виконавши поставлене завдання, я ознайомилась з процесом передачі даних через послідовний асинхронний інтерфейс RS-232C (COM-порт), створення приймача, формування та передачі пакетних даних у графічному представленні, а також ознайомилась з процесом налаштування основних параметрів прийому – передачі пакетних даних. Додаток: Лістинг програми: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Comm32, StdCtrls, Buttons, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Comm321: TComm32; Comm322: TComm32; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; SpeedButton1: TSpeedButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; SpeedButton8: TSpeedButton; SpeedButton9: TSpeedButton; Button1: TButton; Button2: TButton; Label21: TLabel; Edit11: TEdit; Button3: TButton; Timer1: TTimer; Label23: TLabel; Label22: TLabel; Label24: TLabel; Panel1: TPanel; SpeedButton10: TSpeedButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Comm322ReceiveData(Buffer: Pointer; BufferLength: Word); procedure SpeedButton9Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton10Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton7Click(Sender: TObject); procedure SpeedButton8Click(Sender: TObject); private { Private declarations } public function bin (x: Integer): string; Function GetTimeInMilliSeconds(theTime : TTime): Int64; { Public declarations } end; var Form1: TForm1; SendStr,st1,st2,st3,st4,st5,st6,st7,st8:String; s,b1:integer; a:integer; implementation uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, Unit9; {$R *.dfm} function TForm1.bin(x: Integer): string; const t:array[0..1] of char = ('0','1'); var res:string; d:0..1; begin res:=''; while (x<>0) do begin d:=x mod 2 ; res:=t[d]+' '+res; x:=x div 2; end; Bin:=res; end; Function TForm1.GetTimeInMilliSeconds(theTime : TTime): Int64; var Hour, Min, Sec, MSec: Word; begin DecodeTime(theTime,Hour, Min, Sec, MSec); Result := (Hour * 3600000) + (Min * 60000) + (Sec * 1000) + MSec; end; procedure TForm1.Button2Click(Sender: TObject); begin SendStr:=''; if InputQuery('Ïåðåäàâà÷', 'Òåêñò:', SendStr) then Comm321.WriteCommData(PChar(SendStr+#13#10), Length(SendStr)); //Ïðèéìà÷ Label21.Visible:=true; Edit11.Visible:=true; Label24.Caption:='Øâèäê³ñòü ïåðåäà÷³ 9600'; SpeedButton9.Visible:=true; end; procedure TForm1.Button1Click(Sender: TObject); begin Comm321.StartComm; Comm322.StartComm; Button3.Visible:=true; end; procedure TForm1.Button3Click(Sender: TObject); begin Comm321.StopComm; Comm322.StopComm; Button3.Visible:=false; Edit11.Text:=''; SpeedButton9.Visible:=false; SpeedButton1.Visible:=false; SpeedButton2.Visible:=false; SpeedButton3.Visible:=false; SpeedButton4.Visible:=false; SpeedButton5.Visible:=false; SpeedButton6.Visible:=false; SpeedButton7.Visible:=false; SpeedButton8.Visible:=false; end; procedure TForm1.Comm322ReceiveData(Buffer: Pointer; BufferLength: Word); var RecivedStr:String; begin RecivedStr:=PChar(Buffer); edit11.Text:=RecivedStr; end; procedure TForm1.SpeedButton9Click(Sender: TObject); var n:integer; begin Label1.Caption:=SendStr[1]; Label2.Caption:=SendStr[2]; Label3.Caption:=SendStr[3]; Label4.Caption:=SendStr[4]; Label5.Caption:=SendStr[5]; Label6.Caption:=SendStr[6]; Label7.Caption:=SendStr[7]; Label8.Caption:=SendStr[8]; Label11.Caption:=''; s:=0; for n:=1 to Length (Label1.Caption) do begin Label11.Caption:=Label11.Caption + IntToStr(ord(Label1.Caption[n])); s:=s+ord(Label1.Caption[n]); end; a:=StrToInt(Label11.Caption); Edit1.Text:=Bin(a); Label12.Caption:=''; s:=0; for n:=1 to Length (Label2.Caption) do begin Label12.Caption:=Label12.Caption + IntToStr(ord(Label2.Caption[n])); s:=s+ord(Label2.Caption[n]); end; a:=StrToInt(Label12.Caption); Edit2.Text:=Bin(a); Label13.Caption:=''; s:=0; for n:=1 to Length (Label3.Caption) do begin Label13.Caption:=Label13.Caption + IntToStr(ord(Label3.Caption[n])); s:=s+ord(Label3.Caption[n]); end; a:=StrToInt(Label13.Caption); Edit3.Text:=Bin(a); Label14.Caption:=''; s:=0; for n:=1 to Length (Label4.Caption) do begin Label14.Caption:=Label14.Caption + IntToStr(ord(Label4.Caption[n])); s:=s+ord(Label4.Caption[n]); end; a:=StrToInt(Label14.Caption); Edit4.Text:=Bin(a); Label15.Caption:=''; s:=0; for n:=1 to Length (Label5.Caption) do begin Label15.Caption:=Label15.Caption + IntToStr(ord(Label5.Caption[n])); s:=s+ord(Label5.Caption[n]); end; a:=StrToInt(Label15.Caption); Edit5.Text:=Bin(a); Label16.Caption:=''; s:=0; for n:=1 to Length (Label6.Caption) do begin Label16.Caption:=Label16.Caption + IntToStr(ord(Label6.Caption[n])); s:=s+ord(Label6.Caption[n]); end; a:=StrToInt(Label16.Caption); Edit6.Text:=Bin(a); Label17.Caption:=''; s:=0; for n:=1 to Length (Label7.Caption) do begin Label17.Caption:=Label17.Caption + IntToStr(ord(Label7.Caption[n])); s:=s+ord(Label7.Caption[n]); end; a:=StrToInt(Label17.Caption); Edit7.Text:=Bin(a); Label18.Caption:=''; s:=0; for n:=1 to Length (Label8.Caption) do begin Label18.Caption:=Label18.Caption + IntToStr(ord(Label8.Caption[n])); s:=s+ord(Label8.Caption[n]); end; a:=StrToInt(Label18.Caption); Edit8.Text:=Bin(a); //ïðèñâîºííÿ çíà÷åíü êíîïêàì äëÿ ×Ä SpeedButton1.Visible:=true; SpeedButton2.Visible:=true; SpeedButton3.Visible:=true; SpeedButton4.Visible:=true; SpeedButton5.Visible:=true; SpeedButton6.Visible:=true; SpeedButton7.Visible:=true; SpeedButton8.Visible:=true; SpeedButton1.Caption:=Label1.Caption; SpeedButton2.Caption:=Label2.Caption; SpeedButton3.Caption:=Label3.Caption; SpeedButton4.Caption:=Label4.Caption; SpeedButton5.Caption:=Label5.Caption; SpeedButton6.Caption:=Label6.Caption; SpeedButton7.Caption:=Label7.Caption; SpeedButton8.Caption:=Label8.Caption; //êîðåêòóâàííÿ á³òîâîãî çíà÷åííÿ st1:=edit1.Text; DELETE(st1,16,1); Edit1.Text:=st1; st2:=Edit2.text; DELETE(st2,16,1); edit2.Text:=st2; st3:=Edit3.text; DELETE(st3,16,1); edit3.Text:=st3; st4:=Edit4.text; DELETE(st4,16,1); edit4.Text:=st4; st5:=Edit5.text; DELETE(st5,16,1); edit5.Text:=st5; st6:=Edit6.text; DELETE(st6,16,1); edit6.Text:=st6; st7:=Edit7.text; DELETE(st7,16,1); edit7.Text:=st7; st8:=Edit8.text; DELETE(st8,16,1); edit8.Text:=st8; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label22.Caption:=TimeToStr(Time); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Form2.Visible:=true; Form2.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label1.Caption; end; procedure TForm1.SpeedButton10Click(Sender: TObject); begin Close; end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin Form3.Visible:=true; Form3.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label2.Caption; end; procedure TForm1.SpeedButton3Click(Sender: TObject); begin Form4.Visible:=true; Form4.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label3.Caption; end; procedure TForm1.SpeedButton4Click(Sender: TObject); begin Form5.Visible:=true; Form5.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label4.Caption; end; procedure TForm1.SpeedButton5Click(Sender: TObject); begin Form6.Visible:=true; Form6.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label5.Caption; end; procedure TForm1.SpeedButton6Click(Sender: TObject); begin Form7.Visible:=true; Form7.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label6.Caption; end; procedure TForm1.SpeedButton7Click(Sender: TObject); begin Form8.Visible:=true; Form8.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label7.Caption; end; procedure TForm1.SpeedButton8Click(Sender: TObject); begin Form9.Visible:=true; Form9.Caption:='×àñîâà ä³àãðàìà ë³òåðè '+Label8.Caption; end; end. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; procedure FormPaint(Sender: TObject); private { Private declarations } public function GetSubStr(st:string; expl:string; n:integer):string; { Public declarations } end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} function TForm2.GetSubStr(st:string; expl:string ;n:integer):string; Var p,i:integer; Begin for i:= 1 to n-1 do begin p:=pos(expl,st); st:=copy(st,p+1,Length(st)-p); while (pos(expl,st)=1) and (length(st)>0) do delete(st,1,1); end; p:=pos(expl,st); if p<>0 then result:=copy(st,1,p-1) else result:=st; End; procedure TForm2.FormPaint(Sender: TObject); var k,i:integer; a1:array[1..20] of integer; begin Color:=clWhite; //îñ³ êîîðäèíàò Canvas.MoveTo(10,10); Canvas.LineTo(10,350); Canvas.MoveTo(0,340); Canvas.LineTo(770,340); Canvas.MoveTo(80,335); Canvas.LineTo(80,345); Canvas.MoveTo(140,335); Canvas.LineTo(140,345); Canvas.MoveTo(200,335); Canvas.LineTo(200,345); Canvas.MoveTo(260,335); Canvas.LineTo(260,345); Canvas.MoveTo(320,335); Canvas.LineTo(320,345); Canvas.MoveTo(380,335); Canvas.LineTo(380,345); Canvas.MoveTo(440,335); Canvas.LineTo(440,345); Canvas.MoveTo(500,335); Canvas.LineTo(500,345); Canvas.MoveTo(560,335); Canvas.LineTo(560,345); Canvas.MoveTo(620,335); Canvas.LineTo(620,345); Canvas.MoveTo(680,335); Canvas.LineTo(680,345); Canvas.MoveTo(740,335); Canvas.LineTo(740,345); Canvas.TextOut(5,150,'1'); Canvas.TextOut(5,320,'0'); Canvas.TextOut(560,365,'ïàðèò.ïàðí.'); Canvas.TextOut(640,365,'ñòîïîâ³ á³òè'); // ïî÷àòêîâèé íóëü Canvas.MoveTo(20,150); Canvas.LineTo(20,340); Canvas.MoveTo(20,340); Canvas.LineTo(80,340); //Ðèñóâàííÿ ä³àãðàìè ë³òåðè //Ââåäåì ìàññèâ for i:=1 to length(Form1.Edit1.text) do //Ïðåîáðàçóåì ïîëó÷åííûå ïîäñòðîêè â ÷èñëà a1[i]:=StrToInt(GetSubStr(Form1.Edit1.text,' ',i)); if a1[1]=1 then begin Canvas.MoveTo(80,340); Canvas.LineTo(80,150); Canvas.MoveTo(80,150); Canvas.LineTo(140,150); end; if a1[1]=0 then begin Canvas.MoveTo(80,340); Canvas.LineTo(140,340); end; if (a1[2] and a1[1])=1 then begin Canvas.MoveTo(140,150); Canvas.LineTo(200,150); end; if (a1[1]=0) and (a1[2]=1) then begin Canvas.MoveTo(140,340); Canvas.LineTo(140,150); Canvas.MoveTo(140,150); Canvas.LineTo(200,150); end; if (a1[2] and a1[1])=0 then begin Canvas.MoveTo(140,340); Canvas.LineTo(200,340); end; if (a1[1]=1) and (a1[2]=0) then begin Canvas.MoveTo(140,150); Canvas.LineTo(140,340); Canvas.MoveTo(140,340); Canvas.LineTo(200,340); end; if (a1[3] and a1[2])=1 then begin Canvas.MoveTo(200,150); Canvas.LineTo(260,150); end; if (a1[2]=0) and (a1[3]=1) then begin Canvas.MoveTo(200,340); Canvas.LineTo(200,150); Canvas.MoveTo(200,150); Canvas.LineTo(260,150); end; if (a1[3] and a1[2])=0 then begin Canvas.MoveTo(200,340); Canvas.LineTo(260,340); end; if (a1[2]=1) and (a1[3]=0) then begin Canvas.MoveTo(200,150); Canvas.LineTo(200,340); Canvas.MoveTo(200,340); Canvas.LineTo(260,340); end; if (a1[4] and a1[3])=1 then begin Canvas.MoveTo(260,150); Canvas.LineTo(320,150); end; if (a1[3]=0) and (a1[4]=1) then begin Canvas.MoveTo(260,340); Canvas.LineTo(260,150); Canvas.MoveTo(260,150); Canvas.LineTo(320,150); end; if (a1[4] and a1[3])=0 then begin Canvas.MoveTo(260,340); Canvas.LineTo(320,340); end; if (a1[3]=1) and (a1[4]=0) then begin Canvas.MoveTo(260,150); Canvas.LineTo(260,340); Canvas.MoveTo(260,340); Canvas.LineTo(320,340); end; if (a1[5] and a1[4])=1 then begin Canvas.MoveTo(320,150); Canvas.LineTo(380,150); end; if (a1[4]=0) and (a1[5]=1) then begin Canvas.MoveTo(320,340); Canvas.LineTo(320,150); Canvas.MoveTo(320,150); Canvas.LineTo(380,150); end; if (a1[5] and a1[4])=0 then begin Canvas.MoveTo(320,340); Canvas.LineTo(380,340); end; if (a1[4]=1) and (a1[5]=0) then begin Canvas.MoveTo(320,150); Canvas.LineTo(320,340); Canvas.MoveTo(320,340); Canvas.LineTo(380,340); end; if (a1[6] and a1[5])=1 then begin Canvas.MoveTo(380,150); Canvas.LineTo(440,150); end; if (a1[5]=0) and (a1[6]=1) then begin Canvas.MoveTo(380,340); Canvas.LineTo(380,150); Canvas.MoveTo(380,150); Canvas.LineTo(440,150); end; if (a1[6] and a1[5])=0 then begin Canvas.MoveTo(380,340); Canvas.LineTo(440,340); end; if (a1[5]=1) and (a1[6]=0) then begin Canvas.MoveTo(380,150); Canvas.LineTo(380,340); Canvas.MoveTo(380,340); Canvas.LineTo(440,340); end; if (a1[7] and a1[6])=1 then begin Canvas.MoveTo(440,150); Canvas.LineTo(500,150); end; if (a1[6]=0) and (a1[7]=1) then begin Canvas.MoveTo(440,340); Canvas.LineTo(440,150); Canvas.MoveTo(440,150); Canvas.LineTo(500,150); end; if (a1[7] and a1[6])=0 then begin Canvas.MoveTo(440,340); Canvas.LineTo(500,340); end; if (a1[6]=1) and (a1[7]=0) then begin Canvas.MoveTo(440,150); Canvas.LineTo(440,340); Canvas.MoveTo(440,340); Canvas.LineTo(500,340); end; if (a1[8] and a1[7])=1 then begin Canvas.MoveTo(500,150); Canvas.LineTo(560,150); end; if (a1[7]=0) and (a1[8]=1) then begin Canvas.MoveTo(500,340); Canvas.LineTo(500,150); Canvas.MoveTo(500,150); Canvas.LineTo(560,150); end; if (a1[8] and a1[7])=0 then begin Canvas.MoveTo(500,340); Canvas.LineTo(560,340); end; if (a1[7]=1) and (a1[8]=0) then begin Canvas.MoveTo(500,150); Canvas.LineTo(500,340); Canvas.MoveTo(500,340); Canvas.LineTo(560,340); end; //ïàðèòåò ïàðíîñò³ Form1.Edit1.Text:=Form1.Edit1.Text+' 0'; k:=0; for i:=1 to length(Form1.Edit1.text) do begin if a1[i]=1 then k:=k+1; end; if (k mod 2=0) then Label1.Caption:='Ïàðèòåò ïàðíîñò³ íóëü '+'(òîìó ùî îäèíèöü '+IntToStr(k)+')'; if (k mod 2=1) then Label1.Caption:='Ïàðèòåò ïàðíîñò³ îäèíèöÿ '+'(òîìó ùî îäèíèöü '+IntToStr(k)+')'; if (k mod 2=0) and (a1[8]=0) then begin Canvas.MoveTo(560,340); Canvas.LineTo(620,340); end; if (k mod 2=0) and (a1[8]=1) then
Антиботан аватар за замовчуванням

21.10.2013 21:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!