Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // general_project_informatic.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- class rmatrix
- {
- private:
- struct list
- {
- int x,y,val;
- list *next;
- };
- list *hd;
- public:
- int X,Y;
- ~rmatrix()
- {
- while(hd->next!=NULL)
- {
- list *p=hd;
- hd=hd->next;
- delete p;
- }
- }
- rmatrix()
- {
- list *hd=new list;
- hd->next=NULL;
- hd->val=0;
- hd->x=0;
- hd->y=0;
- }
- rmatrix(char *str)
- {
- int i=0,pot=0,sz=1;
- list *p;
- p=new list;
- hd=p;
- //char *celem=(char*)malloc(sz*sizeof(char*));
- char* celem=NULL;
- celem=(char*)realloc(celem,sz);
- while(str[i]==' ') i++;
- do {
- while(str[i]!=' ' && str[i]!='\n' && str[i]!='\0')
- {
- celem[sz-1]=str[i];
- i++;
- celem=(char*)realloc(celem,sz+1);
- sz++;
- }
- celem[sz-1]='\0';
- pot++;
- //celem-class
- switch(pot)
- {
- case 1: p->x=TOI(celem); if(X<(p->x)) X=p->x; break;
- case 2: p->y=TOI(celem); if(Y<(p->y)) Y=p->y; break;
- case 3: p->val=TOI(celem); break;
- default: printf("\nError!!!!"); return ;
- }
- sz=1;
- celem=(char*)realloc(celem,sz);
- i++;
- if(pot==3)
- {
- if(str[i]!=' ' && str[i]!='\n' && str[i]!='\0')
- {
- p->next=new list;
- p=p->next;
- }
- else p->next=NULL;
- pot=0;
- }
- }
- while(str[i]!=' ' && str[i]!='\n' && str[i]!='\0');
- }
- rmatrix(rmatrix &T)
- {
- list *p1, *p2;
- hd=new list;
- p2=hd;
- for(p1=T.hd; p1->next!=NULL; p1=p1->next)
- {
- p2->x=p1->x;
- p2->y=p1->y;
- p2->val=p1->val;
- p2->next=new list;
- p2=p2->next;
- }
- p2->x=p1->x;
- p2->y=p1->y;
- p2->val=p1->val;
- p2->next=NULL;
- }
- int TOI(char *line)
- {
- int a=0,ten=1,i=0;
- for(int j =strlen(line)-1; j>=0; j--)
- {
- i++;
- if(i==1);
- else for(int i=0; i<strlen(line)-1; i++) ten*=10;
- a+=(line[j]-'0')*ten;
- }
- return a;
- }
- int &get(int x, int y)
- {
- static int foo=0;
- list *p=hd;
- do
- {
- if(p->x==x && p->y==y)
- {
- return p->val;
- break;
- }
- p=p->next;
- }
- while(p!=NULL);
- return foo;
- }
- void classprint()
- {
- printf("\nPrinting of chose class...\n ");
- list *p;
- //printf("_______________________\n");
- //printf("/d |%d| |%d| val=|%d| //", hd->x, hd->y, hd->val);
- if(hd->next!=NULL) p=hd;
- else return;
- do
- {
- printf("\n|%d|\t|%d|\tval=|%d| ", p->x, p->y, p->val);
- p=p->next;
- }
- while(p!=NULL);
- }
- void printy()
- {
- int i,j;
- list *p;
- for(i=1; i<=X; i++)
- {
- for(j=1; j<=Y; j++)
- {
- for(p=hd; p!=NULL; p=p->next)
- {
- if(p->x==j && p->y==i)
- {
- printf("\t|%d|",get(i,j));
- goto A1;
- }
- }
- printf("\t0");
- A1:
- ;
- }
- printf("\n");
- }
- //printf("\n \t|%d|",get(X,Y));
- }
- void size()
- {
- list *p;
- for(p=hd; p->next!=NULL; p=p->next)
- {
- if(p->x>X) X=p->x;
- if(p->y>Y) Y=p->y;
- }
- }
- int f_set()
- { //1 - элемент найден
- //2 - элемент создан
- list *p;
- int k,l,v;
- printf("\nPlease, enter (x,y, val) - ");
- scanf("%d%d%d",&k,&l,&v);
- //проверка существования заданного элемента
- for(p=hd; p->next!=NULL; p=p->next)
- if(p->x==k || p->y==l) // элемент найден
- {
- p->val=v;
- return 1;
- }
- for(p=hd; p->next!= NULL; p=p->next); //перемотка на последний элемент
- // создание нового элемента
- p->next=new list;
- p=p->next;
- p->x=k;
- p->y=l;
- p->val=v;
- //переопределение размерности матрицы
- if(k>X) X=k;
- if(l>Y) Y=l;
- /*(*this).*/printy();
- }
- void f_get()
- {
- int check;
- printf("\nDo you wanna see any member?\t(1-9 ~ yes)");
- scanf("%d",&check);
- if(check>=0 && check <=9)
- {
- printf("\nType (x,y) of element - ");
- int i,j;
- scanf("%d%d",&i,&j);
- printf("\nCheck: \n\n\t|%d|",(*this).get(i,j));
- }
- }
- };
- void main()
- {
- char s[]={"5 2 55 1 1 11 1 2 12 1 3 13 2 1 21 2 2 22 2 3 23 3 1 31 3 2 32 3 3 33 "};
- //char s[]={" 1 1 11 1 2 12 2 1 21 2 2 22 "};
- //char s[]={"1 1 11 1 2 12 1 3 13 1 4 14 2 1 21 2 2 22 2 3 23 2 4 24 3 1 31 3 2 32 3 3 33 3 4 34 4 1 41 4 2 42 4 3 43 4 4 44 "};
- /*char *s=new char[80];
- printf("Please, enter string in format: (x,y,val)");
- gets(s);*/
- rmatrix ex(s);
- rmatrix ex2=ex;
- ex.printy();
- ex.size();
- printf("\n\nX= %d, Y=%d\n",ex.X,ex.Y);
- printf("\n\n\n");
- printf("\nPRESS 1- get value, 2 - set value");
- char check;
- scanf("%c",&check);
- switch(check)
- {
- case '1': ex.f_get(); break;
- case '2': ex.f_set(); break;
- default: printf("\nDefault case ");
- }
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement