Finestra::Finestra(QWidget *parent) : QWidget(parent) { //+1 _seleccio = new QComboBox; _llista = new QListWidget; _afegeix = new QPushButton("Afegeix..."); _esborra = new QPushButton("Esborra"); _executa = new QPushButton("Executa"); //-1 //+2 QGridLayout *L = new QGridLayout; L->addWidget(_seleccio, 0, 0); L->addWidget(_afegeix, 0, 1); L->addWidget(_esborra, 1, 1); L->addWidget(_llista, 1, 0, 4, 1); L->addWidget(_executa, 4, 1); setLayout(L); //-2 //+3 _seleccio->addItem("Inverteix"); _seleccio->addItem("Gira"); //-3 //+7 connect(_afegeix, SIGNAL(clicked()), this, SLOT(afegeix())); connect(_esborra, SIGNAL(clicked()), this, SLOT(esborra())); connect(_executa, SIGNAL(clicked()), this, SLOT(executa())); //-7 }
/* void Node::escutaTransmissao(){ comando = rf.receive(); } */ void Node::loop(){ // executa comando recebido if( rf.receive()){ executa(rf.mensagem); } // se mensagem tem o destinatario deste node executa mensagem }
/* Handle client request */ void * HandleRequest(void *args) { char str[BUFSIZE]; TSocket cliSock; /* Extract socket file descriptor from argument */ cliSock = ((struct TArgs *) args) -> cliSock; free(args); /* deallocate memory for argument */ for(;;) { /* Receive the request */ if (ReadLine(cliSock, str, BUFSIZE-1) < 0) { ExitWithError("ReadLine() failed"); } else { executa(str); } /* Send the response */ if (WriteN(cliSock, str, strlen(str)) <= 0) { ExitWithError("WriteN() failed"); } } }
/* * Default: * argc = 1 * argv[0] = Nome do Programa */ int main(int argc, char** argv) { char * filename = NULL; int passoAPassoFlag = 0; int c; int maxMem = 256; int startIndex = 1; int startIndexPrint = 1; int endIndexPrint = 255; opterr = 0; while ((c = getopt(argc, argv, "i:f:m:n:ps:")) != -1) switch (c) { case 'i': startIndexPrint = atoi(optarg); break; case 'f': endIndexPrint = atoi(optarg); break; case 'm': maxMem = atoi(optarg); break; case 'n': filename = optarg; break; case 'p': passoAPassoFlag = 1; break; case 's': startIndex = atoi(optarg); break; case '?': switch (optopt) { case 'i': case 'f': case 'm': case 'n': case 's': fprintf(stderr, "Opção -%c necessita um argumento.\n", optopt); break; default: if (isprint(optopt)) fprintf(stderr, "Opção desconhecida `-%c'.\n", optopt); else fprintf(stderr, "Caractere de opção desconhecido `\\x%x'.\n", optopt); abort(); } } if (filename == NULL) { fprintf(stderr, "Erro nome do arquivo HEX não especificado!\n"); abort(); } FILE * hex = fopen(filename, "r"); if (!hex) { fprintf(stderr, "Erro ao abrir o arquivo %s!\n", filename); abort(); } inicializaMem(startIndexPrint, endIndexPrint, maxMem); if (loadProgram(hex, startIndex)) { fprintf(stderr, "Erro ao carregar o %s para a memória!\n", filename); abort(); } inicializaSimulador(); do { busca(); if (passoAPassoFlag) { printf("Precione 'r' para imprimir os registradores e seguir um passo na execução,\n" "'c' para continuar a execução sem o passo a passo,\n" "ou qualquer outra tecla para seguir um passo na execução: "); char * str = malloc(2); scanf("%s", str); if (strcmp(str, "r")==0) printRegs(); else if (strcmp(str, "c") == 0) passoAPassoFlag = 0; printf("\n"); } executa(); } while (1); return EXIT_SUCCESS; }
int main() { /* caixas[i][j] eh a matriz de posicao das caixas programas[i][j] tem i programas com j comandos condicao guarda o valor da condicao de execucao (G, B, Y) segurando guarda a caixa que a garra segura colunas e linhas sao o valor X e Y referentes aos lados da matriz caixas numProgramas numComandos sao numeros P e C de programas e de comandos maximo maxExecucoes eh o valor E do maximo de execucoes i e j sao contadores capotou eh uma flag para dizer se houve um acidente altura[i] eh um vetor com as alturas de caixas posGarra eh o valor referente a posicao da garra execucoes eh o valor de quantas execucoes ja aconteceram */ char **caixas, **programas, condicao=0, segurando=0; int colunas, linhas, numProgramas, numComandos, maxExecucoes, i, j, capotou=0, *altura, posGarra=0, execucoes=0; /* Entrada dos valores de X, Y, P, C, E */ scanf(" %d %d %d %d %d", &colunas, &linhas, &numProgramas, &numComandos, &maxExecucoes); /* Alocacao de memoria para os vetores e matrizes */ altura = malloc(colunas * sizeof(int)); caixas = malloc(linhas * sizeof(char *)); for(i=0;i<linhas;i++) caixas[i] = malloc(colunas * sizeof(char)); programas = malloc(numProgramas * sizeof(char *)); for(i=0;i<numProgramas;i++) programas[i] = malloc((numComandos+1) * sizeof(char)); /* Entrada das posicoes das caixas e calculo das alturas */ for(i=0;i<colunas;i++) altura[i] = linhas; for(i=0;i<linhas;i++){ for(j=0;j<colunas;j++){ scanf(" %c", &caixas[i][j]); if (caixas[i][j] != '.' && i < altura[j]) altura[j] = i; } } /* Entrada dos programas */ for(i=0;i<numProgramas;i++){ j=0; do{ scanf(" %c", &programas[i][j]); }while(programas[i][j++] != '*'); } /* Executa os testes */ for(i=0;i<numProgramas && !capotou && execucoes < maxExecucoes;i++){ executa(caixas, linhas, colunas, programas, i, &posGarra, &segurando, &condicao, altura, &execucoes, maxExecucoes, &capotou); } /* Verifica se capotou */ if(capotou){ printf("Um acidente ocorreu\n"); }else{ /* Imprime a saida */ for(i=0;i<linhas;i++){ for(j=0;j<colunas;j++){ printf("%c", caixas[i][j]); } printf("\n"); } } /* Desalocando espacos */ for(i=0;i<linhas;i++) free(caixas[i]); free(caixas); for(i=0;i<numProgramas;i++) free(programas[i]); free(programas); free(altura); return 0; }
void executa(char **caixas, int linhas, int colunas, char **programas, int i, int *posGarra, char *segurando, char *condicao, int *altura, int *execucoes, int maxExecucoes, int *capotou){ int j=0; (*execucoes)++; /* Executa o comando enquanto nao encontrar um asterico */ do { /* Verifica se capotou */ if(*capotou) return; /* Caso tenha alguma condicao para o proximo comando, guarda na variavel condicao */ if(programas[i][j] == 'B' || programas[i][j] == 'Y' || programas[i][j] == 'G' || programas[i][j] == 'N' || programas[i][j] == 'A'){ *condicao = programas[i][j]; }else{ /* Caso esteja na condicao, executa o comando*/ if((*condicao == 0) || (*condicao == *segurando) || (*condicao == 'A' && *segurando != 0) || (*condicao == 'N' && *segurando == 0)){ /* Comando de movimento para a direita */ if(programas[i][j] == 'R' && *posGarra < colunas-1){ if(caixas[0][*posGarra + 1] != '.' && *segurando != 0) *capotou = 1; (*posGarra)++; } /* Comando de movimento para a esquerda */ else if(programas[i][j] == 'L' && *posGarra > 0){ if(caixas[0][*posGarra-1] != '.' && *segurando != 0) *capotou = 1; (*posGarra)--; } /* Comando para a abaixar a garra */ else if (programas[i][j] == 'D' && altura[*posGarra] < linhas && *segurando == 0){ *segurando = caixas[altura[*posGarra]][*posGarra]; caixas[altura[*posGarra]][*posGarra] = '.'; altura[*posGarra]++; }else if (programas[i][j] == 'D' && altura[*posGarra] > 0 && *segurando != 0){ caixas[(altura[*posGarra])-1][*posGarra] = *segurando; *segurando = 0; altura[*posGarra]--; } /* Comando de chamar outro programa */ else if(programas[i][j] >= '1' && programas[i][j] <= '9' && *execucoes < maxExecucoes){ executa(caixas, linhas, colunas, programas, programas[i][j] - '1', posGarra, segurando, condicao, altura, execucoes, maxExecucoes, capotou); } } /* Apos executar o comando, reseta a condicao */ *condicao = 0; } }while(programas[i][++j] != '*'); }