|
Programowanie -
Bascom
|
|
Wpisany przez Administrator
|
|
niedziela, 02 listopada 2008 23:40 |
|
Prosty licznik sekundowy. Do pobrania : prog_12.zip ( prog_12.bas, prog_12.hex ) Typ : pełna, darmowa Rozmiar pliku : 0.01 MBAutor : www.neTsl.net Systemy : Mikrokontroler AT90S2313 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
'Program napisany na mikrokontroler ATMEGA AT90S2313
'Prosty licznik sekundowy od zera ( 0000 ) do ( 9999 ) z skokiem co 1
'Po doliczeniu do konca zaczyna od poczatku jednak ilosc przejsc od poczatku do konca zapamietuje w osobnej
'zmiennej do podgladniecia po przycisnieciu przycisku P0
'Przetestowany na zestawie demo ( plytce testowej ) do kursu Bascom AVR - AVT3500
'W zestawie PORTB podlaczony do czterech wyswietlaczy 7-segmentowych pracujacych w trybie multipleksowym
'PORTD.0 oraz PORTD.1 jako przyciski, PORTD.2 do PORTD.6 podlaczone do tranzystorow sterujacych wlaczanie/wylaczanie
'wspolna anoda poszczegolnych wyswietlaczy 7-segmentowych ( czyli w rzeczywistosci wlacza/wylacza pojedyncza cyfre - modul )
'Schemat elektryczny zestawu na stronie www.netsl.net ( szukaj : AVT3500 )
'Autor : neTsl.net 02.11.2008
'USTAL KONFIGURACJE PORTOW
'=========================
'wszystkie porty b jako wyjscie - to te od wyswietlaczy 7-segmentowych port b to 8 wyjsc/wejsc
'7 segmentow cyfry ( modulu ) plus kropka
Config Portb = Output
'porty d dwa najmlodsze czyli przyciski (pd.0) i (pd.1) jako wejscie ( 0 ), reszta ( czyli m.in. tranzystory sterujace ledami )
'jako wyjscie ( 1 ), port d to 7 wyjsc/wejsc
Config Portd = &B1111100
'USTAL STAN SPOCZYNKOWY PORTOW
'=============================
'wpisujac ( 0 ) zalaczamy tranzystor ktory nam jest potrzebny, dwa najmlodsze bity pd.0 i pd.1 czyli przyciski, tam dajemy jedynki czyli
'podciagamy do plusa zasilania przez to beda reagowac na wcisniecie czyli dopiecie do masy
Portd = &B00000111
'na wszystkich wyjsciach portu b ustalamy ( 1 ) czyli wylaczamy ledy
Portb = &B11111111
'ZACZYNAMY
'=========
Dim Kw As Byte , A As Word , B As Byte , C As Byte , D As Byte , Migaj As Bit , P1 As Byte , P2 As Byte
Dim A2 As Byte , B2 As Byte , C2 As Byte , D2 As Byte
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
On Timer0 T1
Kw = 0 : A = 0 : B = 0 : C = 0 : D = 0 : Migaj = 0 : P1 = 0 : P2 = 0
A2 = 0 : B2 = 0 : C2 = 0 : D2 = 0
Do : Loop : End 'glowna petla
Tabela: 'potrzebna do wyswietlenia cyfr 0...9
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Zwieksz:
Incr A
If A = 10 Then
A = 0
Incr B
If B = 10 Then
B = 0
Incr C
If C = 10 Then
C = 0
Incr D
If D = 10 Then
D = 0
Incr A2
If A2 = 10 Then
A2 = 0
Incr B2
If B2 = 10 Then
B2 = 0
Incr C2
If C2 = 10 Then
C2 = 0
Incr D2
If D2 = 10 Then D2 = 0
End If
End If
End If
End If
End If
End If
End If
Return
T1:
'przerwanie od timera co 4ms
'czestotliwosc kwarcu przy mikrokontrolerze 4MHz
'4MHz = 4000000 Hz czyli 4000000 razy na sekunde
'czyli 1sekunda/4000000 = 0.00000025s - tyle wynosi przebieg z kwarcu
'prescaler wlaczony na 64 ( Prescale = 64 ), czyli 0.00000025s * 64 = 0.000016s czyli 16us ( mikrosekund )
'Timer0 to licznik od 0 do 255 czyli po zliczeniu 255 takich 16us sygnalow wysyla do procesora przerwanie
'czyli w sumie to daje sygnal przerwania co 0.00408s, my chcemy dokladnie co 4ms wiec od 255 - 6 = 249 ale liczymy lacznie z
'0 wiec w sumie 250 * 16us = 0.004ms ( milisekundy )
Timer0 = 6
Incr P2
If P2 = 250 Then '250 * 0.004s to dokladnie 1s i co tyle bedzie zwiekszany licznik
P2 = 0
Gosub Zwieksz
End If
Incr P1 'zwieksz P1
If P1 = 40 Then '40 * 0.004s to dokladnie 0.16s i co tyle bedzie zaswiecana kropka
P1 = 0
Toggle Migaj 'zmien na przeciwny stan zmiennej Migaj
End If
Incr Kw : If Kw = 4 Then Kw = 0 'wybierz kolejny wyswietlacz
'OBSLUGA WYSWIETLACZY CO 4ms
'===========================
Portd = &B1111111 'wygas wyswietlacze
If Pind.0 = 1 Then
Select Case Kw
Case 0:
Portb = Lookup(a , Tabela) 'wpisz wartosci do portu b
Portd.3 = 0 'zaswiec ( wlacz ) cyfre pierwsza
Portb.7 = Migaj 'obsluga punktu migajacego
Case 1:
Portb = Lookup(b , Tabela)
Portd.4 = 0
Case 2:
Portb = Lookup(c , Tabela)
Portd.5 = 0
Case 3:
Portb = Lookup(d , Tabela)
Portd.6 = 0
End Select
Else
Select Case Kw
Case 0:
Portb = Lookup(a2 , Tabela) 'wpisz wartosci do portu b
Portd.3 = 0 'zaswiec ( wlacz ) cyfre pierwsza
Portb.7 = Migaj 'obsluga punktu migajacego
Case 1:
Portb = Lookup(b2 , Tabela)
Portd.4 = 0
Portb.7 = 0
Case 2:
Portb = Lookup(c2 , Tabela)
Portd.5 = 0
Case 3:
Portb = Lookup(d2 , Tabela)
Portd.6 = 0
End Select
End If
Return
|
|
|
Zmieniony: poniedziałek, 03 listopada 2008 00:09 |
|
Programowanie -
Zadania C++
|
|
Wpisany przez Administrator
|
|
niedziela, 01 lutego 2009 11:15 |
|
Analizator leksykalny w wersji podstawowej. Klasy znaków : identyfikatory, liczby rzeczywiste, liczby całkowite, słowa kluczowe, operatory addytywne i multiplikatywne, nawiasy, operator przypisania. Program po uruchomieniu odczytuje tekst do analizy z pliku "test.txt", wstawia do listy i dokonuje analizy. Do pobrania również spakowana wersja z przykładowym plikiem "test.txt" i programem do uruchomienia analizator.exe Do pobrania : analizator.zip Wersja : 2.12Typ : pełna, GPLRozmiar pliku : 0.20 MBAutor : www.neTsl.net 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
|
#include <map> #include <list> #include <string.h> #include <iostream> #include <fstream.h>
//===================== //Autor : www.neTsl.net //=====================
using namespace std;
multimap <string,int> symbol; multimap <string,int> kluczowe; list <string> tab; //deklaracja listy list <string>::iterator itr; //iterator do listy, a zarazem glowica analizatora
typedef enum stany {q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15, qk1, qk2, qk3, qk4, qk5, qk6, qk7, qk8, qk9, qk10, qk11, qk12, qk13, qerr, qer} stan; stan analiza[16][17]; stan akt_stan = q0;
int a, k; string bufor, c;
class analizator { public: analizator() { tab.clear(); itr = tab.begin(); //iterator na poczatek listy bufor = ""; }
void inicjuj() { itr = tab.begin(); //iterator na poczatek listy akt_stan = q0; bufor = ""; }
void czytaj_plik() //czyta plik i wstawia do listy { ifstream plik; plik.open("test.txt"); while (plik.good()) { c = plik.get(); if (plik.good()) { tab.push_back(c); } } plik.close(); }
void pokaz_plik() //wyswietla zawartosc listy { system("cls"); cout << "!POKAZ PLIK-----------------------------" << endl; cout << "----------------------------------------" << endl << endl; for (itr=tab.begin(); itr!=tab.end(); itr++) cout << *itr; cout << endl << endl << "Liczba znakow w pliku : " << tab.size() << endl << endl; }
string wczytaj_nie_spacje() { while (*itr == " " || *itr == "\n" || *itr == "\t") { itr++; } return *itr; }
int wyznacz_klase(string znak) //wyznacza klase znaku { return symbol.find(znak)->second; }
void pokaz_klasy() //wyswietla klasy dla poszczegolnych znakow { inicjuj();
cout << "!POKAZ KLASY ZNAKOW---------------------" << endl; cout << "----------------------------------------" << endl << endl; do { c = wczytaj_nie_spacje(); cout << c << "=" << wyznacz_klase(c) << " "; itr++; } while (itr!=tab.end()); cout << endl << endl; } };
int main(int argc, char *argv[]) { symbol.insert (pair<string,int>("a",0)); symbol.insert (pair<string,int> ("b",0)); symbol.insert (pair<string,int>("c",0)); symbol.insert (pair<string,int>("d",0)); symbol.insert (pair<string,int> ("f",0)); symbol.insert (pair<string,int>("g",0)); symbol.insert (pair<string,int>("h",0)); symbol.insert (pair<string,int> ("i",0)); symbol.insert (pair<string,int>("j",0)); symbol.insert (pair<string,int>("k",0)); symbol.insert (pair<string,int> ("l",0)); symbol.insert (pair<string,int>("m",0)); symbol.insert (pair<string,int>("n",0)); symbol.insert (pair<string,int> ("o",0)); symbol.insert (pair<string,int>("p",0)); symbol.insert (pair<string,int>("r",0)); symbol.insert (pair<string,int> ("s",0)); symbol.insert (pair<string,int>("t",0)); symbol.insert (pair<string,int>("u",0)); symbol.insert (pair<string,int> ("v",0)); symbol.insert (pair<string,int>("w",0)); symbol.insert (pair<string,int>("x",0)); symbol.insert (pair<string,int> ("y",0)); symbol.insert (pair<string,int>("z",0));
symbol.insert (pair<string,int>("A",0)); symbol.insert (pair<string,int> ("B",0)); symbol.insert (pair<string,int>("C",0)); symbol.insert (pair<string,int>("D",0)); symbol.insert (pair<string,int> ("F",0)); symbol.insert (pair<string,int>("G",0)); symbol.insert (pair<string,int>("H",0)); symbol.insert (pair<string,int> ("I",0)); symbol.insert (pair<string,int>("J",0)); symbol.insert (pair<string,int>("K",0)); symbol.insert (pair<string,int> ("L",0)); symbol.insert (pair<string,int>("M",0)); symbol.insert (pair<string,int>("N",0)); symbol.insert (pair<string,int> ("O",0)); symbol.insert (pair<string,int>("P",0)); symbol.insert (pair<string,int>("R",0)); symbol.insert (pair<string,int> ("S",0)); symbol.insert (pair<string,int>("T",0)); symbol.insert (pair<string,int>("U",0)); symbol.insert (pair<string,int> ("V",0)); symbol.insert (pair<string,int>("W",0)); symbol.insert (pair<string,int>("X",0)); symbol.insert (pair<string,int> ("Y",0)); symbol.insert (pair<string,int>("Z",0));
symbol.insert (pair<string,int>("e",1)); symbol.insert (pair<string,int> ("E",1));
symbol.insert (pair<string,int>("1",2)); symbol.insert (pair<string,int> ("2",2)); symbol.insert (pair<string,int>("3",2)); symbol.insert (pair<string,int>("4",2)); symbol.insert (pair<string,int> ("5",2)); symbol.insert (pair<string,int>("6",2)); symbol.insert (pair<string,int>("7",2)); symbol.insert (pair<string,int> ("8",2)); symbol.insert (pair<string,int>("9",2)); symbol.insert (pair<string,int>("0",2));
symbol.insert (pair<string,int>(".",3)); symbol.insert (pair<string,int> ("+",4)); symbol.insert (pair<string,int>("-",4)); symbol.insert (pair<string,int>(":",5)); symbol.insert (pair<string,int> ("=",6)); symbol.insert (pair<string,int>("/",7)); symbol.insert (pair<string,int>("*",7)); symbol.insert (pair<string,int> ("_",8)); symbol.insert (pair<string,int>(">",9)); symbol.insert (pair<string,int>("< ",9)); symbol.insert (pair<string,int>(",",9)); symbol.insert (pair<string,int> ("\"",9)); symbol.insert (pair<string,int>("!",9)); symbol.insert (pair<string,int> ("'",9)); symbol.insert (pair<string,int>("\\",9)); symbol.insert (pair<string,int>(" ",9)); symbol.insert (pair<string,int> ("\n",9)); symbol.insert (pair<string,int>("%",9)); symbol.insert (pair<string,int>("{",10)); symbol.insert (pair<string,int> ("}",11)); symbol.insert (pair<string,int>("(",12)); symbol.insert (pair<string,int>(")",13)); symbol.insert (pair<string,int> ("[",14)); symbol.insert (pair<string,int>("]",15)); symbol.insert (pair<string,int>(";",16)); kluczowe.insert (pair<string,int>("main",0)); kluczowe.insert (pair<string ,int>("if",0)); kluczowe.insert (pair<string,int>("else",0)); kluczowe.insert (pair<string,int>("do",0)); kluczowe.insert (pair<string,int> ("while",0)); kluczowe.insert (pair<string,int>("int",0)); kluczowe.insert (pair<string,int>("char",0)); kluczowe.insert (pair<string ,int>("float",0)); kluczowe.insert (pair<string,int>("double",0)); kluczowe.insert (pair<string,int>("return",0)); kluczowe.insert (pair<string ,int>("const",0)); kluczowe.insert (pair<string,int>("void",0)); kluczowe.insert (pair<string,int>("for",0)); kluczowe.insert (pair<string,int> ("switch",0)); kluczowe.insert (pair<string,int>("case",0)); kluczowe.insert (pair<string,int>("class",0)); kluczowe.insert (pair<string ,int>("private",0)); kluczowe.insert (pair<string,int>("public",0)); kluczowe.insert (pair<string,int>("include",0)); kluczowe.insert (pair<string ,int>("cin",0)); kluczowe.insert (pair<string,int>("cout",0)); analiza[0][0] = q7; analiza[0][1] = q7; analiza[0][2] = q1; analiza[0][3] = qer; analiza[0][4] = qk6; analiza[0][5] = q8; analiza[0][6] = q8; analiza[0][7] = qk5; analiza[0][8] = qer; analiza[0][9] = qer; analiza[0][10] = q9; analiza[0][11] = q10; analiza[0][12] = q11; analiza[0][13] = q12; analiza[0][14] = q13; analiza[0][15] = q14; analiza[0][16] = q15;
analiza[1][0] = qk2; analiza[1][1] = qk2; analiza[1][2] = q1; analiza[1][3] = q2; analiza[1][4] = qk2; analiza[1][5] = qk2; analiza[1][6] = qk2; analiza[1][7] = qk2; analiza[1][8] = qk2; analiza[1][9] = qk2; analiza[1][10] = qk2; analiza[1][11] = qk2; analiza[1][12] = qk2; analiza[1][13] = qk2; analiza[1][14] = qk2; analiza[1][15] = qk2; analiza[1][16] = qk2;
analiza[2][0] = qerr; analiza[2][1] = qerr; analiza[2][2] = q3; analiza[2][3] = qerr; analiza[2][4] = qerr; analiza[2][5] = qerr; analiza[2][6] = qerr;analiza[2][7] = qerr; analiza[2][8] = qerr; analiza[2][9] = qerr;
analiza[3][0] = qk1; analiza[3][1] = q4; analiza[3][2] = q3; analiza[3][3] = qk1; analiza[3][4] = qk1; analiza[3][5] = qk1; analiza[3][6] = qk1; analiza[3][7] = qk1; analiza[3][8] = qk1; analiza[3][9] = qk1; analiza[3][10] = qk1; analiza[3][11] = qk1; analiza[3][12] = qk1; analiza[3][13] = qk1; analiza[3][14] = qk1; analiza[3][15] = qk1; analiza[3][16] = qk1;
analiza[4][0] = qerr; analiza[4][1] = qerr; analiza[4][2] = q6; analiza[4][3] = qerr; analiza[4][4] = q5; analiza[4][5] = qerr; analiza[4][6] = qerr; analiza[4][7] = qerr; analiza[4][8] = qerr; analiza[4][9] = qerr;
analiza[5][0] = qerr; analiza[5][1] = qerr; analiza[5][2] = q6; analiza[5][3] = qerr; analiza[5][4] = qerr; analiza[5][5] = qerr; analiza[5][6] = qerr; analiza[5][7] = qerr; analiza[5][8] = qerr; analiza[5][9] = qerr;
analiza[6][0] = qk1; analiza[6][1] = qk1; analiza[6][2] = q6; analiza[6][3] = qk1; analiza[6][4] = qk1; analiza[6][5] = qk1; analiza[6][6] = qk1; analiza[6][7] = qk1; analiza[6][8] = qk1; analiza[6][9] = qk1; analiza[6][10] = qk1; analiza[6][11] = qk1; analiza[6][12] = qk1; analiza[6][13] = qk1; analiza[6][14] = qk1; analiza[6][15] = qk1; analiza[6][16] = qk1;
analiza[7][0] = q7; analiza[7][1] = q7; analiza[7][2] = q7; analiza[7][3] = qk3; analiza[7][4] = qk3; analiza[7][5] = qk3; analiza[7][6] = qk3; analiza[7][7] = qk3; analiza[7][8] = q7; analiza[7][9] = qk3; analiza[7][10] = qk3; analiza[7][11] = qk3; analiza[7][12] = qk3; analiza[7][13] = qk3; analiza[7][14] = qk3; analiza[7][15] = qk3; analiza[7][16] = qk3;
analiza[8][0] = qk4; analiza[8][1] = qk4; analiza[8][2] = qk4; analiza[8][3] = qerr; analiza[8][4] = qerr; analiza[8][5] = qerr; analiza[8][6] = q8; analiza[8][7] = qerr; analiza[8][8] = qerr; analiza[8][9] = qk4; analiza[8][10] = qk4; analiza[8][11] = qk4; analiza[8][12] = qk4; analiza[8][13] = qk4; analiza[8][14] = qk4; analiza[8][15] = qk4; analiza[8][16] = qk4; analiza[9][0] = qk7; analiza[9][1] = qk7; analiza[9][2] = qk7; analiza[9][3] = qk7; analiza[9][4] = qk7; analiza[9][5] = qk7; analiza[9][6] = qk7; analiza[9][7] = qk7; analiza[9][8] = qk7; analiza[9][9] = qk7; analiza[9][10] = qk7; analiza[9][11] = qk7; analiza[9][12] = qk7; analiza[9][13] = qk7; analiza[9][14] = qk7; analiza[9][15] = qk7; analiza[9][16] = qk7;
analiza[10][0] = qk8; analiza[10][1] = qk8; analiza[10][2] = qk8; analiza[10][3] = qk8; analiza[10][4] = qk8; analiza[10][5] = qk8; analiza[10][6] = qk8; analiza[10][7] = qk8; analiza[10][8] = qk8; analiza[10][9] = qk8; analiza[10][10] = qk8; analiza[10][11] = qk8; analiza[10][12] = qk8; analiza[10][13] = qk8; analiza[10][14] = qk8; analiza[10][15] = qk8; analiza[10][16] = qk8; analiza[11][0] = qk9; analiza[11][1] = qk9; analiza[11][2] = qk9; analiza[11][3] = qk9; analiza[11][4] = qk9; analiza[11][5] = qk9; analiza[11][6] = qk9; analiza[11][7] = qk9; analiza[11][8] = qk9; analiza[11][9] = qk9; analiza[11][10] = qk9; analiza[11][11] = qk9; analiza[11][12] = qk9; analiza[11][13] = qk9; analiza[11][14] = qk9; analiza[11][15] = qk9; analiza[11][16] = qk9; analiza[12][0] = qk10; analiza[12][1] = qk10; analiza[12][2] = qk10; analiza[12][3] = qk10; analiza[12][4] = qk10; analiza[12][5] = qk10; analiza[12][6] = qk10; analiza[12][7] = qk10; analiza[12][8] = qk10; analiza[12][9] = qk10; analiza[12][10] = qk10; analiza[12][11] = qk10; analiza[12][12] = qk10; analiza[12][13] = qk10; analiza[12][14] = qk10; analiza[12][15] = qk10; analiza[12][16] = qk10;
analiza[13][0] = qk11; analiza[13][1] = qk11; analiza[13][2] = qk11; analiza[13][3] = qk11; analiza[13][4] = qk11; analiza[13][5] = qk11; analiza[13][6] = qk11; analiza[13][7] = qk11; analiza[13][8] = qk11; analiza[13][9] = qk11; analiza[13][10] = qk11; analiza[13][11] = qk11; analiza[13][13] = qk11; analiza[13][13] = qk11; analiza[13][14] = qk11; analiza[13][15] = qk11; analiza[13][16] = qk11;
analiza[14][0] = qk12; analiza[14][1] = qk12; analiza[14][2] = qk12; analiza[14][3] = qk12; analiza[14][4] = qk12; analiza[14][5] = qk12; analiza[14][6] = qk12; analiza[14][7] = qk12; analiza[14][8] = qk12; analiza[14][9] = qk12; analiza[14][10] = qk12; analiza[14][11] = qk12; analiza[14][14] = qk12; analiza[14][13] = qk12; analiza[14][14] = qk12; analiza[14][15] = qk12; analiza[14][16] = qk12;
analiza[15][0] = qk13; analiza[15][1] = qk13; analiza[15][2] = qk13; analiza[15][3] = qk13; analiza[15][4] = qk13; analiza[15][5] = qk13; analiza[15][6] = qk13; analiza[15][7] = qk13; analiza[15][8] = qk13; analiza[15][9] = qk13; analiza[15][10] = qk13; analiza[15][11] = qk13; analiza[15][15] = qk13; analiza[15][13] = qk13; analiza[15][15] = qk13; analiza[15][15] = qk13; analiza[15][16] = qerr; analizator test; test.czytaj_plik(); test.pokaz_plik(); //test.pokaz_klasy();
test.inicjuj(); cout << "!ANALIZA LEKSYKALNA---------------------" << endl; cout << "----------------------------------------" << endl << endl; do { k = 0;
while (akt_stan>=q0 && akt_stan<=q15 && itr!=tab.end()) { if(k == 0) { c = test.wczytaj_nie_spacje(); k = 1; } else c = *itr; //cout << "akt_stan:" << akt_stan << "klasa:" << test.wyznacz_klase(c) < < endl; akt_stan = analiza[akt_stan][test.wyznacz_klase(c)]; //cout << "akt_stan:" << akt_stan << endl; if((akt_stan>=q0 && akt_stan<=q15) || (bufor=="")) { bufor = bufor + c; } itr++; }
switch(akt_stan) { case qk1: cout << "ROZPOZNANO LICZBA RZECZYWISTA -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break; case qk2: cout << "ROZPOZNANO LICZBA CALKOWITA -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qk3: if (!kluczowe.find(bufor)->second) cout << "ROZPOZNANO SLOWO KLUCZOWE -> "; else cout << "ROZPOZNANO IDENTYFIKATOR -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qk4: cout << "ROZPOZNANO OPERATOR PRZYPISANIA -> "; cout << bufor << endl; bufor = ""; akt_stan = q0; break;
case qk5: cout << "ROZPOZNANO OPERATOR MULTIPLIKATYWNY -> "; cout << bufor << endl; bufor = ""; akt_stan = q0; break;
case qk6: cout << "ROZPOZNANO OPERATOR ADDYTYWNY -> "; cout << bufor << endl; bufor = ""; akt_stan = q0; break;
case qk7: cout << "ROZPOZNANO NAWIAS LEWY KLAMROWY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qk8: cout << "ROZPOZNANO NAWIAS PRAWY KLAMROWY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break; case qk9: cout << "ROZPOZNANO NAWIAS LEWY OKRAGLY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qk10: cout << "ROZPOZNANO NAWIAS PRAWY OKRAGLY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break; case qk11: cout << "ROZPOZNANO NAWIAS LEWY KWADRATOWY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qk12: cout << "ROZPOZNANO NAWIAS PRAWY KWADRATOWY -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break; case qk13: cout << "ROZPOZNANO SREDNIK -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break; case qerr: cout << "ROZPOZNANO BLAD!!!!! -> "; cout << bufor << endl; itr--; bufor = ""; akt_stan = q0; break;
case qer: cout << "ROZPOZNANO BLAD!!!!! -> "; cout << bufor << endl; bufor = ""; akt_stan = q0; break; }
} while (itr!=tab.end());
system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zmieniony: sobota, 21 lutego 2009 22:08 |
|
Elektronika -
Aplikacje - układy scalone
|
|
Wpisany przez Administrator
|
|
czwartek, 23 października 2008 15:20 |
|
Zbiór materiałów dla układu scalonego ICL7107 : Do pobrania : Najsłynniejsze aplikacje - ICL7106, ICL7107 część I Rozmiar pliku : 0.46 MBProducent : Elektronika dla Wszystkich 5/97
Do pobrania : Najsłynniejsze aplikacje - ICL7106, ICL7107 część II Rozmiar pliku : 0.65 MBProducent : Elektronika dla Wszystkich 6/97Do pobrania : Datasheet ICL7106, ICL7107, ICL7107S Rozmiar pliku : 0.53 MBProducent : Intersil Do pobrania : Moduł miliwoltomierza do zasilaczy AVT-2270 Rozmiar pliku : 0.23 MBProducent : Elektronika dla Wszystkich 03/1998 Do pobrania : Jednozakresowy woltomierz - amperomierz 3 i 1/2 cyfry Rozmiar pliku : 0.23 MBProducent : Praktyczny Elektronik 12/1996 Schemat tworzenia dzielników napięć ( pomocne przy ustalaniu zakresu działania miernika na ICL71** ) :  |
|
Zmieniony: czwartek, 11 czerwca 2009 20:40 |
|
Programowanie -
Zadania C++
|
|
Wpisany przez Administrator
|
|
sobota, 07 czerwca 2008 16:23 |
|
Ogólnie program działa w sposób następujący : Mamy serwer i nieograniczoną liczbę klientów. Serwer wysyła do klientów dane ( czas i datę w odstępach co 5 sekund przez protokół TCP/IP ). Klient lub klienci odbierają te dane. W momencie awarii serwera – klient który pierwszy zauważy brak komunikacji z serwerem ( brak przychodzących danych ), szuka serwera i jeśli nie znajdzie sam próbuje zostać serwerem. Konfiguracja przed skompilowaniem pliku ko.cpp : Ustawiamy maskę adresów IP w zmiennej char ip[] = "192.168.1."; Ustawiamy adres startowy czwartego oktetu w adresie IP – zmienna BEGIN. Ustawiamy adres końcowy czwartego oktetu w adresie IP – zmienna END. Uruchamiamy plik ko.out. ( można nieograniczoną ilość razy – program uruchomiony jako pierwszy zostaje pierwszym serwerem, reszta klientami – jeśli serwer zabijemy ( kill PID ) - któryś z klientów będzie chciał nim zostać. ) 1.) Po uruchomieniu program początkowo szuka serwera ( skanuje po kolei adresy IP z maski, zaczynając od adresu BEGIN z czwartego oktetu i kończąc na END ). Skanowanie zaimplementowane jest w pętli for i sprawdza czy wykonanie instrukcji : connect(sockfd1, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)); zwraca błąd czy nie – jeśli zwraca błąd skanowany jest kolejny adres aż do końca. 2a.) Jeśli po przeskanowaniu wszystkich adresów IP nie znajdzie serwera ( connect za każdym razem będzie zwracał błąd ) - program próbuje przejść w stan SERWERA : sockfd1 = socket(AF_INET, SOCK_STREAM, 0) bind(sockfd1, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) listen(sockfd1, BACKLOG) , nasłuchując za potencjalnym klientem. Po uzyskaniu połączenia z klientem tworzy proces-dziecko który wysyła do klienta w odstępach 5 sekundowych aktualny czas i datę : |
|
Zmieniony: sobota, 06 września 2008 15:14 |
|
Więcej…
|
|
Programowanie -
Zadania C++
|
|
Wpisany przez Administrator
|
|
piątek, 16 maja 2008 21:30 |
|
Rozwiązanie zadania z serwerem ( odpowiadaczem ) który pobiera dane z kolejki wysłane przez klienta i wynik przesyła z powrotem do tej samej kolejki aby mógł go pobrać klient. Ważniejsze elementy programu są opisane w plikach, tutaj chciałbym przedstawić ogólny opis. Uruchamiamy jeden plik serwer.cpp i dowolną ilość plików klient.cpp ( ilość ta jest ograniczona stałą #define max_klient w programie ). W pierwszej kolejności serwer tworzy kolejkę w której trzyma kolejne numery identyfikatorów. Każdy klient pobiera z kolejki jeden ( następny, indywidualny ) identyfikator aż do wyczerpania puli ( max_klient ) oraz zapisuje go do pliku. W ten sposób nie będzie możliwosci duplikowania identyfikatorów. Klient przy uruchomieniu tworzy dwa procesy, jeden jest odpowiedzialny tylko za wysyłkę zapytań do właściwej kolejki ( jako msgsnd mtype ma ustawioną na stałe liczbę 100 - w ten sposób serwer wie że to zapytanie jest do niego ), drugi proces odbiera wyniki z kolejki i to tylko takie które mają mtype= identyfikator + 1000. Zmienna id ( identyfikator ) jest przesyłana w strukturze przez pierwszy proces, stąd serwer wie jaki mtype przypisać przy wiadomości wychodzącej ( wyniku ). Kolejny uruchomiony klient znów pobiera z pierwszej kolejki indywidualny id, wysyła zapytanie ( msgsnd mtype = 100 ) do kolejki, serwer odbiera dane do obliczeń oraz id klienta przysyłającego ( zawarte w strukturze ), następnie oblicza wynik i przesyła z powrotem do kolejki ( jako mtype = 1000 + id ), drugi proces klienta odbiera tylko takie wiadomości których mtype = 1000 + id, czyli właśnie wyniki wysłane przez serwer do kolejki. Pierwszy proces klienta znów wysyła zapytanie do kolejki dla serwera itd. ( pętla nieskończona while ). Program do skompilowania pod którymś z systemów Unix komendą ( wcześniej skopiuj kod i zapisz go w pliku pod nazwą nazwa_programu.cpp ) : g++ nazwa_programu.cpp -o nazwa_programu.out Kompilowany i testowany pod Suse Linux 10.3. Do pobrania : serwer_klient.zip Autor : www.neTsl.net Rozmiar pliku : 13.5 KB |
|
Zmieniony: sobota, 06 września 2008 15:17 |
|
|