Ir ao conteúdo

Posts recomendados

Postado

Gostaria de manipular os elementos do vetor atualmente só tenho conseguido utilizar ele. por exemplo:

void main (){
//permitir
// /n faz pular uma linha.
// definindo variaveis
int opcao;

while(opcao < 1 || opcao > 3){

printf("\n escolha uma opcao:");
printf("\n 1-opcao 1");
printf("\n 2-opcao 2");
printf("\n 3-opcao 3");

scanf("%d", &opcao);

switch(opcao){
     case 1:
     printf("\n a opção 1 escolhida");
     break;
     case 2:
     printf("\n a opção 2 escolhida");
     break;
     case 3:
     printf("\n a opção 3 escolhida");
     break;

     default:
        printf("\n opcao invalida");
        break;
}
}
}

 

 

Nesse codigo(que é meu): Se opcao fosse um vetor que tivesse elementos

opcao [3]= {1,2,3)

 

como eu faria pra manipoular os elementos de dentro do vetor, não ele por inteiro.

  • Obrigado 1
Postado

@alan.modesto    se ele for do tipo int  ,  você poderia escrever o valor de cada posição dele , 

printf("primeiro element %d\n",opcao[0]); // escreve o que esta na primeira posicao do vetor
                                          // que geralmente eh a posicao zero
printf("segundo elemento %d\n",opcao[1]);
//  e ai vai . . . !

e ainda tem os tipos  string e float , e double e long long ,etc . . .

Postado

@devair1010 ENTAO TO TENTANDO DESENVOLVER ALGO SEMELHANTE PRA UM EXERCICIO AQUI:

Faça uma função que receba a quantidade de elementos e um vetor e retorne 1 se há elementos repetidos neste vetor só que le só compara com o [7] e não todos.
ou 0 se não tem elementos repetidos
Ex: 7, {1,2,3,2,4,6,2}  1 4, {1,222,3,14}

int main() {

int v[7],i,maior=0,igual=0,menor=0;
setlocale(LC_ALL,"Portuguese");

for(i=0;i<7;i++)
 {
    printf("\n Informe o elemento[%d]= ",i);
    scanf("%d",&v[i]);/
 }

for(i=0;i<7;i++)
  {
    if(v[i]>v[0])
    if(v[i+1]==v[7])
     {
       igual=igual+1;
     }

  }
printf("\n números iguais a %d = %d\n",v[7],igual);

return 0;
}

  • Obrigado 1
Postado

@alan.modestoSeu código não está fazendo o que é pedido no enunciado. Aí diz para criar uma função que só deve retornar 1 no caso de elemento repetido ou 0 se não tiver. Faça a função com os dois argumentos, passe os parâmetros e mostre o resultado, p.ex:

int repetido(int vetor[], int quantidade);

 

Essa função pode ter dois loos aninhados com o teste dos repetidos no mais interno.

  • Curtir 1
Postado
6 horas atrás, Midori disse:

@alan.modestoSeu código não está fazendo o que é pedido no enunciado. Aí diz para criar uma função que só deve retornar 1 no caso de elemento repetido ou 0 se não tiver. Faça a função com os dois argumentos, passe os parâmetros e mostre o resultado, p.ex:

int repetido(int vetor[], int quantidade);

 

Essa função pode ter dois loos aninhados com o teste dos repetidos no mais interno.

int main() {

int v[7],i,maior=0,igual=0,menor=0;
setlocale(LC_ALL,"Portuguese");

for(i=0;i<7;i++)
 {
    printf("\n Informe o elemento[%d]= ",i);
    scanf("%d",&v[i]); /*armazenando os elementos na memória */
 }
int busca(int v[], int n, int chv){
int i;
int n = v[];
for (i=0;i<n;i++){
if( v[i]==chv)
return i;
printf("\n números iguais em %d = %d\n",v[7],i);
}
return -1;
printf("\n não há numeros iguais");
  }
return 0;
}

 

Criei uma variavel busca pode me dizer qual o erro agora?

  • Obrigado 1
Postado

@alan.modesto     melhor postar o código todo ,  aí faltou os includes , e fecha chaves ,  e na linguagem c  , não pode colocar funções dentro de outra função , nem dentro da função main ,  que é essa assim :

#include <stdio.h>
int main()      // tipo e nome da funcao
{               // abre chaves para iniciar uma funcao
    return 0;   // se uma funcao é do tipo int ou float precisa retornar algo 
}               // fecha chaves para finalizar uma funcao

e seu código corrigido apenas para compilar poderia ser assim :

#define _CRT_SECURE_NO_WARNINGS // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
int main() 
{
    int v[7], i, maior = 0, igual = 0, menor = 0;
    int n = 7, chv = 5;
    // setlocale(LC_ALL, "Portuguese");

    for (i = 0; i < 7; i++)
    {
        printf("\n Informe o elemento[%d]= ", i);
        scanf("%d", &v[i]); /*armazenando os elementos na memória */
    }
    int ret = int busca( v, n, chv);
    printf("Valor Retornado %d\n\n\n",ret);
    return 0;
}
int busca(int v[], int n, int chv) 
{
    int i;
    int r = v[0];  // precisa informar a posicao do vetor
    for (i = 0; i < n; i++) 
    {
        if (v[i] == chv)
            return i;
        printf("\n números iguais em %d = %d\n", v[7], i);
    }
    return -1;
    printf("\n não há numeros iguais"); // essa linha nuncam seras executada
    return 0;                           // nem essa
}

 

Postado

@alan.modesto     sim ,  dentro da função main você colocou uma variável que recebe o valor retornado da função , então pode escrever esse valor retornado ao fazer um printf com essa variável , ou uma comparação e de acordo com o resultado escrever uma mensagem qualquer ,

11 minutos atrás, devair1010 disse:
int busca(int v[], int n, int chv) 
{

esse int v[] e que recebe todos os dados "números" enviados para essa função

8 minutos atrás, alan.modesto disse:

como eu faço pra armazenar todo os elementos do vetor ali?

não ali nesse  "r"

int r = v[0]; // precisa informar a posicao do vetor

só pode armazenar um número  , e ao postar seria melhor usar esse botão       <>

que está lá na barra de ferramentas da janela de postar

2140412451_barracode.jpg.65277ac6ffa9d6aefc476ad92634ae93.jpg

, é mais fácil de copiar para testar ,

Postado

@devair1010  cara ta compilando, mas não ta obtendo o valor de maneira certa, fiz uns ajustes aqui.

 

#define _CRT_SECURE_NO_WARNINGS // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
int main()
{
    int v[7], i, maior = 0, igual = 0, menor = 0;
    int n = 7, chv = 5;
    // setlocale(LC_ALL, "Portuguese");

    for (i = 0; i < 7; i++)
    {
        printf("\n Informe o elemento[%d]= ", i);
        scanf("%d", &v[i]); /*armazenando os elementos na memória */
    }
    int ret = busca( v, n, chv);
    printf("Valor Retornado %d\n\n\n",ret);
    return 0;
}
int busca(int v[], int n, int chv)
{
    int i;
    int r = v[0];  // precisa informar a posicao do vetor
    for (i = 0; i < n; i++)
    {
        if (v[i] == chv)
            return i;
        printf("\n números iguais em %d = %d\n", v[7], i);
    }
    return -1;
{
        if (v[i] != chv)
            return i;
        printf("\n números iguais em %d = %d\n", v[7], i);
    }
    return 0;
    }

 

  • Amei 1
Postado

@alan.modesto   o compilador lê o código do mesmo modo como as pessoas também leem  :

int busca(int v[], int n, int chv)// esse int v[] , recebe todos os numeros enviados
                                  // e armazena eles na memória
{
    int i;
    int r = v[0];  // precisa informar a posicao do vetor
    for (i = 0; i < n; i++)
    {
        if (v[i] == chv)
            return i;  // o comando return diz para o compilador sair de dentro dessa funcao
                       // e pode retornar um valor de acordo com o tipo da funcao , int ou float , 
                       // mas não pode retornar nada se ela for do tipo void , e string depende do modo como foi
                       // foi criada , e se for criada como ponteiro pode ser retornada
        printf("\n números iguais em %d = %d\n", v[7], i); // e se o return está na linha de cima
                       // ele não vai ler essas linhas daqui para baixo 
    }                  // pois o compilador lê o que você escreveu no editor , igual as pessoas Brasileiras
                       // também leem , ou sejka , comeca em cima na primeira linha e na primeira letra 
                       // da esquerda e vai lendo para a direita e chegando ao final da linha desce para a 
                       // linha de baixo e volta para a primeira letra da esqueda e vai assim até o final
    return -1;         // aqui outro return , e esse eh definitivo , se chegar aqui ele retorna para o 
                       // local onde foi chamada essa funcao , 
{                      // esse abre chaves Aqui , é inutiL 
                       // e essa parte daqui para baixo nunca será executada 
        if (v[i] != chv)
            return i;
        printf("\n números iguais em %d = %d\n", v[7], i);
    }
    return 0;
}

ediga Qual o objetivo desse seu código  ?  ,o que quer que ele realize ? .

Postado
22 minutos atrás, devair1010 disse:

@alan.modesto   o compilador lê o código do mesmo modo como as pessoas também leem  :

int busca(int v[], int n, int chv)
{
    int i;
    int r = v[0];  // precisa informar a posicao do vetor
    for (i = 0; i < n; i++)
    {
        if (v[i] == chv)
            return i;  // o comando return diz para o compilador sair de dentro dessa funcao
                       // e pode retornar um valor de acordo com o tipo da funcao , imt ou float , 
                       // mas não pode retornar nada se ela for do tipo void , e string depende do modo como foi
                       // foi criada , e se for criada como ponteiro pode ser retornada
        printf("\n números iguais em %d = %d\n", v[7], i); // e se o return está na linha de cima
    }                  // e o compilador lê o que você escreu no editor , igual as pessoas Brasileiras
                       // também leem , ou sejka , comeca em cima na primeira linha e na primeira letra 
                       // da esquerda e vai lendo para a direita e chegando ao final da linha dsce para a 
                       // linha de baixo e volta para a primeira letra da esqueda e vai assim até o final
    return -1;         // aqui outro return , e esse eh definitivo , se chegar aqui ele retorna para o 
                       // local onde foi chamada essa funcao , 
{                      // esse abre chaves Aqui , é iutiL 
                       // e essa parte daqui para baixo nunca será executada 
        if (v[i] != chv)
            return i;
        printf("\n números iguais em %d = %d\n", v[7], i);
    }
    return 0;
}

 

Dei uma alterada no parte que faz a contagem dei um valor para R COMO FAZER para ele contar certinho agora. percebi que contou quando coloquei todos os valores como 0 que é o valor inicial de R, contou e mostrou -1 certinho. como fazer isso em qualquer que esteja se repetindo. 
#define _CRT_SECURE_NO_WARNINGS // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
int main()
{
    int v[7], i, maior = 0, igual = 0, menor = 0;
    int n = 7, chv = 5;
    // setlocale(LC_ALL, "Portuguese");

    for (i = 0; i < 7; i++)
    {
        printf("\n Informe o elemento[%d]= ", i);
        scanf("%d", &v[i]); /*armazenando os elementos na memória */
    }
    int ret = busca( v, n, chv);
    printf("Valor Retornado %d\n\n\n",ret);
    return 0;
}
int busca(int v[], int n, int chv)
{
    int Soma;
    int i;
    int r = v[7];
    for (i = 0; i < n; i++)
    {
        if (v[i] == r)

             // o comando return diz para o compilador sair de dentro dessa funcao
                       // e pode retornar um valor de acordo com o tipo da funcao , imt ou float ,
                       // mas não pode retornar nada se ela for do tipo void , e string depende do modo como foi
                       // foi criada , e se for criada como ponteiro pode ser retornada
        printf("\n números iguais em %d = %d\n", v[7], -1); // e se o return está na linha de cima
    }
    return -1;
    return 0;
}

 

Percebi um erro aqui, eu devo valorar o vetor de fora da main.

int v[7] = {0,1,2,3,4,5,6};

fiz assim

  • Obrigado 1
Postado

@alan.modesto    olá ,   mas o que você Quer fazer aí ? ,  ainda não sei o que você pretende ! , pois para fazer um código precisa saber a qual  resultado chegar  ,  e outra coisa , ali na função você colocou int r = v[7] , mas isso não significa que r vai receber todos os 7 números , não ,  pois a variável r é uma simples  e só pode armazenar mesmo um único dado nela  a cada momento ,  e então Qual sua ideia ao usar essa variável ?

Postado

Eu quero que a funaçao receba uma quantidade de elementos do vetor e retorne se é igual ou não aos dados a ela entendeu? vai comparar e depois retornar -1 se for igual e 0 se não for igual.

  • Obrigado 1
Postado

Olá, uma técnica usual para solução desse exercício consiste em comparar 1 com todos de todos, assim se um dado índice; sendo um elemento, escolhido e comparado com "conjunto", resolve-se que existe apenas 1x repetição é porque não há cópias desse elemento.

 

Outra técnica consististe em usar segundo vetor chamado tabela hash, associado pelos valores dos índices o número de ocorrências, tal que pelos menos existirá uma ocorrência da chave indicando não haver repetição, ou mais de uma ocorrência indicando muitas repetições.   

  • Obrigado 1
Postado
13 horas atrás, alan.modesto disse:

Criei uma variavel busca pode me dizer qual o erro agora?

Você quer buscar um elemento no vetor ou saber se há elementos repetidos nele? São duas coisas diferentes e o enunciado sugere a segunda.

 

Sobre a sua função da busca ela pode ser mais simples,

int busca(int v[], int n, int chv){
    for(int i = 0; i < n; i += 1){
        if(v[i] == chv){
            return i;
        }
    }
    return -1;
}

 

Sem printf porque normalmente a função apenas retorna o valor. E em main é onde você deve mostrar alguma mensagem de acordo com esse retorno, p.ex:

int retorno = busca(vetor, 7, valor);

if(retorno == -1){
    printf("O valor %d não existe", valor);
}else{
    printf("O valor %d esta na posicao %d", valor, retorno);
}

 

  • Obrigado 1
Postado

@alan.modesto    então o que você quer é enviar dois vetores que estão dentro da função  main  , e  já preenchidos , para uma função externa que vai comparar os números nos dois vetores para saber sevtem algum número de um vetor que es

14 horas atrás, alan.modesto disse:

funaçao receba uma quantidade de elementos do vetor e retorne se é igual ou não aos dados a ela

uma função por si mesma  não tem nenhum dado nela ,  mas creio que o que você quis dizer é que essa função vai comparar os números de dois vetores para saber se tem algum número igual nos dois vetores , e aí retorna 1 se tiver ou zero se não tiver  ,  então dentro da função  main  , você cria e preenche esses dois vetores , que pode ser feito com scanf  , ou direto no código ,  e chama a função externa enviando os nomes dois vetores, e o tamanho de cada vetor ,  e sendo Que cada variável enviada é separada por uma vírgula , e uma outra variável para pegar o valor retornado da função :

#include <stdio.h>
int func_verifica( int* , int* , int , int ); // protótipo de funcao  
                                          // para informar ao compilador que essa funcao
                                          // esa la no final depois da funcao main
                                          // se não não dá erro e não compilará
                                          // aqui pode colocar apenas o tipo dos dados
                                          // que sao 2 ponteiro para inteiro e 2 inteiro
int main()                                // geralmente a funcao main é declarada como int
{
    int vet_1[7] = { 1,2,3,4,5,6,7 };     // criou e inicializou um vetor de 7 elementos ou posições
    int vet_2[7] = { 8,9,1,4,11,12,15 };  // criou e inicializou outro vetor de 7 elementos ou posições
    
    int ret = func_verifica( vet_1 , vet_2 , 7 , 7 ); // a variável ret vai receber o valor retornado da funcao
    // assim chama afuncao e envia os dados para qq funcao "os que estão dentro dos parenteses" que sao os parâmetros
    // ali vet_1 e vet_2 sao os vetores já preenchidos e 7 e 7  sao os respectivos tamanhos deles
    if( ret == 1) printf("tem numeros repetidos\n\n");// se ret igual a 1 
    if( ret == 0) printf("não tem numeros repetidos\n\n");// se ret igual a zero
    printf("\n\n\n");
    return 0;  
}
int func_verifica(int v1[] , int v2[] , int t1 , int t2 )  // 
{
    // aqui voce coloca os comandos para fazer as comparacoes
    // e retorna 1  ou  zero
}  

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...