|
TwojePC.pl © 2001 - 2026
|
 |
A R C H I W A L N A W I A D O M O Ś Ć |
 |
| |
|
Algorytm wyznacznika macierz n X n , Piapia 22/05/03 14:04 Posiada ktos gotowy algorytm w obojetnie jakim jezyku programowania???
Pozdrawiam"Człowiek się starzeje bo się
nie bawi" B&W
gg40609 - jaka metoda obliczania Cie interesuje? Jesli iteracyjna, to algorytm jest prosty. , bwana 22/05/03 14:16
Kanoniczna metoda (rekurencyjna) moze byc trudna w programowaniu (sama istota rekursji + przepelnienia stosu), natomiast stosunkowo latwo zaprogramowac metode iteracyjna (Eulera?):
do macierzy obliczanej z prawej strony dostawiasz macierz jedynkowa. przeksztalcasz wiersze uzyskanej macierzy korzystajac z odpowiednich twierdzen(*) tak, by po prawej stronie uzyskac macierz trojkatna. iloczyn elementow na przekatnej "prawej" macierzy jest poszukiwanym wyznacznikiem macierzy.
(*) twierdzenia mowiace o tym, ze do dowolnego wiersza/kolumny macierzy mozna dodac dowolny iloczyn/iloraz innego wiersza/kolumny tej macierzy.
taki oto algorytm jest juz calkiem prosty w implementacji.
PS. Rekurencyjny tez nie jest trudny pod warunkiem, ze rozumie sie rekurencje. A zeby zrozumiec rekurencje trzeba najpierw zrozumiec rekurencje;-D"you don't need your smile when I cut
your throat" - omg , ViS 22/05/03 14:29
j.w. :)I will not buy this record - it is
scratched. - oh my god? , bwana 22/05/03 14:30
;-D"you don't need your smile when I cut
your throat" - nie... , PrzeM 22/05/03 14:35
...Ona Ma Głowę...:)))))))PrzeM
above the mind - powered by meat... - z LO to pamietam , bwana 22/05/03 15:10
jak widac moja glowa to smietnik przechowujacy roznorakie, najczesciej nieprzydatnie informacje, ktore wyskakuja w najmniej oczekiwanym momencie jak diabel z pudelka;-D"you don't need your smile when I cut
your throat"
- no debeściarski sposób wytłumaczenia rekurencji! , Massai 22/05/03 22:37
;-)))))) bwana, chylę czoła!...Bronchos znaczy Nieujarzmieni...
Nigdy mnie nie złapiecie ;-))
- C++ , Norton 22/05/03 14:44
* 1 */ #include <stdio.h>
/* 2 */ #include <stdlib.h>
/* 3 */ // stdio.h - procedury wejscia wyjscia
/* 4 */ // stdlib.h - alokacja pamieci
/* 5 */
/* 6 */ typedef struct
/* 7 */ {
/* 8 */ int n; // Wymiar macierzy
/* 9 */ long **m; // Tablica tablic (wierszy)
/* 10 */ } matrix; // Definicja nowego typu matrix (struktury)
/* 11 */
/* 12 */
/* 13 */ // Funkcja odczytujaca dwie macierze kwadratowe a i b.
/* 14 */ // Wczesniej odczytywana jest informacja o wymiarze macierzy
/* 15 */ // i alokowana jest stosowna pamiec.
/* 16 */ void readmatrix (matrix * a, matrix * b)
/* 17 */ {
/* 18 */ int i, j;
/* 19 */ scanf ("%d", &(a->n));
/* 20 */ b->n = a->n;
/* 21 */ // Alokacja pamieci na a;
/* 22 */ a->m = (long **) malloc ((a->n) * sizeof (long *));
/* 23 */ for (i = 0; i < a->n; i++)
/* 24 */ {
/* 25 */ a->m[i] = (long *) malloc ((a->n) * sizeof (long *));
/* 26 */ }
/* 27 */ // Alokacja pamieci na b;
/* 28 */ b->m = (long **) malloc ((b->n) * sizeof (long *));
/* 29 */ for (i = 0; i < b->n; i++)
/* 30 */ {
/* 31 */ b->m[i] = (long *) malloc ((b->n) * sizeof (long *));
/* 32 */ }
/* 33 */ for (i = 0; i < a->n; i++)
/* 34 */ for (j = 0; j < a->n; j++)
/* 35 */ scanf ("%ld", &(a->m[i][j])); // Odczytywanie wspolrzednych a
/* 36 */ for (i = 0; i < b->n; i++)
/* 37 */ for (j = 0; j < b->n; j++) // Odczytywanie wspolrzednych b
/* 38 */ scanf ("%ld", &(b->m[i][j]));
/* 39 */ }
/* 40 */
/* 41 */ // Funckja mnozaca macierze a i b
/* 42 */ // zwracana jest macierz bedaca iloczynem
/* 43 */ matrix mulmatrix (const matrix * a, const matrix * b)
/* 44 */ {
/* 45 */ matrix w;
/* 46 */ int x, y, i;
/* 47 */ long z;
/* 48 */ w.n = a->n;
/* 49 */ w.m = (long **) malloc ((w.n) * sizeof (long *));
/* 50 */ for (i = 0; i < w.n; i++)
/* 51 */ {
/* 52 */ w.m[i] = (long *) malloc ((w.n) * sizeof (long *));
/* 53 */ }
/* 54 */
/* 55 */ for (x = 0; x < w.n; x++)
/* 56 */ for (y = 0; y < w.n; y++)
/* 57 */ {
/* 58 */ z = 0;
/* 59 */ for (i = 0; i < w.n; i++)
/* 60 */ z = z + a->m[x][i] * b->m[i][y];
/* 61 */ w.m[x][y] = z;
/* 62 */ }
/* 63 */ return w;
/* 64 */ }
/* 65 */
/* 66 */ // Prosta funckja wyswietlajaca macierz na ekranie
/* 67 */ void wyswietl (matrix * m)
/* 68 */ {
/* 69 */ int i, j;
/* 70 */ for (i = 0; i < m->n; i++)
/* 71 */ {
/* 72 */ for (j = 0; j < m->n; j++)
/* 73 */ printf ("%8ld", m->m[i][j]);
/* 74 */ printf ("\n");
/* 75 */ }
/* 76 */ printf ("\n\n");
/* 77 */ }
/* 78 */
/* 79 */ matrix a, b, w;
/* 80 */
/* 81 */ // Macierze zczytywane sa ze standartowego wejscia
/* 82 */ int main (void)
/* 83 */ {
/* 84 */ readmatrix (&a, &b);
/* 85 */ printf ("Macierz A:\n\n");
/* 86 */ wyswietl (&a);
/* 87 */ printf ("Macierz B:\n\n");
/* 88 */ wyswietl (&b);
/* 89 */ w = mulmatrix (&a, &b);
/* 90 */ printf ("Macierz A*B:\n\n");
/* 91 */ wyswietl (&w);
/* 92 */ return 0;
/* 93 */ }
--------------------------------------------------------------------------------
Jak to działa?
Aby zrozumieć istotę problemu, trzeba wiedzieć na czym polega mnożenie macierzy. Dla uproszczenia załóżmy, że mamy do czynienia z macierzami kwadratowymi (inne też czasem daje się mnożyć, jednak muszą spełaniać pewne dodatkowe założenia).
A zatem wynikiem iloczynu dwóch macierzy A i B wymiaru n x n jest nowa macierz C wymiaru n x n, taka, że:
C[i,j] = A[i,] * B[,j]
Gdzie C[i,j] oznacza wartość w i-tym wierszu i j-tej kolumnie, zaś A[i,] oznacza i-ty wiersz macierzy A, B[,j] oznacza j-tą kolumnę macierzy B. Znak * oznacza tu iloczyn skalarny wektorów jakimi są wiersze i kolumny macierzy.
UWAGA - Jak łatwo zauwarzyć iloczyn macierzy NIE jest przemienny !!!
Gdy posiadamy już niezbędne podstawy matematyczne, możemy przystąpić do pisania programu:
W linii 6 definiujemy nowy typ danych. Jest to strukura (matrix czyli po angielsku macierz), której polami jest "n" - rozmiar macierzy, oraz dynamicznie alokowana "tablica tablic elementów long", czyli istotnie nasza macierz. W języku C nie ma tablic wielowymiarowych!!! Uwaga pascalowcy: zapis
T[12,3]
Jest w C jak najbardziej poprawny, ale wcale nie oznacza wartości tablicy dwuwymiarowej!!! Operator przecinka zwraca w C określa kolejność obliczenia wyrażeń i zwraca wartość ostatniego obliczonego, zatem powyższy przykład będzie równoważny:
T[3]
Zupełnie inne znaczenie będzie miał zapis:
T[12][3]
Który oznacza wartość "tablicy tablic" czyli nieformalnie talicy dwuwymiarowej.
Do pól struktury odwołujemy się podobnie jak w pascalowym rekordzie czyli struktura.pole . Inaczej ma się sytuacja gdy chcemy odwołać się do pola struktury wskazywanej przez wskaźnik. Operator kropki tu nie zadziała i musimy stosować strzałkę -> . Składnia jest zatem taka : wskaźnik_na_strukure->pole .
Po tych uwagach prościej będzie zrozumieć program.
Funkcja readmatrix (linia 16) pobiera jako argumenty dwa wskaźniki na matrix, w locie alokuje pamięć i odczytuje macierze ze standartowego wejścia. W pascalu przekazalibyśmy po prostu zmienne z atrubutem var. W C nie ma tak łatwo, trzeba przekazać wskaźnik jeśli chce się cokolwiek na zewnątrz modyfikować.
Funkcja mulmatrix (linia 43) wykonuje całą czarną robotę związaną z mnożeniem macierzy. Jako argumenty przekazujemy wskaźniki (i choć nic nie modyfikujemy, to tak jest trochę szybciej). Tworzymy nową macierz "w", do której zapisujemy wynik iloczynu, a następnie zwracamy ją. Uwaga pascalowcy ! Spróbujcie zwrócić rekord lub tablicę jako wynik funkcjii !!!
Funkcja wyswietl (linia 67) chyba nie wymaga szczególnego komentarza.
W funkcji main aby uzyskać adres obiektu używamy operatora & (np linia 84). Operator ten zwraca wskaźnik na zmienną przed którą został użyty, a więc dokładnie to czego potrzebujemy!
Przykładowe wejście do programu to : 3
1 2 3
4 5 6
7 8 9
3 2 1
6 5 3
9 8 7
Na wyjsciu powinniśmy otrzymać:
Macierz A:
1 2 3
4 5 6
7 8 9
Macierz B:
3 2 1
6 5 4
9 8 7
Macierz A*B:
42 36 30
96 81 66
150 126 102Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - Copyright © 2001 Filip Piękniewski. , Norton 22/05/03 14:45
123Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - to wszystko prawda, tylko koledze chodzilo o wyznacznik macierzy, a nie o ich mnozenie:) , bwana 22/05/03 14:47
no, chyba ze mam cos z oczmi;-D"you don't need your smile when I cut
your throat" - Oki , Norton 22/05/03 14:52
#include <iostream.h>
#include <math.h>
#include <conio.h>
double gaus1(double a /*tym zarujemy kolumne*/,double b /* co zerujemy*/)
{
return ((-1)*(b/a));
}//koniec funkcji gaus1
void main()
{
double wynik=1,bufor;
double t[10][10];
long wymiar=0;
cout<<"Podaj wymiar macierzy A - ";
cin>>wymiar;
cout<<endl;
for(long jx=0;jx<wymiar;jx++)
for(long j2x=0;j2x<wymiar;j2x++)
{
cout<<"a"<<(jx+1)<<","<<(j2x+1)<<" = ";
cin>> t[jx][j2x];
cout<<endl;
}
double k2,znak=1;
for(long i=0;i<wymiar;i++)//wiersze
{
if (i<=wymiar)
for(long j=i+1;j<wymiar;j++)//wiersze
for(long j2=wymiar-1;j2>i-1;j2--)//kolumny
{
k2=i; //to po to aby wiedziec ile kolumn zostalo
while(t[i][i]==0) //zamiana kolumn ida -> strone
{
if(k2>wymiar)
{
cout <<"Det A = 0"<<endl;
while(!kbhit());
return;
}
znak*=-1;
for (long k=0;k<wymiar;k++)
{
bufor=t[k][i];
t[k][i]=t[k][i+1];
t[k][i+1]=bufor;
}
k2++;
}//koniec while
t[j][j2]=t[j][j2]+gaus1(t[i][i],t[j][i])*t[i][j2];
}
wynik*=t[i][i];
}//koniec for z i
cout <<"Det A = "<<wynik*znak<<endl;
while(!kbhit());
}Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - i jeszcze , Norton 22/05/03 14:53
// *LU decomposition & determinant at O(n^3)* by Krzysztof Bosak, 1998.12.05
#include <iostream.h>
#include <assert.h>
#include <memory.h>
#define OUTPUT
#define TRANSTABSEMI(x, y) (tab[(x)+indexy[(y)]])
// semi ==> possinle rows swapped, no columns swapping
#define TRANSTABFULL(x, y) (tab[indexx[(x)]+indexy[(y)]])
// full ==> possible rows and columns swapping
void testout(const int size, const double*const tab, const int*const indexy, const int*const indexx)
{
for(int x, y=0; y<size; y++)
{
for(x=0; x<size; x++)
cout<<TRANSTABFULL(x, y)<<'\t';
cout<<endl;
}
}
void paluout(const int size, const double*const src, const double*const tab, const int*const indexx, const int*const indexy)
{
int x, y;
cout.precision(4);
cout<<"--- swapped A matrix == right side of equation ---\n";
for(y=0; y<size; y++)
{
for(x=0; x<size; x++)
cout<<src[indexx[x]+indexy[y]]<<'\t';
if(y<size-1)
cout<<endl;
}
cout<<"P1==[";
for(x=0; x<size; x++)
cout<<(indexy[x]/size+1);
cout<<"]\tP2==[";
for(x=0; x<size; x++)
cout<<(indexx[x]+1);
cout<<"]\n";
cout<<"--- P1*A*P2 == L*U - result ----------------------\n";
for(y=0; y<size; y++) //P1
{
for(x=0; x<size; x++)
{
if(x*size==indexy[y])
cout<<"1\t";
else
cout<<"0\t";
}
cout<<endl;
}
cout<<"*\n"; //A
for(y=0; y<size; y++)
{
for(x=0; x<size; x++)
cout<<src[x+y*size]<<'\t';
cout<<endl;
}
cout<<"*\n";
for(y=0; y<size; y++) //P2
{
for(x=0; x<size; x++)
{
if(y==indexx[x])
cout<<"1\t";
else
cout<<"0\t";
}
cout<<endl;
}
cout<<"=\n";
for(y=0; y<size; y++)
{
for(x=0; x<size; x++)
{
if(x>y)
cout<<"0\t";
if(x==y)
cout<<"1\t";
if(x<y)
cout<<tab[indexx[x]+indexy[y]]<<'\t';
}
cout<<endl;
}
cout<<"*\n";
for(y=0; y<size; y++)
{
for(x=0; x<size; x++)
{
if(x<y)
cout<<"0\t";
if(x>=y)
cout<<tab[indexx[x]+indexy[y]]<<'\t';
}
cout<<endl;
}
}
template<class typea, class typeb>
void swap(typea &aa, typeb &bb)
{
typea temp=aa;
aa=bb;
bb=temp;
}
double DET(const int size, const double*const src)
{
if(size==1)
return *src;
const int max=size*size;
bool sign=false;
double*const tab=new double[max];
memcpy(tab, src, max*sizeof(double));
int*const indexy=new int[size<<1], *const indexx=indexy+size;
int x, mul;
for(x=0, mul=0; x<size; x++, mul+=size)
{
indexx[x]=x;
indexy[x]=mul;
}
for(x=0; x<=size-2; x++)
{
////////////////Axial factor semi-selection below
double maxabs=0;
int ybest=0xFFFF;
for(int ytest=x; ytest<size; ytest++)
{
double value=TRANSTABSEMI(x, ytest);
if(value<0)
value=-value;
if(value>maxabs)
{
maxabs=value;
ybest=ytest;
}
}
if(maxabs==0.0)
return 0;
if(x!=ybest)
swap(indexy[x], indexy[ybest]);
if(int(x)!=ybest)
sign=!sign;
//////////////comment this region to avoid axial factor semi-selection
for(int y=x+1; y<size; y++)
{
TRANSTABSEMI(x, y)/=TRANSTABSEMI(x, x);
for(int xx=x+1; xx<size; xx++)
TRANSTABSEMI(xx, y)-=TRANSTABSEMI(x, y)*TRANSTABSEMI(xx, x);
}
}
double result=TRANSTABSEMI(0, 0);
for(x=1; x<size; x++)
result*=TRANSTABSEMI(x, x);
if(sign)
return -result;
return result;
}
double* PALU(const int size, const double*const src, const double*const vec=NULL)
{
const int max=size*size;
double*const tab=new double[max];
memcpy(tab, src, max*sizeof(double));
int*const indexy=new int[size<<1], *const indexx=indexy+size;
int x, mul;
for(x=0, mul=0; x<size; x++, mul+=size)
{
indexx[x]=x;
indexy[x]=mul;
}
for(x=0; x<=size-2; x++)
{
////////////////Axial factor full selection below
/*int xbest=0xFFFF, ybest=0xFFFF;
double maxabs=0;
for(int ytest=x; ytest<size; ytest++)
{
for(int xtest=x; xtest<size; xtest++)
{
double value=TRANSTABFULL(xtest, ytest);
if(value<0)
value=-value;
if(value>maxabs)
{
maxabs=value;
xbest=xtest;
ybest=ytest;
}
}
}
assert(maxabs>0);
if(x!=ybest)
swap(indexy[x], indexy[ybest]);//row swapping (~P1)
if(x!=xbest)
swap(indexx[x], indexx[xbest]);//column swapping (~P2)*/
//////////////comment this region to avoid axial factor full selection
for(int y=x+1; y<size; y++)
{
TRANSTABFULL(x, y)/=TRANSTABFULL(x, x);
for(int xx=x+1; xx<size; xx++)
TRANSTABFULL(xx, y)-=TRANSTABFULL(x, y)*TRANSTABFULL(xx, x);
}
//testout(size, tab, indexy, indexx);
//cout<<endl;
}
#ifdef OUTPUT
paluout(size, src, tab, indexx, indexy);
#endif
if(vec)
{
double *semi=new double[size<<1], *result=semi+size;
int x, y;
for(y=0; y<size; y++)
{
semi[y]=vec[y];//[indexy[y]/size];
for(x=0; x<y; x++)
semi[y]-=TRANSTABFULL(x, y)*semi[x];
}
cout<<"Vector y: Ly=b (y=Ux)\n ";
int i;
for(i=0; i<size; i++)
cout<<semi[i]<<endl;
/*for(y=size-1; y>=0; y--)
{
result[y]=semi[y];
for(x=y+1; x<size; x++)
result[y]-=TRANSTABFULL(x, y)*result[x];
result[y]/=TRANSTABFULL(y, y);
}
cout<<"Vector x: Ux=y (y=Ux)\n ";
for(i=0; i<size; i++)
cout<<result[i]<<endl;*/
}
return tab;
}
int main()
{
const double tab[]={1, 1, 1, 2, 5, 6, 7 ,8, 9}, vec[]={4, 2, 3};
const int size=3;
PALU(size, tab, vec);
//cout<<"===========\n|A| = "<<DET(size, tab)<<endl;
return 0;
}Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - I ostatnie , Norton 22/05/03 14:54
// *Wyznacznik - w/g definicji permutacyjnej*, Krzysztof Bosak 02.11.1998
#include <iostream.h>
#include <string.h>
class det
{
char *tab, len;
double *matrix, result;
bool par;
void per(int count)
{
if(count<len-1)
{
per(count+1);
char temp;
for(int xcount=count+1; xcount<len; xcount++)
{
temp=tab[count];
tab[count]=tab[xcount];
tab[xcount]=temp;
par=!par;
per(count+1);
tab[xcount]=tab[count];
tab[count]=temp;
par=!par;
}
}
else
{
double mul=matrix[len**tab];
//cout<<"a[0,"<<long(tab[0])<<"]*";*/
for(int z=1; z<len; z++)
{
//cout<<"a["<< z <<","<<long(tab[z])<<"]*";
mul*=matrix[z+len*tab[z]];
}
if(par)
result+=mul;
else
result-=mul;
/* cout<<"="<<mul<<" "<<"\t"<<long(par)<<"\t";
for(int i=0; i<len; i++)
cout<<long(tab[i]);
if(par)
cout<<" P\n";
else
cout<<endl;*/
}
}
public:
det(char l, double *mat): len(l), matrix(mat), result(0), par(true)
{
tab=new char[len];
for(char i=0; i<len; i++)
tab[i]=i;
per(0);
cout<<result;
}
~det()
{
delete []tab;
}
};
main()
{
double mat[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 132, 1133, 114, 115, 119};//4x4 ==> 489600
det p(2, mat);
return 0;
}Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - no, wlasnie, nie Eulera tylko Gaussa sie ta metoda nazywa:-D , bwana 22/05/03 15:09
skleroza...;-D"you don't need your smile when I cut
your throat"
- wymiękam , RaPToRR 22/05/03 14:55
raaatunku leże i zdycham NIE NA WIDZE MATMY!!!
ps. a ide na klase o profilu mat-fiz ;Dhttp://www.krzysztofwasko.pl - heheh, dobrze ze nie do klasy o profilu humanistycznym;-D , bwana 22/05/03 15:11
bez urazy;-D"you don't need your smile when I cut
your throat" - no coż , RaPToRR 22/05/03 19:21
bycie informatykiem wymaga poświęceń ;)http://www.krzysztofwasko.pl - ekhm , ViS 23/05/03 08:45
ja jestem po profilu spolecznym :)I will not buy this record - it is
scratched.
- norton... , Tummi 22/05/03 15:42
...jak tak rzucasz zrodlami, to moze cos dla mnie znajdziesz? Potrzebuje progz do obslugi myszy za pomoca int13h - najlepiej, gdyby wszystkie dostepne funkcje w jakis sposob byly oprogramowane... narazie mam tyle:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
unsigned int wlaczmysz (void) {
unsigned int x,y;
asm mov ax, 0
asm int 0x033
asm mov x, ax
asm mov y, bx
if (y == 2)
cout << "dwa przyciski\n";
if (y == 3)
cout << "trzy przyciski\n";
return(x);
}
void getdata (void) {
unsigned int status;
unsigned char type, inter, mav, miv;
asm mov ax, 0x0024
asm int 0x033
asm mov status, ax
asm mov type, ch
asm mov inter, cl
asm mov mav, bh
asm mov miv, bl
if (status == 0xffff)
cout << "ERROR";
else {
switch (type) {
case 1:
cout << "bus mouse\n";
break;
case 2:
cout << "serial mouse\n";
break;
case 3:
cout << "inport mouse\n";
break;
case 4:
cout << "ps/2 mouse \n";
break;
case 5:
cout << "hp mouse\n";
break;
}
if (inter == 0)
cout << "irq: ps/2 \n";
else
cout << "irq: " << inter;
}
}
void pokaz (void) {
asm mov ax, 0x01
asm int 0x033
}
void ukryj(void) {
asm mov ax, 0x02
asm int 0x033
}
void stan (int *x, int *y, int *lb, int *mb, int *rb) {
unsigned int stan, xx, yy;
asm {
mov ax, 0x03
int 0x033
mov yy, dx
mov xx, cx
mov stan, bx
}
*x=xx;
*y=yy;
*x /=8;
*y /=8;
*lb = (stan & 1);
*mb = (stan & 4);
*rb = (stan & 2);
}
int xpos (void) {
int x, y, lb, mb, rb;
stan (&x, &y, &lb, &mb, &rb);
return(x);
}
int ypos (void) {
int x, y, lb, mb, rb;
stan (&x, &y, &lb, &mb, &rb);
return(y);
}
int lb (void) {
int x, y, lb, mb, rb;
stan (&x, &y, &lb, &mb, &rb);
if (lb) lb=1;
return(lb);
}
int rb (void) {
int x, y, lb, mb, rb;
stan (&x, &y, &lb, &mb, &rb);
if (rb) rb=1;
return(rb);
}
int mb (void) {
int x, y, lb, mb, rb;
stan (&x, &y, &lb, &mb, &rb);
if (mb) mb=1;
return(mb);
}
void main (void) {
clrscr();
wlaczmysz();
pokaz();
getdata();
while (!kbhit()) {
gotoxy (55, 20);
cout << "\nKolumna:\t\t"<< xpos() << "\nWiersz:\t\t\t" << ypos() << "\nLewy przycisk:\t\t " << lb() << "\nSrodkowy przycisk:\t " << mb() << "\nPrawy przycisk:\t\t " << rb();
}
ukryj();
}
T.www.skocz.pl/uptime :D - Ups, ja tylko googluję. , Norton 22/05/03 15:56
Na początek linki:
http://venus.wsb-nlu.edu.pl/...old/biblioteki.html
http://www.binboy.org/index.php?show=p13h.htm
http://www.pckurier.pl/archiwum/art0.asp?ID=464
I programik
/*--------------------------------------------------------
plik: MYSZ.CPP
Przykładowe zastosowanie klasy mysz.
Autor:
Krzysztof Polito
Nowa Sól
--------------------------------------------------------*/
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <mysz.h>
void main(void)
{
mysz myszka;
stan_myszy stan;
if (!myszka) {
cout < "Błąd podczas inicjalizacji !" < endl;
exit(1);
}
clrscr();
while (!kbhit()) {
if (myszka.przycisk(1)) {
stan = myszka.stan();
myszka.ukryj_kursor();
cout < stan.x < ", " < stan.y < endl;
myszka.pokaz_kursor();
}
}
getch(); //wyczyszczenie bufora klawiatury
//a teraz to samo w trybie 13h - działa poprawnie tylko na
//karcie VGA lub MCGA
unsigned char tryb;
asm {
mov ah, 0x0F
int 0x10;
mov tryb, al //przechowanie aktualnego trybu wideo
mov ax, 0x0013
int 0x10
}
myszka.pokaz_kursor();
while (!kbhit()) {
if (myszka.przycisk(1)) {
stan = myszka.stan();
myszka.ukryj_kursor();
cout < stan.x < ", " < stan.y < endl;
myszka.pokaz_kursor();
}
}
asm {
mov ah, 0
mov al, tryb
int 0x10
}
getch(); //wyczyszczenie bufora klawiatury
};Zmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - no widze, ze materialy cwiczeniowe w szkolach sie nie zmieniaja;-D , bwana 22/05/03 16:09
gdzie, ach gdzie moje stare laborki z LO i studiow. opdowiedz? polecialy w kosmos;-D"you don't need your smile when I cut
your throat"
|
|
|
|
 |
All rights reserved ® Copyright and Design 2001-2026, TwojePC.PL |
 |
|
|
|