Jump to content
Dougg_Ghost

Ajuda em Ponteiros e funções

Recommended Posts

Basicamente, tenho esse exercício (que foi passado em duas provas de C na faculdade), e nas duas acabei deixando em branco por não ter ideia de como fazer (nem como começar), não queria pedir resolução, mas sim explicação e se possível uma ajuda com código.
Realmente não tenho ideia do que fazer por isso não coloquei meu código.

Segue enunciado:

Escreva uma função remove_dup(floatv[],int n) que receba o vetor e verifique a existência de elementos duplicados. Caso não existam elementos duplicados retorne 0. Caso existam, remova estes elementos (deixando apenas um) e retorne o número de elementos removidos.

Share this post


Link to post
Share on other sites

os parametros da função são o vetor e o numero de elementos nele.

dentro da função vc percorre o vetor olhando de repete algum. Se não repetir nenhum retorna 0, se repetir é meio complicado, mas vc desenrola um algoritmo para "remover" os repetidos. consegue fazer?

  • +1 1

Share this post


Link to post
Share on other sites

explica uma coisa, suponhamos o seguinte vetor:

1 | 2 | 2 | 3 | 4

 

a função vai mexer nesse segundo dois. Mas é para o vetor ficar assim:

 

1 | 2 | | 3 | 4

 

ou assim?

 

1 | 2 | 3 | 4

 

se sua duvida for na hora da passar o vetor, na hora de chamar a função:

 

funcaoRomover(nomeDoVetor, tamanhoDoVetor); "o nome do vetor é sem colchete mesmo"

 

dentro da função você trabalha normal com o vetor como trabalharia dentro da main

Share this post


Link to post
Share on other sites

explica uma coisa, suponhamos o seguinte vetor:

1 | 2 | 2 | 3 | 4

 

a função vai mexer nesse segundo dois. Mas é para o vetor ficar assim:

 

1 | 2 | | 3 | 4

 

ou assim?

 

1 | 2 | 3 | 4

 

se sua duvida for na hora da passar o vetor, na hora de chamar a função:

 

funcaoRomover(nomeDoVetor, tamanhoDoVetor); "o nome do vetor é sem colchete mesmo"

 

dentro da função você trabalha normal com o vetor como trabalharia dentro da main

 

Então, se eu entendi bem, a função ficaria 1|2|3|4.

Sou iniciante em ponteiro e.e, por isso to com tantas dúvidas

Share this post


Link to post
Share on other sites
remover(int vet[], int n)
{
    int i, j;
    for(i=1; i<n; i++)
    {
        for(j=0; j<i; j++)
        {

            if(vet[i]==vet[j])
            {
                vet[i]=-1;
            }
        }
    }

}

olha, essa função coloca o valor -1 no lugar dos repetidos, foi o que eu consegui pensar, mas se vc quiser "espremer" os valores, tenta fazer uma que percorra o vetor e quando encontrar -1, substitua o valor pelo proximo numero

  • +1 1

Share this post


Link to post
Share on other sites
remover(int vet[], int n)
{
    int i, j;
    for(i=1; i<n; i++)
    {
        for(j=0; j<i; j++)
        {

            if(vet[i]==vet[j])
            {
                vet[i]=-1;
            }
        }
    }

}

olha, essa função coloca o valor -1 no lugar dos repetidos, foi o que eu consegui pensar, mas se você quiser "espremer" os valores, tenta fazer uma que percorra o vetor e quando encontrar -1, substitua o valor pelo proximo numero

 

Cara, muito obrigado mesmo!! :D

Share this post


Link to post
Share on other sites
Em 28/06/2016 at 13:23, agness disse:

olha, essa função coloca o valor -1 no lugar dos repetidos, foi o que eu consegui pensar, mas se você quiser "espremer" os valores, tenta fazer uma que percorra o vetor e quando encontrar -1, substitua o valor pelo proximo numero

Apenas colocar o valor -1 no lugar dos elementos duplicados não resolve o problema pois esses elementos continuarão existindo lá no vetor sem ser removidos e seu valor somente será alterado para outro.

Você deve pegar os elementos duplicados do vetor e arrastar para o lugar deles os não duplicados, substituindo-os e ao mesmo tempo incrementar um contador de elementos substituídos para depois retornar esse contador que automaticamente já irá ser 0 caso não exista algum número que esteja duplicado: 

 

int remove_dup(float v[], int n);

void arrasta_proximos(float v[], int n, int posicao);

int main(){
  int i,conta_removidos;
  float vetor_de_floats[10];
  vetor_de_floats[0]=2;
  vetor_de_floats[1]=2;
  vetor_de_floats[2]=4;
  vetor_de_floats[3]=5;
  vetor_de_floats[4]=6;
  vetor_de_floats[5]=6;
  vetor_de_floats[6]=8;
  vetor_de_floats[7]=9;	
  vetor_de_floats[8]=10;
  vetor_de_floats[9]=11;
  printf("Vetor com valores duplicados:");
  for(i=0;i<10;i++)
    printf("%f\n",vetor_de_floats[i]);
  conta_removidos=remove_dup(vetor_de_floats,9);
  printf("\nVetor apos a remocao dos duplicados:");
  for(i=0;i<(10-conta_removidos);i++)
    printf("%f\n",vetor_de_floats[i]);
  printf("\nO numero de elementos duplicados e: %d",conta_removidos);
  system("pause");    
}

int remove_dup(float v[], int n){
  int i,j,conta_dup=0;
  for(i=0;i<n;i++)
    for(j=i+1;j<=n;j++)
      if (v[i]==v[j]){
        conta_dup++;        
        arrasta_proximos(v, n, i);        
        n--;        
      } 
  return conta_dup;
}
  //Vai arrastar os proximos elementos do vetor uma posicao atras no lugar do que esta sendo removido
void arrasta_proximos(float v[], int n, int posicao){
  int i,j;
  float temp;  
  i=posicao;
    for(j=posicao+1;j<n;j++){      
      v[i]=v[j];      
      v[j]=v[j+1];
      i++;
  }
  if(j==n){
    v[i]=v[j];
  }
}
 
Edited by Wilkyn Fernandes Taborda
Apenas agora noto que há a opção para inserir códigos-fonte de computadores diferente de texto comum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By jeredy
      Tenho um trabalho da faculdade e não consigo fazer rodar o programa corretamente.
      Quando eu coloco o cpf, na hora de imprimir sai um número aleatório. Creio que possa ser por falta de memória pois se coloco um número menor ele sai certo, porém não consigo adicionar memória em cpf.
       
      Obs: ainda não fiz a parte dos menores e da medial do grupo e a parte de imprimir em tabela pois não consegui fazer funcionar nem um básico mas se alguém souber essa parte também e puder me ajudar agradeço!!
       
      #include <stdio.h> #include <stdlib.h> main(){ struct funcionarios{ int *cpf; char nome[30]; int nascimento; float salario; }; int aux=0; //para testar se for 0 antes de armazenar o cpf struct funcionarios *func; int qtdLeitura=0, i=0, cont=0; func = ((struct funcionarios *) (malloc(sizeof(struct funcionarios) * 1))); while(1){ printf("Digite o cpf %d: ", i+1); scanf("%d", &aux); if(aux!= 0){ func.cpf = aux; fflush(stdin); } else{ break; } if(func != NULL){ qtdLeitura++; func = ((struct funcionarios *) realloc(func, sizeof(struct funcionarios) *(qtdLeitura+1))); } printf("Digite o nome %d: ", i+1); scanf("%s", func.nome); printf("Digite o nascimento %d: ",i+1); scanf("%d", &func.nascimento); printf("Digite o salario %d: ",i+1); scanf("%f", &func.salario); cont++; i++; } printf("\n\n"); for(i=0;i<cont;i++){ printf("Cpf %d:%d \n",i+1, func.cpf); printf("Nome %d: %s\n",i+1, func.nome); printf("Nascimento %d: %d\n",i+1, func.nascimento); printf("Salario %d: %.2f\n",i+1, func.salario); } }
       

    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
    • By Diogo Dall'Orto
      Ola pessoal boa tarde.
      Por  gentileza preciso da vossa ajuda.
       
      O programa para verificar o maior,  menor e seus respectivos índices eu consegui fazer conforme podem observar no código e saída abaixo, o problema esta quando tenho que implementa-lo na função.
       
      #Escreva um programa em Python com uma função que recebe por parâmetro uma lista de números inteiros e retorna o índice em que se encontra o maior elemento da lista.
      #Escreva um programa em Python com uma função que recebe por parâmetro uma lista de números inteiros e retorna o índice em que se encontra o menor elemento da lista.
       
      Estou a uma semana agarrado nisso! Help please!
       
      # Criar um programa em python que cria # uma lista com 10 elementos. Após isso # implementar o algoritmo para verificar e # exibir o maior elemento do vetor lista = list() for i in range(1, 11): lista.append(int(input(f'{i} - Digite um valor: '))) pos = maior = menor = indice = indicemai = indicemen = 0 while pos < len(lista): if pos == 0: maior = menor = lista[pos] indice = pos else: if lista[pos] > maior: maior = lista[pos] indicemai = pos pos += 1 while pos < len(lista): if pos == 0: menor = maior = lista[pos] indice = pos else: if lista[pos] < menor: menor = lista[pos] indicemen = pos pos += 1 print() print(f'Maior valor na lista esta é {maior}, e esta na posicao [{indicemai}] ') print(f'Menor valor na lista esta é {menor}, e esta na posicao [{indicemen}]') "D:\Python\Projetos Pycharm\venv\Scripts\python.exe" "D:/_____Impacta_____/Python/Projetos Pycharm/MaiorValorNoVetor.py" 1 - Digite um valor: 34 2 - Digite um valor: 54 3 - Digite um valor: 65 4 - Digite um valor: 76 5 - Digite um valor: 87 6 - Digite um valor: 34 7 - Digite um valor: 54 8 - Digite um valor: 23 9 - Digite um valor: 54 10 - Digite um valor: 45 Maior valor na lista esta é 87, e esta na posicao [4] Menor valor na lista esta é 34, e esta na posicao [0] Process finished with exit code 0  
       
    • By LucasOficial
      Me foi passado um trabalho de faculdade que consiste em:
      imagine um vetor inicialmente vazio com capacidade CAP.
      cria um programa que através de um menu permita o usuário
      inserir um novo numero
      remover um valor
      remover o elemento de uma determinada posição
      alteração de um valor por outro
      buscar determinado valor e dizer sua posição (caso exista)
      exibição de todos os elementos do vetor
       
      quero algumas ideias de como começar, quais funções, variáveis usar. sou bastante leigo nesse assunto.
    • By Charles Ramos
      Bom dia, estou com uma dificuldade em um algoritmo para um jogo da forca em VisuALG, o algoritmo foi solicitado para um trabalho e um dos requisitos é que ele tenha uma função, como vocês podem ver foi colocado uma função, porém a professora disse que aquela função não retorna nenhum valor, e por isso ela se encaixa como procedimento, pesquisei, tentei e não conseguir encaixar uma função nesse algorítimo, queria acrescentar também a cada final de rodada a opção de jogar ou não novamente.
      desde já agradeço a ajuda. 
       
      abaixo segue o Algorítimo - obs o visuALG utilizado foi o 2.0
       
      algoritmo "Jogo da forca"
      var
      op,frutas,ne,na:inteiro //op: opçao, ne: numero erro, na:numero de acertos
      l1,l2,l3,l4,l5,l6,l7,ld1,ld2,ld3,ld4,ld5,ld6,ld7,dig,verifica:caracter //linhas(l1,l2,l3...) serão usadas para o aleatorio, já as ld (ld1, ld2, ld3) serão usadas para verificar o acerto
      V,D:Caracter
      funcao Derrota () :caracter
      inicio
                        Escreval("============================================================")
                        escreval("============================================================")
                        escreval
                        escreval(" --------- FIM  DE JOGO! ------- ")
                        ESCREVAL
                        ESCREVAL(" --------- GAME OVER =( ------- ")
                        ESCREVAL
                        Escreval("============================================================")
                        escreval("============================================================")
      fimfuncao
      funcao   vitoria () : caracter
      inicio

                        limpatela
                        Escreval("============================================================")
                        escreval("============================================================")
                        escreval
                        escreval(" PARABÊNS VOCE VENCEU!  ")
                        ESCREVAL
                        Escreval("============================================================")
                        escreval("============================================================")
                        fimfuncao
      inicio
      aleatorio on  // ativa o modo aleatorio fonte, palavra on é opcional
      aleatorio 1,7 // seleciona o ranger do aleatorio, é preciso definir para o comando ter as opção para escolha
      leia (frutas) // todo leia vai ser lançado um numero aleatorio nesse caso de 1 a 3
      aleatorio off  // desativa o modo aleatorio, assim ele escolher uma das opções das palavras.
      limpatela  // limpa tela
      repita // (repita 1) repitir o comando ate achar o comando interrompa
      escreval("---SEJA BEM VINDO---")
      escreval
      escreval(" ---JOGO DA FORCA--- ")
      escreval("Autores: Charles Ramos, Pedro Duca, Richard Vepo")
      escreval
      escreval
      escreval("Digite 1 para jogar e 0 para sair")
      leia(op)
      escolha op // verificar qual opção foi selecionada
             caso 0 //sair
                  escreva("você escolheu a opção 0 para sair")
                  escreval
                  escreval
                  fimalgoritmo  // encerrar o algoritmo
             caso 1
                  interrompa  // para o loop de escolher opção
             outrocaso   // caso digite algo diferente de 0 ou 1 ele vai limpar a tela
             limpatela   // limpa a tela, e vai voltar para o loop de opção.
      fimescolha
      fimrepita// fim repita 1
      escolha frutas // palava que vai ser escolhida automaticamente pelo aleatorio no inicio do código em aleatorio on
              caso 1
                   l1 <- "d"
                   l2 <- "a"
                   l3 <- "m"
                   l4 <- "a"
                   l5 <- "s"
                   l6 <- "c"
                   l7 <- "o"
              caso 2
                   l1 <- "a"
                   l2 <- "b"
                   l3 <- "a"
                   l4 <- "c"
                   l5 <- "a"
                   l6 <- "x"
                   l7 <- "i"
              caso 3
                   l1 <- "a"
                   l2 <- "b"
                   l3 <- "a"
                   l4 <- "c"
                   l5 <- "a"
                   l6 <- "t"
                   l7 <- "e"
              caso 4
                   l1 <- "a"
                   l2 <- "c"
                   l3 <- "e"
                   l4 <- "r"
                   l5 <- "o"
                   l6 <- "l"
                   l7 <- "a"
              caso 5
                   l1 <- "l"
                   l2 <- "a"
                   l3 <- "r"
                   l4 <- "a"
                   l5 <- "n"
                   l6 <- "j"
                   l7 <- "a"
              caso 6
                   l1 <- "p"
                   l2 <- "e"
                   l3 <- "s"
                   l4 <- "s"
                   l5 <- "e"
                   l6 <- "g"
                   l7 <- "o"
              caso 7
                   l1 <- "g"
                   l2 <- "u"
                   l3 <- "a"
                   l4 <- "r"
                   l5 <- "a"
                   l6 <- "n"
                   l7 <- "a"
      fimescolha

      ld1 <- "_"           // LINHAS USADAS PARA ESCREVER
      ld2 <- "_"
      ld3 <- "_"
      ld4 <- "_"
      ld5 <- "_"
      ld6 <- "_"
      ld7 <- "_"

               // inicio do jogo
                repita //repita2
                       se (ne > 7) entao  // Se número de erros for maior que 6 que é o tamanho das palavras logo, jogador perde, ou seja, jogador possui 6 chances apenas.
                         D<- Derrota
                        FIMALGORITMO
                       fimse

                       se (ld1 <> "_") e (ld2 <> "_") e (ld3 <> "_") e (ld4 <> "_") e (ld5 <> "_") e (ld6 <> "_") e (ld7 <> "_") entao // Se as linhas forem diferentes de _ significa que existe letra no local,
                         V<- Vitoria
                        FIMALGORITMO
                        fimse

                limpatela
                Escreval("============================================================")
                escreval("============================================================")
                escreval("")
                escreval("    /-----|")
                escreval("   /      |")
                se (ne > 0 ) entao
                   escreval("  /     (x.x)")
                senao
                   escreval("  /")
                fimse
                se (ne > 1 ) entao
                     escreval(" |      __||__  ")
                senao
                     escreval(" |   ")
                fimse
                se (ne > 2 ) entao
                   escreval(" |     /|     |\\")
                senao
                   escreval(" |   ")
                fimse
                se (ne > 3) entao
                   escreval(" |   /  |_____| \\")
                senao
                     escreval(" |   ")
                fimse
                se (ne > 4) entao
                   escreval(" |       ||  ||")
                senao
                     escreval(" |      ")
                fimse
                se (ne > 5) entao
                   escreval(" |      _|| _||")
                senao
                   escreval(" |     ")
                fimse
                se (ne > 6) entao
                   escreval(" |     |__||__|")
                   escreval("=====                ULTIMA CHANCE! ")
                senao
                     escreval(" |    ")
                   escreval("=====               ")
                fimse
      escreval("")
      escreval("Acertos: ",na)
      escreval("Erros: ",ne)
      escreval("")
      escreva("Palavra com 7 letras:     ",ld1," ",ld2," ",ld3," ",ld4," ",ld5," ",ld6," ",ld7)
      Escreval("")
      escreval("Dica da palavra: FRUTA ")
      escreval
      escreva("digite uma letra: ")
      leia(dig)

      verifica <- "0"
      se (l1 = dig) e (ld1 = "_") entao
           ld1 <- dig
           na <- na + 1
           verifica <- "1"
      fimse

      se (l2 = dig) e (ld2 = "_") entao
               ld2 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l3 = dig) e (ld3 = "_") entao
               ld3 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l4 = dig) e (ld4 = "_") entao
               ld4 <- dig
               na <- na + 1
               verifica <-  "1"
      fimse
      se (l5 = dig) e (ld5 = "_") entao
               ld5 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l6 = dig) e (ld6 = "_") entao
               ld6 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (l7 = dig) e (ld7 = "_") entao
               ld7 <- dig
               na <- na + 1
               verifica <- "1"
      fimse
      se (verifica = "0") entao
      ne <- ne + 1
      fimse
      escreval("==============================================================")
      escreval("==============================================================")
                fimrepita

      fimalgoritmo
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.