×
Ir ao conteúdo
  • Cadastre-se

C Como manipular elementos de 1 vetor?


alan.modesto

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
}

 

Link para o comentário
Compartilhar em outros sites

@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 ,

Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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 ?

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
}  

 

Link para o comentário
Compartilhar em outros sites

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

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.