From eea437dc84d2906b615fc243bb44cec57255fbe9 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 5 Mar 2023 18:36:32 -0300 Subject: First Commit --- Uni/agenda.c | 278 +++++++++++++++++++++++++++++++ Uni/primeiro_trab.c | 461 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 739 insertions(+) create mode 100644 Uni/agenda.c create mode 100644 Uni/primeiro_trab.c (limited to 'Uni') diff --git a/Uni/agenda.c b/Uni/agenda.c new file mode 100644 index 0000000..7a625c8 --- /dev/null +++ b/Uni/agenda.c @@ -0,0 +1,278 @@ +#include +#include +#include +#include + +typedef struct{ + unsigned long long int pos; + unsigned int ano, mes, dia; + unsigned int hora, minutos; + char texto[1024]; +}agenda; + +typedef struct Node{ + agenda v; + struct Node* next; +}node; + +node* create(agenda v){ + node* tmp = (node*)malloc(sizeof(node)); + tmp->next = NULL; + tmp->v = v; + return tmp; +} + +agenda ler(){ + agenda v; + do{ + printf("insira no formato\n"); + printf("data [31/12/0000]: "); + scanf("%d/%d/%d", &v.dia, &v.mes, &v.ano); + }while(v.dia > 31 || v.mes > 12 ); + + do{ + printf("insira no formato\n"); + printf("horario [23:59]: "); + scanf("%d:%d", &v.hora, &v.minutos); + }while(v.hora > 23 || v.minutos > 59); + + printf("Compromisso: \n"); + scanf(" %[^\n]", v.texto); + + v.pos = v.minutos + 60*v.hora + 24*60*v.dia + 31*24*60*v.mes + 12*31*24*60*v.ano; + return v; +} + +void print_comp(agenda v){ + printf("\nData: %02u/%02u/%04u\n", v.dia, v.mes, v.ano); + printf("Horario: %02u:%02u\n", v.hora, v.minutos); + printf("%s\n", v.texto); +} + +void add_compromisso(agenda v, node** head){ + node* tmp = create(v); + if(*head == NULL){ + *head = tmp; + return; + } + if((*head)->v.pos > tmp->v.pos){ + tmp->next = *head; + *head = tmp; + return; + } + + node* aux = *head; + node* ant; + while(aux != NULL && aux->v.pos < tmp->v.pos){ + ant = aux; + aux = aux->next; + } + if(aux == NULL){ + ant->next = tmp; + }else{ + tmp->next = ant->next; + ant->next = tmp; + } +} + +void print_agenda(node* head){ + while(head != NULL){ + print_comp(head->v); + head = head->next; + } +} + +void remove_compromisso(unsigned long long int pos, node** head){ + bool ini = false; + while((*head) != NULL && (*head)->v.pos >= pos && (*head)->v.pos <= pos+60*23+59){ + node* tmp = *head; + *head = (*head)->next; + free(tmp); + ini = true; + } + if(ini) return; + + node* tmp = (*head)->next; + node* ant = *head; + while(tmp != NULL){ + bool deletou = false; + node* del = tmp; + if(tmp != NULL && tmp->v.pos >= pos && tmp->v.pos <= pos+60*23+59){ + ant->next = tmp->next; + deletou = true; + } + if(deletou){ + ant = ant; + free(del); + } + else + ant = tmp; + tmp = tmp->next; + } +} + +void consulta_data(unsigned long long int pos, node* head){ + while(head != NULL){ + if(head != NULL && head->v.pos >= pos && head->v.pos <= pos+60*23+59) + print_comp(head->v); + head = head->next; + } +} + +void remove_comp_palavra(char* palavra, node** head){ + if(*head == NULL) return; + + node* tmp = *head; + int cont = 0; + while(tmp != NULL){ + if(strstr(tmp->v.texto, palavra) != NULL){ + printf("---------%d---------", cont+1); + printf("\nData: %02u/%02u/%04u\n", tmp->v.dia, tmp->v.mes, tmp->v.ano); + printf("Horario: %02u:%02u\n", tmp->v.hora, tmp->v.minutos); + printf("%s\n\n", tmp->v.texto); + cont++; + } + tmp = tmp->next; + } + if(cont == 0) return; + + int esc=1; + do{ + if(esc > cont || esc <= 0) printf("Insira um valor valido: "); + else printf("Escolha um compromisso para deletar: "); + scanf("%d", &esc); + }while(esc <= 0 || esc > cont); + + tmp = *head; + node* ant; + cont = 0; + while(tmp != NULL){ + if(strstr(tmp->v.texto, palavra) != NULL){ + cont++; + if(cont == esc){ + if(tmp == *head){ + *head = tmp->next; + free(tmp); + }else{ + ant->next = tmp->next; + free(tmp); + } + return; + } + } + ant = tmp; + tmp = tmp->next; + } +} + +void print_comp_palavra(char* palavra, node** head){ + if(*head == NULL) return; + + node* tmp = *head; + int cont = 0; + while(tmp != NULL){ + if(strstr(tmp->v.texto, palavra) != NULL){ + printf("\nData: %02u/%02u/%04u\n", tmp->v.dia, tmp->v.mes, tmp->v.ano); + printf("Horario: %02u:%02u\n", tmp->v.hora, tmp->v.minutos); + printf("%s\n", tmp->v.texto); + cont++; + } + tmp = tmp->next; + } +} + +void altera_comp_palavra(char* palavra, node** head){ + if(*head == NULL) return; + + node* tmp = *head; + int cont = 0; + while(tmp != NULL){ + if(strstr(tmp->v.texto, palavra) != NULL){ + printf("---------%d---------", cont+1); + printf("\nData: %02u/%02u/%04u\n", tmp->v.dia, tmp->v.mes, tmp->v.ano); + printf("Horario: %02u:%02u\n", tmp->v.hora, tmp->v.minutos); + printf("%s\n\n", tmp->v.texto); + cont++; + } + tmp = tmp->next; + } + if(cont == 0) return; + + int esc=1; + do{ + if(esc > cont || esc <= 0) printf("Insira um valor valido: "); + else printf("Escolha um compromisso para alterar: "); + scanf("%d", &esc); + }while(esc <= 0 || esc > cont); + + tmp = *head; + node* ant; + cont = 0; + while(tmp != NULL){ + if(strstr(tmp->v.texto, palavra) != NULL){ + cont++; + if(cont == esc){ + printf("Novo compromisso: \n"); + scanf(" %[^\n]", tmp->v.texto); + return; + } + } + ant = tmp; + tmp = tmp->next; + } +} + +int main(){ + node* head = NULL; + while(1){ + int esc=0; + scanf("%d", &esc); + if(esc == 1){ + agenda v = ler(); + //print_comp(v); + add_compromisso(v, &head); + } + if(esc == 2){ + print_agenda(head); + } + if(esc == 3){ + char palavra[128]; + printf("Texto para procurar: "); + scanf(" %s", palavra); + remove_comp_palavra(palavra, &head); + } + if(esc == 4){ + unsigned long long int pos; + int dia, mes, ano; + printf("data [31/12/0000]: "); + scanf("%d/%d/%d", &dia, &mes, &ano); + pos = 24*60*dia + 31*24*60*mes + 12*31*24*60*ano; + consulta_data(pos, head); + } + if(esc == 5){ + char palavra[128]; + printf("Texto para procurar: "); + scanf(" %s", palavra); + print_comp_palavra(palavra, &head); + } + if(esc == 6){ + char palavra[128]; + printf("Texto para procurar: "); + scanf(" %s", palavra); + altera_comp_palavra(palavra, &head); + } + if(esc == 9){ + unsigned long long int pos; + int dia, mes, ano; + printf("data [31/12/0000]: "); + scanf("%d/%d/%d", &dia, &mes, &ano); + pos = 24*60*dia + 31*24*60*mes + 12*31*24*60*ano; + remove_compromisso(pos ,&head); + } + if(esc == 10) break; + } + return 1; +} + +// TODO: arrumar os inputs da agenda +// TODO: 3 5 diff --git a/Uni/primeiro_trab.c b/Uni/primeiro_trab.c new file mode 100644 index 0000000..16f0e87 --- /dev/null +++ b/Uni/primeiro_trab.c @@ -0,0 +1,461 @@ +#include +#include +#include +#define tam 50 +#define altura 12 + +void bubble_sort(int array[tam], int col); +void create_matrix( int matrix[tam][tam], int x, int y); +void matrixcpy( int matrixcpy[tam][tam], int matrix[tam][tam], int x, int y ); +void show_matrix( int matrix[tam][tam], int x, int y ); +void change_lines( int matrix[tam][tam], int col, int linx, int liny ); +void change_colums( int matrix[tam][tam], int lin, int colx, int coly ); +int is_square_matrix( int x, int y ); +int change_diag( int matrix[tam][tam], int lin, int col ); +int is_sym_matrix( int matrix[tam][tam], int lin, int col ); +int is_magic_square( int matrix[tam][tam], int lin, int col ); +int is_latin_square( int matrix[tam][tam], int lin, int col ); +int is_permut_matrix(int matrix[tam][tam], int lin, int col); + +void clear_matrixwin(int startY, int startX, int maxY, int maxX); +void show_matrix_win2( int matrix[tam][tam], int x, int y); + +int yMax, xMax; +int startX, startY; + +int main(){ + int matrix[tam][tam], new_matrix[tam][tam]; + int lin, col, lin1, lin2; + + + /* printf("linha: coluna:\n"); + scanf("%d %d", &lin, &col); + create_matrix(matrix, lin, col); + matrixcpy(new_matrix, matrix, lin, col); + printf("%d\n", is_permut_matrix(new_matrix, lin, col)); + show_matrix(new_matrix, lin, col); + */ + initscr(); + noecho(); + cbreak(); + + const char * menu_itens[9] = { + "Ler Matriz", + "Trocar elementos da linha X pela linha Y", + "Trocar elementos da coluna X pela coluna Y", + "Trocar elementos da DP com DS", + "Verificar se a matriz e simetrica", + "Verificar se a matriz e um quadrado magico", + "Verificar se a matriz e quadrado latino", + "Verificar se a matriz e matriz de permutacao", + "Sair"}; + + int matrixwinY, matrixwinX; + int mwinyMax, mwinxMax; + + getmaxyx(stdscr, yMax, xMax); + getbegyx(stdscr, startY, startX); + + WINDOW * menuwin = newwin(altura, xMax, startY, startX); + WINDOW * matrixwin = newwin(yMax-altura, xMax/2, startY+altura, startX); + WINDOW * showwin = newwin(yMax-altura, xMax/2, startY+altura, startX+xMax/2); + + getmaxyx(matrixwin, mwinyMax, mwinxMax); + getbegyx(matrixwin, matrixwinY, matrixwinX); + + box(menuwin, 0, 0); + box(matrixwin, 0, 0); + box(showwin, 0, 0); + + + mvwprintw(matrixwin, 0, 1, "Sua-Matriz"); + mvwprintw(showwin, 0, 1, "Resultado"); + mvwprintw(menuwin, 0, 1, "Menu"); + + refresh(); + wrefresh(menuwin); + wrefresh(matrixwin); + wrefresh(showwin); + + keypad(menuwin, TRUE); + int seta; + int mark=0; + int tem_matriz=0; + //do{ + comeco: + matrixcpy(matrix, new_matrix, lin, col); + while(1){ + for(int i = 0; i<9; ++i){ + if(i==mark) + wattron(menuwin, A_REVERSE); + mvwprintw(menuwin, i+2, 1, menu_itens[i]); + wattroff(menuwin, A_REVERSE); + } + seta = wgetch(menuwin); + + switch(seta){ + case KEY_UP: + mark--; + + if(mark < 0) + mark = 8; + break; + + case KEY_DOWN: + mark++; + + if (mark >=9) + mark = 0; + break; + + default: + break; + } + if (mark==0) + tem_matriz=1; + + if (seta==10 && tem_matriz || mark==8 && seta==10) + break; + + } + + + + if(mark==0){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + mvprintw(startY+altura+1,startX+1, "Digite quantas linhas e colunas a matriz tera, e pressione enter: "); + refresh(); + scanf("%d", &lin); + mvprintw(startY+altura+2,startX+1,"Linhas: %d", lin); + refresh(); + scanf("%d", &col); + mvprintw(startY+altura+3,startX+1,"Colunas: %d", col); + refresh(); + mvprintw(startY+altura+4,startX+1,"Pressione uma tecla para continuar..."); + getch(); + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + create_matrix(matrix, lin, col); + matrixcpy(new_matrix, matrix, lin, col); + } + if(mark==1){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + mvprintw(startY+altura+1,startX+1, "Digite o valor das linhas e clique enter"); + refresh(); + scanf("%d", &lin1); + mvprintw(startY+altura+2,startX+1,"Linha: %d", lin1); + refresh(); + scanf("%d", &lin2); + mvprintw(startY+altura+3,startX+1,"Linha: %d", lin2); + refresh(); + mvprintw(startY+altura+4,startX+1,"Pressione uma tecla para continuar..."); + getch(); + change_lines(matrix, col, lin1, lin2); + show_matrix(matrix, lin, col); + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + show_matrix_win2(new_matrix, lin, col); + } + + if(mark==2){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + mvprintw(startY+altura+1,startX+1, "Digite o valor das colunas e clique enter"); + refresh(); + scanf("%d", &lin1); + mvprintw(startY+altura+2,startX+1,"Linha: %d", lin1); + refresh(); + scanf("%d", &lin2); + mvprintw(startY+altura+3,startX+1,"Linha: %d", lin2); + refresh(); + mvprintw(startY+altura+4,startX+1,"Pressione uma tecla para continuar..."); + getch(); + change_colums(matrix, col, lin1, lin2); + show_matrix(matrix, lin, col); + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + show_matrix_win2(new_matrix, lin, col); + } + + if(mark==3){ + + change_diag(matrix, lin, col); + show_matrix(matrix, lin, col); + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + show_matrix_win2(new_matrix, lin, col); + } + if(mark==4){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + + if(is_sym_matrix(matrix, lin, col)){ + mvprintw(yMax/2+6,xMax/4-11,"E uma matriz simetrica"); + refresh(); + }else{ + mvprintw(yMax/2+6,xMax/4-13,"Nao e uma matriz simetrica"); + refresh(); + } + } + if(mark==5){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + + if(is_magic_square(matrix, lin, col)){ + mvprintw(yMax/2+6,xMax/4-10,"E um quadrado magico"); + refresh(); + }else{ + mvprintw(yMax/2+6,xMax/4-12,"Nao e um quadrado magico"); + refresh(); + } + } + if(mark==6){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + + if(is_latin_square(matrix, lin, col)){ + mvprintw(yMax/2+6,xMax/4-10,"E um quadrado latino"); + refresh(); + }else{ + mvprintw(yMax/2+6,xMax/4-12,"Nao e um quadrado latino"); + refresh(); + } + } + if(mark==7){ + clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + + if(is_permut_matrix(matrix, lin, col)){ + mvprintw(yMax/2+6,xMax/4-12,"E uma matriz permutacao"); + refresh(); + }else{ + mvprintw(yMax/2+6,xMax/4-14,"Nao e uma matriz permutacao"); + refresh(); + } + } + + if(mark==8) + goto sair; + goto comeco; + sair: + //}while(mark != 8); + + //create_matrix(matrix, 3, 3); + //getch(); + //clear_matrixwin(startY+altura, startX,yMax-altura, xMax/2); + //create_matrix(matrix, 3, 3); + + + + + endwin(); + + + return 0; +} + +int is_permut_matrix(int matrix[tam][tam], int lin, int col){ + int soma = 1, soma1, soma2; + int teste[tam][tam]; + matrixcpy(teste, matrix, lin, col); + + for(int i=0; i