Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Jonasz Makulak
- #include <stdlib.h>
- #include <stdio.h>
- void DodajWiersz(int **Tab, int *Rozm, int Miejsce) {
- int i, DlugoscWiersza;
- for (i = *Rozm - 1; i >= Miejsce; i--) {
- int Ile = **(Tab + i);
- *(Tab + i + 1) = (int*)realloc(*(Tab + i), (**(Tab + i) + 1) * sizeof(int));
- }
- scanf("%i", &DlugoscWiersza);
- *(Tab + Miejsce) = (int*)malloc((DlugoscWiersza+1) * sizeof(int));
- **(Tab + Miejsce) = DlugoscWiersza;
- for (i = 1; i <= DlugoscWiersza; i++) {
- scanf("%i", (*(Tab + Miejsce) + i));
- }
- *Rozm += 1;
- }
- void DodajWierszZJednymElementem(int **Tab, int *Rozm, int Miejsce) {
- int i, j;
- for (i = *Rozm - 1; i >= Miejsce; i--) {
- int Ile = **(Tab + i);
- for (j = 0; j <= Ile; j++) {
- *(*(Tab + i + 1) + j) = *(*(Tab + i) + j);
- }
- }
- **(Tab + Miejsce) = 1;
- scanf("%i", (*(Tab + Miejsce)+1));
- *Rozm += 1;
- }
- void UsunWiersz(int **Tab,int *Rozm, int Miejsce) {
- int i;
- for (i = Miejsce; i < *Rozm-1; i++){
- int Ile = **(Tab + i + 1);
- *(Tab + i) = (int*)realloc(*(Tab + i + 1), (**(Tab + i + 1) + 1) * sizeof(int));
- }
- *Rozm -= 1;
- }
- void DodajElementDoWiersza(int **Tab, int Miejsce, int Start, int Granica, int *IleWierszy) {
- int i = 0,j = 0, Element = 0, IleWWierszu = 0;
- for (i = Start; i < Granica && i < *IleWierszy; i++) {
- IleWWierszu = **(Tab + i);
- *(Tab + i) = (int*)realloc(*(Tab+i), (IleWWierszu + 2) * sizeof(int));
- if (Miejsce > IleWWierszu+1)
- Miejsce = IleWWierszu+1;
- else if (Miejsce <= 0)
- Miejsce = 1;
- **(Tab + i) += 1;
- for (j = IleWWierszu; j > Miejsce-1; j--)
- *(*(Tab + i) + j + 1) = *(*(Tab + i) + j);
- scanf("%i", &Element);
- *(*(Tab + i) + Miejsce) = Element;
- }
- while (i < Granica) {
- DodajWierszZJednymElementem(Tab, IleWierszy, *IleWierszy);
- i += 1;
- }
- }
- void WyswietlTablice(int **Tab, int Rozm) {
- int i=0,j=0;
- for (i = 0; i < Rozm; i++) {
- for (j = 1; j <= **(Tab + i); j++)
- printf("%i ", *(*(Tab + i) + j));
- printf("\n");
- }
- }
- void ZamienWiersze(int **Tab, int n1, int n2) {
- int rozmiar = (**(Tab + n1))+1;
- int rozmiar2 = (**(Tab + n2)) + 1;
- int i;
- int *Temp = (int*)malloc(rozmiar * sizeof(int));
- for (i = 0; i < rozmiar; i++)
- *(Temp + i) = *(*(Tab + n1) + i);
- *(Tab + n1) = (int*)malloc(rozmiar2 * sizeof(int));
- for (i = 0; i < rozmiar2; i++)
- *(*(Tab + n1) + i) = *(*(Tab + n2) + i);
- *(Tab + n2) = (int*)malloc(rozmiar * sizeof(int));
- for (i = 0; i < rozmiar; i++)
- *(*(Tab + n2) + i) = *(Temp + i);
- free(Temp);
- }
- void ZamienKolumny(int **Tab, int m1, int m2, int IleWierszy) {
- int i, Temp;
- for (i = 0; i < IleWierszy; i++) {
- if (**(Tab + i) > m1 && **(Tab + i) > m2) {
- Temp = *(*(Tab + i) + m1+1);
- *(*(Tab + i) + m1+1) = *(*(Tab + i) + m2+1);
- *(*(Tab + i) + m2+1) = Temp;
- }
- }
- }
- void UsunPierwszaKolumne(int **Tab, int *IleWierszy) {
- int i,j;
- for (i = 0; i < *IleWierszy; i++) {
- if (**(Tab + i) > 1) {
- **(Tab + i) -= 1;
- for (j = 1; j <= **(Tab + i); j++)
- *(*(Tab + i) + j) = *(*(Tab + i) + j + 1);
- }
- else {
- UsunWiersz(Tab, IleWierszy, i);
- i--;
- }
- }
- }
- void UsunOstatniaKolumne(int **Tab, int *IleWierszy) {
- int i, j;
- for (i = 0; i < *IleWierszy; i++) {
- if (**(Tab + i) >= 2) {
- **(Tab + i) -= 1;
- *(Tab + i) = (int*)realloc(*(Tab + i), (**(Tab + i) + 1)*sizeof(int));
- }
- else {
- UsunWiersz(Tab, IleWierszy, i);
- i--;
- }
- }
- }
- void UsunDowolnaKolumne(int **Tab, int miejsce, int *IleWierszy) {
- int i, j;
- for (i = 0; i < *IleWierszy; i++) {
- if (**(Tab + i) > miejsce + 1) {
- **(Tab + i) -= 1;
- for (j = miejsce + 1; j <= **(Tab + i); j++)
- *(*(Tab + i) + j) = *(*(Tab + i) + j + 1);
- }
- else {
- UsunWiersz(Tab, IleWierszy, i);
- i--;
- }
- }
- }
- int main() {
- int MaxIloscWierszy = 100;
- int MaxIloscKolumn = 2;
- int IloscWierszy = 0;
- int i = 0, j = 0;
- int Numer = 0;
- int Numer2 = 0;
- int Temp;
- char *input = (char*)malloc(3 * sizeof(char));
- int **Tab = (int**)malloc(MaxIloscWierszy * sizeof(int*));
- for (i = 0; i < MaxIloscWierszy; i++)
- *(Tab + i) = (int*)malloc(MaxIloscKolumn * sizeof(int));
- do {
- scanf(" %c%c%c", &*(input + 0), &*(input + 1), &*(input + 2));
- if (*(input + 0) == 'A' && *(input + 1) == 'F' && *(input + 2) == 'R') //OK
- DodajWiersz(Tab, &IloscWierszy, 0);
- else if (*(input + 0) == 'A' && *(input + 1) == 'L' && *(input + 2) == 'R') //OK
- DodajWiersz(Tab, &IloscWierszy, IloscWierszy);
- else if (*(input + 0) == 'I' && *(input + 1) == 'B' && *(input + 2) == 'R') { //OK
- scanf("%i", &Numer);
- if (Numer >= 0 && Numer < IloscWierszy)
- if(Numer == 0)
- DodajWiersz(Tab, &IloscWierszy, 0);
- else
- DodajWiersz(Tab, &IloscWierszy, Numer);
- else {
- scanf("%i", &Numer);
- for (i = 0; i < Numer; i++)
- scanf(" %i", &Temp);
- }
- }
- else if (*(input + 0) == 'I' && *(input + 1) == 'A' && *(input + 2) == 'R') { //OK
- scanf("%i", &Numer);
- if (Numer >= 0 && Numer < IloscWierszy)
- if (Numer == IloscWierszy-1)
- DodajWiersz(Tab, &IloscWierszy, IloscWierszy);
- else
- DodajWiersz(Tab, &IloscWierszy, Numer+1);
- else {
- scanf("%i", &Numer);
- for (i = 0; i < Numer; i++)
- scanf(" %i", &Temp);
- }
- }
- else if (*(input + 0) == 'D' && *(input + 1) == 'F' && *(input + 2) == 'R') { //OK
- if(IloscWierszy > 0)
- UsunWiersz(Tab, &IloscWierszy, 0);
- }
- else if (*(input + 0) == 'D' && *(input + 1) == 'L' && *(input + 2) == 'R') { //OK
- if (IloscWierszy > 0)
- UsunWiersz(Tab, &IloscWierszy, IloscWierszy-1);
- }
- else if (*(input + 0) == 'R' && *(input + 1) == 'M' && *(input + 2) == 'R') { //OK
- scanf("%i", &Numer);
- if (Numer >= 0 && Numer < IloscWierszy)
- UsunWiersz(Tab, &IloscWierszy, Numer);
- }
- else if (*(input + 0) == 'A' && *(input + 1) == 'F' && *(input + 2) == 'C') { //OK
- scanf("%i", &Numer);
- DodajElementDoWiersza(Tab, 0, 0, Numer, &IloscWierszy);
- }
- else if (*(input + 0) == 'A' && *(input + 1) == 'L' && *(input + 2) == 'C') { //OK
- scanf("%i", &Numer);
- DodajElementDoWiersza(Tab, 100000, 0, Numer, &IloscWierszy);
- }
- else if (*(input + 0) == 'S' && *(input + 1) == 'W' && *(input + 2) == 'R') { //OK
- scanf("%i", &Numer);
- scanf("%i", &Numer2);
- if (Numer < IloscWierszy && Numer2 < IloscWierszy)
- ZamienWiersze(Tab, Numer, Numer2);
- }
- else if (*(input + 0) == 'S' && *(input + 1) == 'W' && *(input + 2) == 'C') {
- scanf("%i", &Numer);
- scanf("%i", &Numer2);
- ZamienKolumny(Tab, Numer, Numer2, IloscWierszy);
- }
- else if (*(input + 0) == 'D' && *(input + 1) == 'F' && *(input + 2) == 'C') {
- UsunPierwszaKolumne(Tab, &IloscWierszy);
- }
- else if (*(input + 0) == 'D' && *(input + 1) == 'L' && *(input + 2) == 'C') {
- UsunOstatniaKolumne(Tab, &IloscWierszy);
- }
- else if (*(input + 0) == 'R' && *(input + 1) == 'M' && *(input + 2) == 'C') {
- scanf("%i", &Numer);
- UsunDowolnaKolumne(Tab, Numer, &IloscWierszy);
- }
- else if (*(input + 0) == 'P' && *(input + 1) == 'R' && *(input + 2) == 'T') //OK
- WyswietlTablice(Tab, IloscWierszy);
- if (IloscWierszy == MaxIloscWierszy - 1) {
- Tab = (int**)realloc(Tab, IloscWierszy + 1);
- MaxIloscWierszy += 1;
- }
- } while (*(input + 0) != 'E' && *(input + 1) != 'N' && *(input + 2) != 'D');
- if(Tab)
- free(Tab);
- if(input)
- free(input);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement