·

Engenharia Mecatrônica ·

Programação

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Técnicas de Programação P/Engenharia (TPE)\nRevisão - Vetores e Matrizes\nExercício\nDesenvolver um programa que leia um valor N(\\N\\ge50) e um valor M(\\M\\le40). Em seguida ler um vetor A com N elementos e um vetor B com M elementos. Gerar e escrever um vetor C resultado da intercalção dos vetores A e B.\nOBS: Considerar os vetores A, B ordenados (crescente), bem como o vetor C gerado.\n#include <iostream.h>\n#include <conio.h>\nvoid main(void)\n{\n int M,N,IA,IB,IC;\n int A[50],B[40],C[90];\n cout << \"Digite o N(\\N\\<=50) e M(\\M\\<=40): \";\n cin >> N;\n while(N>50 || N<0)\n{\n cout << \"N deve ser <= 50 e >= 0\";\n cin >> N;\n}\n cout << \"Digite o N de elementos de A:\";\n cin >> M;\n while(M>40 || M<0)\n{\n cout << \"M deve ser <= 40 e >= 0\";\n cin >> M;\n}\n for(IA=0; IA<N; IA++)\n{\n cout << \"Digite o \" << (IA+1) << \"o elemento: \";\n cin >> A[IA];\n}\n for(IB=0; IB<M; IB++)\n{\n cout << \"Digite o \" << (IB+1) << \"o elemento: \";\n cin >> B[IB];\n}\n IA=0;\n IB=0;\n IC=0;\n do{\n if(A[IA] < B[IB])\n {\n C[IC] = A[IA];\n IA++;\n }\n else\n {\n C[IC] = B[IB];\n IB++;\n }\n IC++;\n }while(IA<N && IB<M);\n for(; IA<N; IA++)\n{\n C[IC++] = A[IA];\n }\n for(; IB<M; IB++)\n{\n C[IC++] = B[IB];\n }\n for(IC=0; IC<N+M; IC++)\n{\n cout << C[IC] << \" \";\n }\n getch();\n return 0;\n} IC++;\n while(IA<N && IB<M);\n{\n IC[IC] = A[IA];\n IA++;\n }\n while(IB<M);\n{\n C[IC] = B[IB];\n IB++;\n IC++;\n}\n for(IC=0; IC<N+M; IC++)\n{\n cout << C[IC] << \" \";\n }\n getch();\n return 0;\n}\n09-09-03\nRevisão - Ordenação de vetores\nOrdenação por seleção direta.\nint main ()\n{\n int A[6], I, J, AUX;\n {\n cout << \"Digite o \" << (I+1) << \"o elemento: \";\n cin >> A[I];\n }\n for(I=0; I<5; I++)\n for(J=I+1; J<6; J++)\n if(A[I] > A[J])\n {\n AUX = A[I];\n A[I] = A[J];\n A[J] = AUX;\n }\n cout << \"\\n\";\n for(I=0; I<6; I++)\n cout << A[I] << \" \";\n cout << \"\\n\";\n system(\"pause\");\n return 0;\n} void ordenarvetor(int A[], int tam)\n{\n int I, J, AUX;\n for(I=0; I<tam-1; I++)\n for(J=I+1; J<tam; J++)\n if(A[I] > A[J])\n {\n AUX = A[I];\n A[I] = A[J];\n A[J] = AUX;\n }\n}\n14-08-06\nRevisão: Vetores/Matrizes\nOrdenação de vetores\nMétodo da bolha (permutação):\nvoid main ()\n{\n int VET[6], I, J;\n for(I=0; I<6; I++)\n{\n cout << \"Digite o \" << (I+1) << \"o elemento: \";\n cin >> VET[I];\n }\n for(I=0; I<6; I++)\n for(J=I+1; J<6; J++)\n if(VET[J-I] > VET[J])\n {\n AUX = VET[J-I];\n VET[J-I] = VET[J];\n VET[J] = AUX;\n }\n for(I=0; I<6; I++)\n cout << VET[I] << \" \";\n}\nMatrix\nEx: Desenvolver um programa que leia 2 matrizes (3x3), calcule e escreva a matriz resultado da multiplicação das mesmas. void main ()\n{\n int A[3][3], B[3][3], C[3][3], i, j, k;\n srand (time (NULL));\n // Inicializa A\n for(i=0;i<3;i++)\n for(j=0;j<3;j++)\n A[i][j] = rand() % 41;\n\n // Lê A\n for (i=0; i<3; i++)\n for (j=0; j<3; j++)\n prod = 0;\n for(k=0; k<3; k++)\n prod = prod + A[i][k] * B[k][j];\n C[i][j] = prod;\n for (i=0; i<3; i++)\n {\n cout << \"\\n\";\n for(j=0; j<3; j++)\n cout << C[i][j] << \" \";\n }\n System(\"pause\");\n return 0;\n}\n\n16-08-06\nRevisão - Funções / Recursividade\n\nMódulo\nPARÂMETROS FUNÇÃO RETORNO\nPassagem de Parâmetro\n- Por valor: Uma cópia da variável é passada para a função\n- Por referência: É o endereço da variável é passada para a função.\n\nOBS: Variáveis (escopo)\n- locais\n- globais\n- paramétricos //FACTORIAL\n//Forma iterativa.\nlong double fatorial (int N)\n{\n long double FAT=1;\n int I=2;\n while (I<=N)\n {\n FAT = FAT * I;\n I++;\n }\n return FAT;\n}\n\n//FACTORIAL\n//Forma recursiva\nint fatorial (int N)\n{\n if (N==1 || N==0)\n return 1;\n return N * fatorial (N-1);\n}\n\n18-08-06\nExercício: Desenvolver uma função recursiva para calcular o somatório da seguinte série: S = 1 + 2 + ... + N \n\n50\n\nfloat somatório (int N)\n{\n if (N > 50)\n return 0;\n return (2*N - 1)/N + somatório(N+1);\n}\n\nVARIÁVEIS DO TIPO PONTEIRO\nVariável para alocar endereço de memória de outra variável.\nEx:\nint *A;\nint b = 10, c = 20;\nA = &b;\n\nUtilização:\n- Passagem de parâmetro por referência. \n- Alocação dinâmica de memória.\nvoid main()\n{\n int *VET, i, j;\n int K=10;\n VET = new int[K];\n for (i=0; i<K; i++)\n cin >> VET[i];\n delete[] VET; \n free(VET);\n} 23-08-06\n-> ALLOCAÇÃO DINÂMICA DE MEMÓRIA P/MATRIZ\n\nvoid main() \n{\n int **matriz, i, j, lin, col;\n lin = 10;\n col = 20;\n matriz = new int*[lin];\n for (i=0; i<lin; i++)\n matriz[i] = new int[col];\n\n for (i=0; i<lin; i++)\n for (j=0; j<col; j++)\n matriz[i][j] = i*j;\n\n // Imprime matriz\n for (i=0; i<lin; i++)\n {\n delete [] matriz[i];\n }\n delete[] matriz;\n}\n\n25-08-06\nPonteiro\n- Estruturas de dados homogêneas\nEx: int *A;\nA = new int[10];\n\n- Estruturas heterogêneas\nTipos Básicos\nint, float, char, double\n\nTipo \"Novo\"\nstruct REG {\n int COD;\n char DES[50];\n};\nREG VET[100];\nREG *VET; Exemplo:\n#include <stdio.h>\n#include <iostream.h>\nstruct reg {\nint COD;\nchar DES[50];\n};\nvoid main ( )\n{\nreg *vet;\nint i,n;\n i = 10;\n vet = new reg[i];\n for (i=0; i < n; i++)\n {\n cout << \"Dist. COD: \";\n cin >> vet[i].COD;\n cout << \"Dist. e descrição:\";\n gets(vet[i].DES); // cin >> vet[i].DES;\n }\ndelete vet;\n\n}\n\n06-09-06\n\nListas Encadeadas\n\nTipo Heterogêneo\nstruct celula {\nint x;\ncelula *prox;\n};\n\nExemplo:\n#include <iostream.h>\nstruct celula {\nint x;\ncelula *prox;\n};\n\nvoid insere(int n, celula **ini);\nvoid lista(celula **ini);\nvoid main() {\n\n int y;\ncelula *p;\np=NULL;\ndo {\n cin >> y;\n if (y < 0)\n break;\n insere(y, &p);\n} while(1);\n\nvoid insere(int n, celula **ini)\n{\n celula *atual, *nova;\n if (*ini == NULL) {\n *ini = new celula;\n (*ini)->x = n;\n (*ini)->prox = NULL;\n }\n else {\n atual = *ini;\n while (atual->prox != NULL) {\n atual = atual->prox;\n }\n nova = new celula;\n nova->x = n;\n nova->prox = NULL;\n atual->prox = nova; // nova->prox = NULL;\n }\n}\n\n// Imprime a lista.\nvoid lista(celula **ini) {\n celula *atual;\n atual = *ini;\n while (atual != NULL) {\n cout << atual->x << \" \";\n atual = atual->prox;\n }\n system (\"pause\");\n} Listas Encadeadas\n\nConsulta de um elemento na lista\nstruct celula {\n int x;\n celula *prox;\n};\n\nvoid consulta(int n, celula **ini)\n{\n celula *p, *a;\n p = *ini;\n while (p != NULL && p->x != n) {\n p = p->prox;\n }\n if (p == NULL)\n cout << \"n não existe.\";\n}\n\nExclusão de um elemento na lista\nvoid exclui(int n, celula **ini)\n{\n celula **p, *a, *q;\n p = &p;\n while (p != NULL && p->x != n) {\n p = p->prox;\n }\n if ((*ini)->x == n) {\n q = *ini;\n (*ini) = (*ini)->prox;\n delete q;\n }\n else if (p->x == n) {\n q->prox = p->prox;\n delete p;\n }\n else cout << \"n não existe.\";\n} 15-09-06\nLista Simplesmente Encadeada\nInserção Ordenada\nvoid inserirord (celula **ini, int n) {\n celula *atual, *novo;\n if (*ini == NULL) {\n *ini = new celula;\n (*ini)->x = n;\n (*ini)->dir = NULL;\n }\n else {\n if ((*ini)->x >= n) {\n novo = new celula;\n novo->x = n;\n novo->dir = *ini;\n *ini = novo;\n } else {\n atual = *ini;\n while (atual->dir != NULL && atual->dir->x < n)\n atual = atual->dir;\n novo = new celula;\n novo->x = n;\n novo->dir = atual->dir;\n atual->dir = novo;\n }\n }\n}\n\nLista Duplamente Encadeada\n\nNULL + 10 <-> 2 <-> 15 NULL\n\nstruct celula {\n int x;\n celula *dir, *esq;\n}; void inserir (celula **ini, int n) {\n celula *atual, *novo;\n if (*ini == NULL) {\n *ini = new celula;\n (*ini)->x = n;\n (*ini)->dir = NULL;\n (*ini)->esq = NULL;\n }\n else {\n atual = *ini;\n while (atual->dir != NULL)\n atual = atual->dir;\n novo = new celula;\n novo->x = n;\n novo->dir = NULL;\n atual->dir = novo;\n }\n} Exemplo:\n#include <string.h>\n\nstruct celula {\n char NOME[100];\n celula *prox;\n};\n\nvoid inserir (celula **ini, char N[]) {\n celula *nova, *atual;\n if (*ini == NULL) {\n *ini = new celula;\n strcpy((*ini)->NOME,N);\n (*ini)->prox = NULL;\n }\n else {\n if (strcmp((*ini)->NOME,N) < 0) {\n nova = new celula;\n strcpy(nova->NOME,N);\n nova->prox = *ini;\n *ini = nova;\n }\n else {\n atual = *ini;\n while (atual->prox != NULL && strcmp(atual->prox->NOME,N) <= 0)\n atual = atual->prox;\n nova = new celula;\n strcpy(nova->NOME,N);\n nova->prox = atual->prox;\n atual->prox = nova;\n }\n }\n} void insereOrd(celula **ini, int num) {\n celula * atual, * nova;\n if (*ini == NULL) {\n *ini = new celula();\n (*ini)->x = num;\n (*ini)->dir = NULL;\n (*ini)->esq = NULL;\n } else {\n if ((*ini)->x > num) {\n nova = new celula();\n nova->x = num;\n nova->dir = *ini;\n nova->esq = (*ini)->esq;\n (*ini)->esq = nova;\n *ini = nova;\n } else {\n atual = *ini;\n while (atual->dir != NULL && atual->dir->x >= num)\n atual = atual->dir;\n nova = new celula();\n nova->x = num;\n nova->dir = atual->dir;\n atual->dir = nova;\n }\n }\n} 21-09-06\n\n PILHA {\n struct pilha {\n int elemento;\n pilha * prox;\n };\n\n void empilha(pilha **topo, int x) {\n pilha * nova;\n if (*topo == NULL) {\n *topo = new pilha();\n (*topo)->elemento = x;\n (*topo)->prox = NULL;\n } else {\n nova = new pilha();\n nova->elemento = x;\n nova->prox = *topo;\n *topo = nova;\n }\n }\n\n void desempilha(pilha **topo, int n) {\n pilha * p;\n p = *topo;\n while (p != NULL) {\n cout << (p->elemento) << \"\\n\";\n p = p->prox;\n }\n if (p==NULL && cont < n)\n cout << \"O numero de elementos a serem retirados e maior que a pilha.\";\n }\n} Fila {\n struct fila {\n int elementos;\n Fila * prox;\n };\n\n void enfileira(fila **ini, int n) {\n fila * atual, * nova;\n if (*ini == NULL) {\n *ini = new fila();\n (*ini)->elementos = n;\n (*ini)->prox = NULL;\n } else {\n atual = *ini;\n while (atual->prox != NULL)\n atual = atual->prox;\n nova = new fila();\n nova->elementos = n;\n nova->prox = NULL;\n atual->prox = nova;\n }\n }\n} 11-10-06\nÁrvore Binária\nDefinição da estrutura.\nstruct arvore {\n float elemento;\n arvore *esq, *dir;\n};\nvoid insere(float x, arvore **raiz) {\n if (*raiz == NULL) {\n *raiz = new arvore;\n (*raiz) -> elemento = x;\n (*raiz) -> esq = NULL;\n (*raiz) -> dir = NULL;\n return;\n } else {\n if (x < (*raiz) -> elemento)\n insere(x, &((*raiz) -> esq));\n else\n insere(x, &((*raiz) -> dir));\n } 18-10-06\nRetirando elementos\nvoid retira(float x, arvore **raiz) {\n if (*raiz == NULL) {\n cout << \"Registro inexistente.\";\n return;\n }\n if (x < (*raiz) -> elemento)\n retira(x, &((*raiz) -> esq));\n return;\n }\n if (x > (*raiz) -> elemento)\n retira(x, &((*raiz) -> dir));\n return;\n }\n if ((*raiz) -> dir == NULL) {\n arvore *aux = *raiz;\n *raiz = (*raiz) -> esq;\n delete aux;\n return;\n } 25-10-06\nArquivo (em C/C++)\n#include <iostream.h>\n#include <fstream.h> // Classes e métodos para gerenciar o arquivo físico\n#include <string.h>\n// GRAVANDO linha por linha\nint main ( )\n{\n char frase[100];\n ofstream grava (\"teste.txt\", ios::out);\n do {\n cout<<\"Digite uma frase: \";\n cin.getline(frase, 100); // gets(frase);\n if (strlen(frase) == 0)\n break;\n grava << frase << \"\\n\";\n } while(1);\n} // Lendo linha por linha.\nint main ()\n{\n char frase[100];\n ifstream lg(\"teste.txt\", ios::in);\n while (lg.getline(frase, 100))\n cout << frase << \"\\n\";\n system(\"pause\");\n return 1;\n}\n\n// GRAVANDO caractere por caractere\nint main ()\n{\n char letra;\n ofstream grava;\n grava.open(\"teste.txt\", ios::out);\n while (cin.get(letra))\n grava.put(letra);\n return 1;\n}\n\n// LENDO caractere por caractere\nint main ()\n{\n char letra;\n ifstream lg(\"teste.txt\", ios::in);\n while (lg.get(letra)) {\n cout << letra;\n system(\"pause\");\n return 1;\n}\n}\n\n// GRAVANDO caractere utilizando a função open\nint main ()\n{\n char letra;\n ofstream grava;\n grava.open(\"teste.txt\", ios::out | ios::binary);\n while (cin.get(letra))\n grava.put(letra);\n grava.close();\n return 1;\n}\n // GRAVANDO e LENDO\nint main ( )\n{\n char letra;\n ifstream lg;\n lg.open (\"teste.txt\", ios::in | ios::out ...);\n while (cin.get(letra))\n lg.put(letra);\n lg.seekg(0);\n lg.clear();\n while (lg.get(letra))\n cout << letra;\n lg.close();\n return 1;\n}\n\n271-10-06\n\n// GRAVANDO OBJETOS\nclass dados {\n private:\n int cod;\n char desc[200];\n public:\n void incl();\n void lista();\n};\n\nvoid dados::incl() {\n cout << \"\nDigite o codigo:\";\n cin >> cod;\n cout << \"\nDigite a descricao:\";\n getc(desc);\n}\n\nvoid dados::lista() {\n cout << \"\nCodigo = \" << cod;\n cout << \"\nDescricao = \" << desc;\n}\n\nint main() {\n ifstream lg; dados dad;\n char ops; int cod;\n lg.open (\"dados.dat\", ios::in | ios::out | ios::binary);\n do {\n dad.incl();\n lg.write((char*)&dad, sizeof(dad));\n cout << \"\nDeseja incluir mais (s/n) :\";\n ops.getch();\n } while (ops != 'n' || ops != 'N');\n lg.seekg(0);\n lg.clear();\n while (lg.read((char*)&dad, sizeof(dad)))\n dad.lista();\n system(\"pause\");\n lg.seekg(0);\n lg.clear();\n cout << \"\nDigite o codigo a ser pesquisado: \";\n cin >> codigo;\n while (lg.read((char*)&dad, sizeof(dad))) {\n if (codigos == dad.cod) {\n dad.incl();\n int tam = lg.tell();\n tam = tam - sizeof(dad);\n lg.seekp(tam);\n lg.write((char*)&dad, sizeof(dad));\n }\n } else\n cout << \"\nRegistro inexistente\";\n