thalesrafaell 1 Denunciar post Postado Dezembro 30, 2014 Pessoal boa tarde, boa noite ou algo do tipo. Tô iniciando C e já me dei de cara com uma braba. O programa consiste em criar 2 vetores, compará-los e mostrar na tela os valores dos vetores que estão REPETIDOS. Eu fiz toda a lógica mas de forma alguma funciona. Segue abaixo o código. #include <stdio.h> #include <conio.h> int main() { int vetA[5], vetB[8], vetC[8], i, j, r=0, total = 0; printf("--- VETOR A ---\n\n"); printf("Informe 5 numeros: \n"); for(i = 0; i < 5; i++) { scanf("%d", &vetA); } printf("--- VETOR B ---\n\n"); printf("Informe 8 numeros: \n"); for(i = 0; i < 8; i++) { scanf("%d", &vetB); } for(i = 0; i < 9; i++) { for(j = 0; j < 6; j++) { if(vetA == vetB[j]) { vetC[r] = vetB[j]; total++; } } } if(total == 0) { printf("Nao ha valores iguais"); } else { printf("\n\nValores iguais: \n"); for(i = 0; i < total; i++) { printf("\n%d", vetC[r]); } } printf("\n\n"); system("pause"); } A indentação se perdeu com o ctrl+c ~ ctrl +v ..... x) Deve estar algo errado aí mas eu não consigo encontrar, já tentei e todas as forma mudar algumas coisas aqui e ali mas nada. Se rodar esse código aqui acaba acontecendo isso como na imagem abaixo. Alguém dá um help? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Dezembro 30, 2014 #include <stdio.h> #define MAX 5 int main(void) { int vet_A[MAX], vet_B[MAX]; int repeated_count, repeated[MAX] = {}; unsigned int i,j; puts("-- Leitura do primeiro array --"); for(i=0; i<MAX; i++) { printf("Informe o %d número: ", i+1); scanf("%d", &vet_A[i]); } puts("-- Leitura do segundo array --"); for(i=0; i<MAX; i++) { printf("Informe o %d número: ", i+1); scanf("%d", &vet_B[i]); } repeated_count = 0; for(i=0; i<MAX; i++) { for(j=0; j<MAX && vet_A[i] != vet_B[j]; j++); // É um for vazio apenas p/ percorrer o segundo array até encontrar um valor repetido. if (j < MAX) { for(j=0; repeated_count && j<repeated_count && vet_A[i] != repeated[j]; j++); // Verifica se já temos o valor na lista de números repetidos. if (j >= repeated_count) { // Neste ponto temos um número repetido que não está na lista de repetidos (novo número) repeated[repeated_count] = vet_A[i]; repeated_count++; } } } if (!repeated_count) { puts("Não há números repetidos."); } else { for(i=0; i<repeated_count; i++) printf("%d\n", repeated[i]); } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
thalesrafaell 1 Denunciar post Postado Dezembro 30, 2014 Wow _Isis_ ... Mas isso é em C ou C++? Tem comandos que não aprendi ou não vi ainda, tem como simplificar ou fazer em C (Se é que não já é...) só mostrar onde eu tô errando no meu código lá? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Dezembro 30, 2014 Isso é C. A única coisa que tem de diferente é a função puts e a macro define (procure na internet). Observe os comentários e compare os códigos. Compartilhar este post Link para o post Compartilhar em outros sites
lucas _vinicius 1 Denunciar post Postado Dezembro 30, 2014 Olá.bem para começar vamos observar alguns pontos: 1 - Para que ta servindo a variável inteira 'r=0'? 2 - Todo vetor começa sua contagem do '0' então se você o define assim 'vetA [5]' o for deve ser usado assim: for (i=0;i<5;i++) por que ele começa a contar do '0' ;('0' até '4' são 5 espaços alocados,isto é,você não usa o ultimo vetor por que nele fica um caractere nulo) 3 - Para que você usa o system("pause");?se for para ver a mensagem "pressione qualquer tecla para continuar..." beleza agora se for para ver o resultado do program fora do compilador recomendo que use a função "getchar();" da biblioteca <stdio.h>;a proposito a biblioteca do system(); e a <stdlib.h>,e a biblioteca <conio.h> já esta saindo de uso por isso recomendo que não a use... 4 - Quando for exibir o resultado utilizando a variável 'total' decremente 1 antes do for; Rodei seu program numa boa aqui apenas observando esses erros... Se não resolver sozinho posto os erros detalhados do programa,não posto logo por que você como programador tem que aprender a encontrar erros sozinho de preferencia... Compartilhar este post Link para o post Compartilhar em outros sites
thalesrafaell 1 Denunciar post Postado Dezembro 31, 2014 Olá.bem para começar vamos observar alguns pontos: 1 - Para que ta servindo a variável inteira 'r=0'? 2 - Todo vetor começa sua contagem do '0' então se você o define assim 'vetA [5]' o for deve ser usado assim: for (i=0;i<5;i++) por que ele começa a contar do '0' ;('0' até '4' são 5 espaços alocados,isto é,você não usa o ultimo vetor por que nele fica um caractere nulo) 3 - Para que você usa o system("pause");?se for para ver a mensagem "pressione qualquer tecla para continuar..." beleza agora se for para ver o resultado do program fora do compilador recomendo que use a função "getchar();" da biblioteca <stdio.h>;a proposito a biblioteca do system(); e a <stdlib.h>,e a biblioteca <conio.h> já esta saindo de uso por isso recomendo que não a use... 4 - Quando for exibir o resultado utilizando a variável 'total' decremente 1 antes do for; Rodei seu program numa boa aqui apenas observando esses erros... Se não resolver sozinho posto os erros detalhados do programa,não posto logo por que você como programador tem que aprender a encontrar erros sozinho de preferencia... Eu fiz algumas mudanças e não rodou, deu um bug e fechou o programa :/ tem como mandar a mudança que você fez pra comparar? Isso é C. A única coisa que tem de diferente é a função puts e a macro define (procure na internet). Observe os comentários e compare os códigos. Adaptei assim, não rodou, tô deixando algo passar? #include <stdio.h> #include <conio.h> int main() { int vetA[5], vetB[8], vetC[8], i, j, r=0, total = 0; printf("--- VETOR A ---\n\n"); printf("Informe 5 numeros: \n"); for(i = 0; i < 5; i++) { scanf("%d", &vetA); } printf("--- VETOR B ---\n\n"); printf("Informe 8 numeros: \n"); for(i = 0; i < 8; i++) { scanf("%d", &vetB); } for(i = 0; i < 8; i++) { for(j = 0; j < 5 && vetA != vetB[j]; j++) { if(j < 5) { for(j=0; total && j<total && vetA != vetC[j]; j++) { if(j>=total) { vetC[total]=vetA; total++; } } } } } if(total == 0) { printf("Nao ha valores iguais"); } else { printf("\n\nValores iguais: \n"); for(i = 0; i < total; i++) { printf("\n%d", vetC); } } printf("\n\n"); system("pause"); } Compartilhar este post Link para o post Compartilhar em outros sites
lucas _vinicius 1 Denunciar post Postado Dezembro 31, 2014 Bem vamos lá.já que não conseguiu resolver os erros vou mostra-los detalhadamente: #include <stdio.h> // Só há necessidade de usar esta biblioteca pois a <conio.h> esta fora de uso; E a função system("pause") só funciona com a biblioteca <stdlib.h>.mas não vejo necessidade de usa-la// int main() { int vetA[5], vetB[8], vetC[8], i, j, total = 0; //Bem como te disse antes não tinha necessidade de usar a variável 'r';// printf("--- VETOR A ---\n\n"); printf("Informe 5 numeros: \n"); for(i = 0; i < 5; i++) //Laço para salvar os elementos no vetor A// { scanf("%d", &vetA[i]); } printf("--- VETOR B ---\n\n"); printf("Informe 8 numeros: \n"); for(i = 0; i < 8; i++) //Laço para salvar o elementos no vetor B// { scanf("%d", &vetB[i]); } for(i = 0; i < 8; i++) //Salva os elementos repetidos do vetor A no B e os salva no vetor C// { for(j = 0; j < 5; j++) { if(vetA[i] == vetB[j]) { vetC[i] = vetB[j]; total++; } } } if(total == 0) { printf("Nao ha valores iguais"); } else { total--; //decrementa 1 de 'total' pois ele faz 6 incrementos(0 á 5),mas o vetor C possui apenas 5 elementos (0 á 4)// printf("\n\nValores iguais: \n"); for(i = 0; i < total; i++) //laço para a repetição// { printf("\n%d", vetC[i]); } } getchar(); //Função para visualizar o resultado do programa fora do compilador// return 0; } Observe bem onde você errou! 1 Compartilhar este post Link para o post Compartilhar em outros sites
thalesrafaell 1 Denunciar post Postado Janeiro 2, 2015 (editado) Bem vamos lá.já que não conseguiu resolver os erros vou mostra-los detalhadamente: #include <stdio.h> // Só há necessidade de usar esta biblioteca pois a <conio.h> esta fora de uso; E a função system("pause") só funciona com a biblioteca <stdlib.h>.mas não vejo necessidade de usa-la// int main() { int vetA[5], vetB[8], vetC[8], i, j, total = 0; //Bem como te disse antes não tinha necessidade de usar a variável 'r';// printf("--- VETOR A ---\n\n"); printf("Informe 5 numeros: \n"); for(i = 0; i < 5; i++) //Laço para salvar os elementos no vetor A// { scanf("%d", &vetA[i]); } printf("--- VETOR B ---\n\n"); printf("Informe 8 numeros: \n"); for(i = 0; i < 8; i++) //Laço para salvar o elementos no vetor B// { scanf("%d", &vetB[i]); } for(i = 0; i < 8; i++) //Salva os elementos repetidos do vetor A no B e os salva no vetor C// { for(j = 0; j < 5; j++) { if(vetA[i] == vetB[j]) { vetC[i] = vetB[j]; total++; } } } if(total == 0) { printf("Nao ha valores iguais"); } else { total--; //decrementa 1 de 'total' pois ele faz 6 incrementos(0 á 5),mas o vetor C possui apenas 5 elementos (0 á 4)// printf("\n\nValores iguais: \n"); for(i = 0; i < total; i++) //laço para a repetição// { printf("\n%d", vetC[i]); } } getchar(); //Função para visualizar o resultado do programa fora do compilador// return 0; } Observe bem onde você errou! Ok entendi os pontos citados, realmente tava viajando em algumas coisas, mas tem alguns erros ainda, o código aparentemente não deixa "o porque" desse erro acontecer mas vê aí nas imagens alguns exemplos; Deve ser problema na hora da alocação dos espaços dos vetores, nos laços de repetição ou tá faltando alguma incrementação no "for" de comparação. Fugiu um pouco do meu controle isso. Se eu botar: Vetor A : 12345 Vetor B: 12345 Ele dá certinho: 12345 Mas se eu colocar número aleatórios fora de ordem já n funciona. Como deu pra ver aí; (Ah, e usei o System("Pause"), vou precisar dele no exercício e usei agora pra poder mostrar pra voces ;]) Editado Janeiro 2, 2015 por thalesrafaell 1 Compartilhar este post Link para o post Compartilhar em outros sites
Fabiano Amaral 3 Denunciar post Postado Janeiro 2, 2015 (editado) #include <stdio.h> #include <stdlib.h> #define MAX 5 //para não ter de ficar toda hora mudando o tamanho fiz um macro int main(int argc, char **argv){ int i,j,k; //são meus iteradores de for int v1[MAX],v2[MAX]; //obviamente os vetores 1 e 2 de tamanho definidos no macro lá em cima int flag; //essa flag é 0 se o valor não repete nos dois vetores OU ele já foi avaliado antes(caso o vetor um tenha 2 valores repetidos) puts("Digite os valores para V1..."); for(i=0;i<MAX;i++){ scanf("%d",&v1[i]); } puts("Digite os valores do V2..."); for(i=0;i<MAX;i++){ scanf("%d",&v2[i]); } puts("Numeros que se repetem nos dois vetores."); /* abaixo eu faço o seguinte, fixo um elemento no vetor 1 e comparo ele com TODOS do vetor 2, se em algum momento o elemento fixo do vetor 1 for igual a qualquer elemento do vetor 2 eu seto a flag pra true(aquele elemento do vetor um fixo se repete no vetor2) e saio do for com o break já que eu só preciso saber se ele ocorre pelo menos uma vez e não quantas vezes ele aparece */ for(i=0;i<MAX;i++){ flag=0; //para cada elemento do vetor um eu assumo que não exista no vetor 2 for(j=0;j<MAX;j++){ if(v1[i]==v2[j]){ flag=1; break; } } // abaixo eu faco a checagem se esse número do vetor 1 já foi impresso // se já eu seto a flag para falso e ai ele não será mostrado // caso não tenha sido mostrado ainda eu imprimo ele for (k = 0; k < i; k++) { if (v1[k]==v1[i]) { flag=0; } } if(flag){ printf("%d\n",v1[i]); } } return 0; } mudei o código que agora acho que fica mais bem explicado :) Editado Janeiro 2, 2015 por Fabiano Amaral Compartilhar este post Link para o post Compartilhar em outros sites
thalesrafaell 1 Denunciar post Postado Janeiro 2, 2015 #include <stdio.h> #include <stdlib.h> #define MAX 5 //para não ter de ficar toda hora mudando o tamanho fiz um macro int main(int argc, char **argv){ int i,j,k; //são meus iteradores de for int v1[MAX],v2[MAX]; //obviamente os vetores 1 e 2 de tamanho definidos no macro lá em cima int flag; //essa flag é 0 se o valor não repete nos dois vetores OU ele já foi avaliado antes(caso o vetor um tenha 2 valores repetidos) puts("Digite os valores para V1..."); for(i=0;i<MAX;i++){ scanf("%d",&v1[i]); } puts("Digite os valores do V2..."); for(i=0;i<MAX;i++){ scanf("%d",&v2[i]); } puts("Numeros que se repetem nos dois vetores."); /* abaixo eu faço o seguinte, fixo um elemento no vetor 1 e comparo ele com TODOS do vetor 2, se em algum momento o elemento fixo do vetor 1 for igual a qualquer elemento do vetor 2 eu seto a flag pra true(aquele elemento do vetor um fixo se repete no vetor2) e saio do for com o break já que eu só preciso saber se ele ocorre pelo menos uma vez e não quantas vezes ele aparece */ for(i=0;i<MAX;i++){ flag=0; //para cada elemento do vetor um eu assumo que não exista no vetor 2 for(j=0;j<MAX;j++){ if(v1[i]==v2[j]){ flag=1; break; } } // abaixo eu faco a checagem se esse número do vetor 1 já foi impresso // se já eu seto a flag para falso e ai ele não será mostrado // caso não tenha sido mostrado ainda eu imprimo ele for (k = 0; k < i; k++) { if (v1[k]==v1[i]) { flag=0; } } if(flag){ printf("%d\n",v1[i]); } } return 0; } mudei o código que agora acho que fica mais bem explicado :) Dá o mesmo erro do meu último post. // Eu alterei os valores dos vetores pra o que a questão pede (Vetor 1=5, Vetor B = 8) Compartilhar este post Link para o post Compartilhar em outros sites
Fabiano Amaral 3 Denunciar post Postado Janeiro 2, 2015 Acredito que seu erro foi na hora de alterar o código, mudei aqui pra sua questão e funcionou com o exemplo que deu errado no seu, testa ai #include <stdio.h> #include <stdlib.h> #define MAX 5 //para não ter de ficar toda hora mudando o tamanho fiz um macro int main(int argc, char **argv){ int i,j,k; //são meus iteradores de for int v1[5],v2[8]; //obviamente os vetores 1 e 2 de tamanho definidos no macro lá em cima int flag; //essa flag é 0 se o valor não repete nos dois vetores OU ele já foi avaliado antes(caso o vetor um tenha 2 valores repetidos) puts("Digite os valores para V1..."); for(i=0;i<5;i++){ scanf("%d",&v1[i]); } puts("Digite os valores do V2..."); for(i=0;i<8;i++){ scanf("%d",&v2[i]); } puts("Numeros que se repetem nos dois vetores."); /* abaixo eu faço o seguinte, fixo um elemento no vetor 1 e comparo ele com TODOS do vetor 2, se em algum momento o elemento fixo do vetor 1 for igual a qualquer elemento do vetor 2 eu seto a flag pra true(aquele elemento do vetor um fixo se repete no vetor2) e saio do for com o break já que eu só preciso saber se ele ocorre pelo menos uma vez e não quantas vezes ele aparece */ for(i=0;i<5;i++){ flag=0; //para cada elemento do vetor um eu assumo que não exista no vetor 2 for(j=0;j<8;j++){ if(v1[i]==v2[j]){ flag=1; break; } } // abaixo eu faco a checagem se esse número do vetor 1 já foi impresso // se já eu seto a flag para falso e ai ele não será mostrado // caso não tenha sido mostrado ainda eu imprimo ele for (k = 0; k < i; k++) { if (v1[k]==v1[i]) { flag=0; } } if(flag){ printf("%d\n",v1[i]); } } return 0; } 1 Compartilhar este post Link para o post Compartilhar em outros sites
thalesrafaell 1 Denunciar post Postado Janeiro 5, 2015 (editado) Acredito que seu erro foi na hora de alterar o código, mudei aqui pra sua questão e funcionou com o exemplo que deu errado no seu, testa ai #include <stdio.h> #include <stdlib.h> #define MAX 5 //para não ter de ficar toda hora mudando o tamanho fiz um macro int main(int argc, char **argv){ int i,j,k; //são meus iteradores de for int v1[5],v2[8]; //obviamente os vetores 1 e 2 de tamanho definidos no macro lá em cima int flag; //essa flag é 0 se o valor não repete nos dois vetores OU ele já foi avaliado antes(caso o vetor um tenha 2 valores repetidos) puts("Digite os valores para V1..."); for(i=0;i<5;i++){ scanf("%d",&v1[i]); } puts("Digite os valores do V2..."); for(i=0;i<8;i++){ scanf("%d",&v2[i]); } puts("Numeros que se repetem nos dois vetores."); /* abaixo eu faço o seguinte, fixo um elemento no vetor 1 e comparo ele com TODOS do vetor 2, se em algum momento o elemento fixo do vetor 1 for igual a qualquer elemento do vetor 2 eu seto a flag pra true(aquele elemento do vetor um fixo se repete no vetor2) e saio do for com o break já que eu só preciso saber se ele ocorre pelo menos uma vez e não quantas vezes ele aparece */ for(i=0;i<5;i++){ flag=0; //para cada elemento do vetor um eu assumo que não exista no vetor 2 for(j=0;j<8;j++){ if(v1[i]==v2[j]){ flag=1; break; } } // abaixo eu faco a checagem se esse número do vetor 1 já foi impresso // se já eu seto a flag para falso e ai ele não será mostrado // caso não tenha sido mostrado ainda eu imprimo ele for (k = 0; k < i; k++) { if (v1[k]==v1[i]) { flag=0; } } if(flag){ printf("%d\n",v1[i]); } } return 0; } OPA cara é isso aí mesmo, acho que eu tive a imbecilidade de mexer no macro na hora de fazer as alterações mas rodou tranquilo, eu ainda não sou acostumado a usar flag, mas acabei dando uma estudada melhor nele graças a você(s) :))) Só que por causa da flag acabei me confundindo também em outra coisa. Porque eu não queria misturar as coisas na hora de mostrar meu problema real aqui. Mas a questão também pede pra ordenar os valores repetidos. Eu já até tinha feito o código separadamente só pra depois inserir, mas agora com a flag acabei sem saber onde colocar: Segue o código for(int i = 0; i < n; i++) { for(int j = i; j < n; j++) { if(vetor[i] > vetor[j]) { int aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; } } } Editado Janeiro 5, 2015 por thalesrafaell Compartilhar este post Link para o post Compartilhar em outros sites
Fabiano Amaral 3 Denunciar post Postado Janeiro 11, 2015 flag é só uma variável que marca um determinado estado do seu algoritmo, não tem mistério, tem gente que usa qualquer outro nome, mas curto flag por causa do assembly(registrador de flags) mas isso é outro assunto. Desculpa a demora, seu código, conseguiu? Compartilhar este post Link para o post Compartilhar em outros sites
henrique-menna 0 Denunciar post Postado Abril 20, 2018 Boa noite pessoal , gostaria de tira duas duvidas em relação a C, a primeira é que tenho que comparar um vetor de char com outro, para que onde tenha uma letra igual ele fique na posição ex Char letra [2] [26]={'a','b,'c'}, o segunda seria uma frase onde se tive essas letras ele ia comparar, só que essas letras iam ser comparadas com relação ao numero iguais que se repete as letras, não sei se a senhora me entendo. A segunda duvida é como salvar isso e mostra a frase, como se fosse uma descriptografia. tem como fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites