Ir ao conteúdo
  • Cadastre-se

Wesley Araujo Fernandes

Membro Júnior
  • Posts

    12
  • Cadastrado em

  • Última visita

Reputação

10
  1. #define N 100 char pilha[N]; int t; // Esta função devolve 1 se a string ASCII s // contém uma sequência bem-formada de // parênteses e colchetes e devolve 0 se // a sequência é malformada. int bemFormada (char s[]) { criapilha (); for (int i = 0; s[i] != '\0'; ++i) { char c; switch (s[i]) { case ')': if (pilhavazia ()) return 0; c = desempilha (); if (c != '(') return 0; break; case ']': if (pilhavazia ()) return 0; c = desempilha (); if (c != '[') return 0; break; default: empilha (s[i]); } } return pilhavazia (); } void criapilha (void) { t = 0; } void empilha (char y) { pilha[t++] = y; } char desempilha (void) { return pilha[--t]; } int pilhavazia (void) { return t <= 0; } Galera, precisa da ajuda de vocês para modificar esse codigo pra ao invés de ser colchetes ser "chaves". e alem disso o codigo esta gerando um erro e não estou conseguindo achar , que diz assim: 13 [Warning] implicit declaration of function 'criapilha' [-Wimplicit-function-declaration] 17 18 25 nessas linhas dizem isso, como se não fosse declarado no codigo não sei
  2. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <locale.h> #include <time.h> void insertionsort(int n, int v[]); int part (int n, int f, int v[]); void quicksort(int i, int f, int v[]); int *Ler(int n); int main(){ setlocale(LC_ALL,""); clock_t tempos[2]; tempos[0] = clock(); tempos[1] = clock(); int n; printf("\nInforme um valor para a quantidade de elementos: "); scanf("%i", &n); printf("\nVetor 1:\n"); int *v1 = Ler(n); printf("\nVetor 2:\n"); int *v2 = Ler(n); printf("\nVetor 3:\n"); int *v3 = Ler(n); printf("\nVetor 4:\n"); int *v4 = Ler(n); printf("\nVetor 5:\n"); int *v5 = Ler(n); printf("\nVetor 6:\n"); int *v6 = Ler(n); printf("\nVetor 7:\n"); int *v7 = Ler(n); printf("\nVetor 8:\n"); int *v8 = Ler(n); printf("\nVetor 9:\n"); int *v9 = Ler(n); printf("\nVetor 10:\n"); int *v0 = Ler(n); int i; FILE *arch = fopen("benchmark.tsv","w"); //Chamada e ordenação por quicksort printf("\n=======QUICKSORT EXECUTADO=====\n"); quicksort(0, n - 1, v1); quicksort(0, n - 1, v2); quicksort(0, n - 1, v3); quicksort(0, n - 1, v4); quicksort(0, n - 1, v5); quicksort(0, n - 1, v6); quicksort(0, n - 1, v7); quicksort(0, n - 1, v8); quicksort(0, n - 1, v9); quicksort(0, n - 1, v0); double T[2]; T[0] = (tempos[0] - tempos[1])*1000/CLOCKS_PER_SEC; fprintf(arch,"\nTempo de execução do quicksort: %g ms.\n", T[0]); printf("\n======INSERTIONSORT EXECUTADO======\n"); insertionsort(n,v1); insertionsort(n,v2); insertionsort(n,v3); insertionsort(n,v4); insertionsort(n,v5); insertionsort(n,v6); insertionsort(n,v7); insertionsort(n,v8); insertionsort(n,v9); insertionsort(n,v0); T[1] = (tempos[0] - tempos[1])*1000/CLOCKS_PER_SEC; fprintf(arch,"\nTempo de execução do insertionsort: %g ms.\n", T[1]); printf("\nPrograma finalizado!\n"); fclose(arch); system("pause"); printf("\n\n"); return 0; } int *Ler(int n){ int i; int *v = (int*)malloc(n*sizeof(int)); for(i = 0; i < n; i++){ printf("\nInsira o valor da posição %i do vetor: ", i+1); scanf("%i", &v[i]); } return v; } void insertionsort(int n, int v[n]){ int i, j; //Ordenação por inserção //O indice i inicia na posição 1 do vetor, ou seja, a segunda posição do vetor. Já j inicia no indice i - 1, ou seja, inicialmente na primeira //posição do nosso vetor for(i = 1; i < n; i++){ int x = v[i]; //Pegamos o valor atual a qual vai ser ordenado do vetor na posição i e o guardamos em uma variavel auxiliar //j sempre estará na posição atrás do indice i for(j = i - 1; j>= 0 && x < v[j]; j--){ v[j+1] = v[j]; //aqui é onde ocorre uma parte da ordenação, onde trocamos o valor de j = i - 1 pelo valor de i, caso este seja menor que o valor de j } v[j+1] = x; //Para que não fiquemos com valores iguais em duas posições do vetor, atribuimos o valor de i guardado em x a posição que //anteriormente foi do menor valor encontrado } } int part (int n, int f, int v[]){ int piv = v[f]; //atribuindo o valor que está na posição final do vetor a variavel que serve para comparação de valores int j = n - 1; // atribuindo o valor inicial a variavel contadora - 1, por termos de posição de vetor int i; //variavel contadora for(i = n; i < f; i++){ if (v[i]<= piv){ j++; int temp = v[j]; //Guardando valor que foi encontrado a qual é menor que piv em uma variavel temporaria v[j] = v[i]; //Atribuindo ao valor inicial, na posição correta o menor valor encontrado comparado ao valor na posição final do vetor (piv) v[i] = temp; //Atribuindo o valor que foi trocado de posição, o valor que anteriormente foi o menor valor encontrado na posição j } } //Aqui realizamos a troca do valor que estava na posição final do vetor, //a qual será inserido na sua posição correta, onde todos os elementos a sua direita são maiores e a esquerda estão os menores que ele int temp = v[j + 1]; v [j+1] = v[f]; v[f] = temp; return j+1; //Retornando a posição do piv } void quicksort (int i, int f, int v[]){ //caso o inicio seja menor que o final, realizamos o quick sort if (i < f){ int p = part(i, f, v); //Recebendo valor retornado da função que realiza a ordenação. A cada rodada ele inicia ordena do inicio para o meio e do meio para o fim quicksort(i, p-1, v); //Ordenando os valores do inicio ao meio quicksort(p+1, f, v); //Ordenando os valores do meio ao fim } } coloquei as duas funções, falta esse merge, mais to perdido pra adicionar ela, alguém junta ai por favor kk ou me e ensina é uma coisa que queria otimizar nesse meu code era os vetores, declarei 10 e ficou mt extenso, como faço pra otimizar isso?
  3. fiz uns exemplos das funções que esta pedindo, porém não consigo juntas as tres funções dentro de uma algoritmo so, alguém pode me ajudar nisso, e também a respeito dessa marcação de tempo void merge(int arr[], int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; //criando matrizes temporarias //copie dados para matrizes temporarias L e R for (i = 0; i < n1; i++) L[i] = arr[l + i]; for (j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; //mesclar as matrizes temporarias de volta no arr i = 0; //variavel inicial da primeira submatriz j = 0; //variavel inicial da segundo submatriz k = l; //variavel inicial da mesclado submatriz while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) { //Copie os elementos restantes de R, se houver algum arr[k] = L[i]; i++; k++; } while (j < n2) { //Copie os elementos restantes de R, se houver algum arr[k] = R[j]; j++; k++; } } void mergeSort(int arr[], int l, int r) //L é para o indice esquerdo e R é o indice direito da submatriz de arr a ser classificado { if (l < r) { // Same as (l+r)/2, but avoids overflow for // large l and h int m = l + (r - l) / 2; // Sort first and second halves mergeSort(arr, l, m); mergeSort(arr, m + 1, r); merge(arr, l, m, r); } } void printArray(int A[], int size) { int i; //funções de utilidade for (i = 0; i < size; i++) //função para imprimir uma matriz printf("%d ", A[i]); printf("\n"); } int main() //chamada da função de acordo com os numeros desejados pelo usuario { int arr[] = { 80, 60, 20, 10, 6, 7 }; int arr_size = sizeof(arr) / sizeof(arr[0]); printf("A matriz dada e: \n"); printArray(arr, arr_size); mergeSort(arr, 0, arr_size - 1); printf("\nA matriz ordenada e: \n"); printArray(arr, arr_size); return 0; } essa e a merge sort, falta as outras 2 duas funções para juntar com essa, alguém me da ess luz
  4. Escreva três funções em C que implemente os seguintes algoritmos de ordenação para vetores de valores inteiros: > por inserção (insertion sort) > ordenação por intercalação (merge sort) > ordenação rápida (quick sort) Em seguida, escreva uma função main para testar a sua implementação. Implemente um código para fazer uma análise do desempenho das três funções acima com 10 vetores de tamanhos diferentes entrada de dados. Exiba os resultados de tempo de cada algoritmo para cada vetor em um arquivo benchmark.tsv, e explique os resultados em termos da complexidade no pior caso de cada algoritmo. alguém me explique com palavras mais claras o que eu preciso fazer aqui, confesso que não entendi bem
  5. #include <stdio.h> #include <string.h> #include <stdlib.h> int existe(char *str1, char *str2, int id){ int i, j = 0; for (i = id; i < strlen(str1); i++){ if (str1[i] == str2[j]) j++; else j = 0; if (j == strlen(str2)) return i; } return -1; } int main(){ char str1[50] = "ama quem ama ama muito"; char str2[] = "ama"; int indice = 0, quantidade = 0; do{ indice = existe (str1, str2, indice); printf("Retorno: %d\n", indice); if(indice != -1) quantidade++; }while(indice != -1); printf ("\nQuantidade: %d\n", quantidade); return 0; } como faço pra enclementar a função fgets para que o usuario digite a frase desejada e o algoritmo identifique as palavras iguais e me mostre a quantidade, fiz esse exemplo, mais não consigo colocar a função que ler as palavras na frase coloquei assim fgets (str2, 50, stdin); ta pedindo a frase, mais não mostra as palavras iguais, o que to fazendo de errado ??
  6. Ah tudo bem mano, desculpe não tinha entendido. mais uma coisa, eu retiro o fgets e coloco o char frase[100] = “ banana é verde” pra verificar antes, e coloco também char palavra[] = “na” pra verificar se acha a palavra que eu procuro né isso, porque se tiver só a frase não vai rodar né isso?
  7. Mais a questão esta pedindo para o usuário digitara frase que deseja , não é pra colocar a frase no algoritmo, porque se eu colocar char frase [1000] = “frase qualquer” assim quando eu executar já vai mostrar o resultado, não vai pedir pra digitar a frase espero que tenha entendido , porque é exatamente assim que a questão pedi, e não tô conseguindo formar uma string que ache essa palavras iguais
  8. @Midori tentei construir os exemplos que você me passou mais ainda não cheguei na execução final da questão , o que eu poderia fazer? #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char palavras[100][50]; char conta[100]; printf("Introduza a frase\n"); fgets(palavras,50,stdin); int repete(char *palavras[100][50], char *palavra[50], int n){ for (int i=0; i<n; i+=1) { if (iguais(palavras[i], palavra)){ return i; } } return -1; } int n = repete(palavras, palavra, indice); if (n == -1){ strcpy(palavras[indice], palavra); indice += 1; }else{ conta[n] += 1; } } tem umas coisas erradas, como a declaração de ponteiros, porque eu estava testando e esqueci de tirar, então ignore kk
  9. Então no caso, eu só mudo essa parte que você colocou no meu código né isso? Tem como alterar aí no meu código por favor, e vou estudar sua explicação pra entender melhor e fazer as outras questões
  10. Opa, acho que você não entender, digitar assim no código a frase e a palavra a ser procurada eu tô conseguindo fazer, mais o que a questão pede é pra o usuário digitar a frase desejada no prompt de comando, e a partir disso o algoritmo procurar as palavras iguais, essa tá sendo minha dificuldade, deu pra entender melhor? Nesse caso do seu código, você já digitou a frase nele, e logo após executar, ele vai mostrar o resultado, mais eu preciso digitar a frase dps fora do algoritmo, espero que tenha entendido kk
  11. Escreva um programa que: 1. Defina o tipo Ponto composto por suas coordenadas cartesianas x e y; 2. Receba do usuário uma quantidade n de pontos e suas respectivas coordenadas; 3. Armazene os pontos informados pelo usuário em um vetor alocado dinamicamente; 4. Implemente a função maisDistante() que recebe um vetor de pontos e seu tamanho e retorna os dois pontos que estão mais distantes entre si; 5. Imprima na função main quais são os dois pontos mais distantes entre si. Exemplo de execução: $ ./Q1.o Informe a quantidade de pontos: 4 Informe as coordenadas x e y do ponto 1: 0 0 Informe as coordenadas x e y do ponto 2: 0 5.5 Informe as coordenadas x e y do ponto 3: 6.78 0 Informe as coordenadas x e y do ponto 4: 0 10.0 Os pontos mais distantes entre si sao: (6.78,0.00) e (0.00,10.00)
  12. ( to com um problema nessa questão, no codigo eu digito a frase e a palavra que eu quero saber quantas tem na frase, só que a questão pedi que o usuário digite a frase no prompt de comando e o algoritmo por se só identifique as palavras iguais e me diga qual foi elas e quantas são, tem como me ajudar por favor ) O QUE A QUESTÂO PEDE: Implemente um programa no qual o usuario informa, através da linha de comando, uma frase e o programa busca todas repetições da mesma palavra. Ao final, o programa imprime o numero de vezes que cada palavra aparece no frase. Para isso, só será permitido utilizar as funções strcpy(), strlen(), e fgets() de String.h. Realize a implementação própria de todas outras funções que precisar para resolver o problema. #include <stdio.h> #include <stdlib.h> int main(void){ char text[80]; char p[80]; printf("Digite a frase: \n"); fgets(p, 80, stdin); int i = 0; //! Variável inteira Índice do texto. int j = 0; //! Variável inteira Índice da palavra. int t = 0; //! Variável inteira quantidade de ocorrências de p em text. while( text[i] != '\0' ){ //! Laço continuar até que o texto chegue ao fim. if( text[i++] == p[j] || (j = 0) )j++;//! Se os caracteres coincidem incrementa. //! Se não reinicia se o índice da palavra com j <- 0 dentro operador OU. if( p[j] == '\0' )printf( "%d-%s\n", 1+t, p ), j = 0, t++;//! j atingiu o max //!de incremento, por tanto, palavra encontrada então imprimi, incrementa o contador e //!reinicia o índice da palavra j <- 0. } printf( "%s%s%s%d%s",//!Imprime o resultado. "A palavra /",p,"/ repetiu ", t, " vezes.\n" ); return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!