Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiro em função.


FernandoG

Pergunta

O seguinte exercicio me foi passado:

"Crie uma função que receba um vetor de inteiros e converta cada número para seu valor absoluto.

O tamanho do vetor deve ser passado como parametro para a função, assim como o proprio vetor."

Não sei como usar a função, e acho que ela não esta certa...

Como usar ponteiro em uma função como essa?

E usar ela no programa?

Se alguém puder me ajudar... valeu!

#include <iostream>

float var_abs(float vet[],int tam)
{
for(int i=0;i<tam;i++)
{
if(vet[i]<0)
vet[i] = vet[i]*(-1);
}

}
int main()
{
float Val;
int Num;


printf("\t\t\t\tVALOR ABSOLUTO\n");
printf("Entre com os Numeros:\n ");
scanf("%d",&Num);
scanf("%f",&Val);
Num=varabs(Val,Num);

printf(Num);
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

fernando sempre q for posta, poe o codigo dentro da tag CODE pra ficar mais facil de ver, beleza??

exemplo:

[c.o.d.e]

isso é código

[/c.o.d.e]

so q sem os pontos pra escrever code.

agora quanto ao seu codigo a funcao ta certa, mas o codigo do main é q ta errado.

você já não tentou compilar?? sempre tenta compila e ve q problemas o compilador aponta.

na verdade o unico problema na funcao é q você declarou ela como float, mas na verdade ela não tem q retorna valor. você vai simplesmente altera o vetor, e como vetor é sempre passado por referencia, o vetor original vai ficar alterado automaticamente. então você pode declara a funcao como void.

a não ser q, no exercicio você não possa alterar o vetor original e a funcao tenha q retornar o vetor alterado. ai nesse caso você teria q declarar a funcao como pontero de int e ainda alocar espaco na memoria pra retorna-lo. mas ai se fosse o caso acho q seu professors teriam especificado.

otro detalhe é q você disse

"Crie uma função que receba um vetor de inteiros...

mas float não é inteiro, você podia declarar como int.

quanto ao main, veja q você declarou o val, mas não declaro como vetor. a funcao não devia receber um vetor?? você declarou a funcao correto recebendo o vetor, mas na hora de passar tem q pasas tb um vetor.

ai você devia fazer um for pra ler todos os indices do vetor. e ai depois podia fazer um otro for pra escreve o resultado.

veja se resolve ai, qualquer coisa poste.

Link para o comentário
Compartilhar em outros sites

  • 0

Da uma olha... O grande problema agora é dxar usuario digitar

quantos numeros eu quiser... Eu não sei fazer a função parar...

#include <stdio.h>

void ConverteNumerosAbs(int vet[], int qtd)
{
    int i;
    
    for(i=0; i<qtd; i++)
    {
        if(vet[i] < 0) (vet[i]) *= (-1);        
    }
}

int main()
{    
    int num[5], i;

    printf("\t\t\t\tVALOR ABSOLUTO\n");
    printf("Entre com 5 valores\n ");
    
    for (i=0; i<5; i++)
    {
        printf("\nDigite um numero: ");
        scanf("%i",&num[i]);        
    }
    
    ConverteNumerosAbs(num, 5);

    for (i=0; i<5; i++)
    {
        printf("\n%i", num[i]);
    }
    
    return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0
O grande problema agora é dxar usuario digitar

quantos numeros eu quiser...

você quer dizer q o usuario vai escolhe o tamanho do array?? tipo qtos numeros ele quer digitatr??

se for isso, você pode pedir pra ele digitar o tamanho e criar o array cum esse tamanho. exemplo:

int tam;
printf("Digite o tamanho do array");
scanf("%d", &tam);

int num[tam], i;[/code]

Link para o comentário
Compartilhar em outros sites

  • 0
O grande problema agora é dxar usuario digitar

quantos numeros eu quiser...

você quer dizer q o usuario vai escolhe o tamanho do array?? tipo qtos numeros ele quer digitatr??

se for isso, você pode pedir pra ele digitar o tamanho e criar o array cum esse tamanho. exemplo:

int tam;
printf("Digite o tamanho do array");
scanf("%d", &tam);

int num[tam], i;

Já tentei isso e ele não aceitou...

você sabe como colocar essa função usando ponteiro...

Assim o usuario digita os numeros e quanda...

então ele poderia digitar quantos quizec...

e depois o programa buscaria tdo no ponteiro!

Será que tem como fazer isso?

Link para o comentário
Compartilhar em outros sites

  • 0
Já tentei isso e ele não aceitou...

quem não aceitou?? seu professor??

porque o compilador não tem porque não aceitar. eu mesmo digitei esse codigo aqui no dev c++ e rodou sem problema nenhum. qual a mensagem de erro q aparece??

você sabe como colocar essa função usando ponteiro...

Assim o usuario digita os numeros e quanda...

então ele poderia digitar quantos quizec...

e depois o programa buscaria tdo no ponteiro!

você quer dizer q o usuario não tem limite de digitar?? pode digitar ate cansar??

mas e ai como faria quando quisesse parar?? se ele digitasse 0 parava, seria tipo isso??

se for o q acontece é q todo vetor é um pontero. ou seja, você já ta fazendo sim com pontero, a unica diferenca é q quando você declara o array você tem q dar o tamanho na hora da declaracao assim ele já aloca o espaco.

agora se você declarar como pontero você tb vai ter q alocar o espaco. se não tem espaco alocado não tem onde digitar. ai ou você usaria o new, ou a funcao malloc() pra aloca o espaco.

mas ai acontece q como não tem limites você não sabe qual o tamanho do espacao q vai ter q alocar certo?? ai você teria q usar o realloc() pra realocar o espaco a cada numero. mas entenda q não é muito bom ficar fazendo isso. realocando o espaco toda vez. tb bem pra programinha pequeno tipo esse sem problema, mas acontece q no realloc(), se ele não encontra espaco depois de onde já ta alocado ele tem q mover tudo q ele aloucou pra otro espaco. e ai em sistemas gdes você pode ter problema de desempenho. alem de q não é legal ficar brincando ca memoria assim. o legal seria você ter uma nocao de quanto espaco é usado normalmente e quando abrir já aloca essa qtde. e ai só realocaria se passasse disso.

exemplos de malloc() e realloc() aqui:

http://www.cplusplus.com/reference/clibrary/cstdlib/ (desca a barra ate Dynamic memory management)

Link para o comentário
Compartilhar em outros sites

  • 0
Meu professor...

No caso eu uso realloc() funcionaria melhor ?

hum... então ai tem q ver o q o seu professor ensinou... dependendo da materia q ele passou ele pode querer q você use alguma coisa diferente.

você pode fazer como eu falei, no comeco você aloca o espaco pra 1 com o malloc(). e ai você faz um while enqto ele não digita 0 e ponha um contador. e vai realocando mais 1, de acordo com o contador.

e ai pra chamar a funcao você passa o contador de segundo parametro.

ou talvez ficasse mais legal assim. tipo de inicio aloca o espaco pra um numero gde (mas não tanto), tipo pra 20 numeros. não acho q o usuario vai querer digita mais q isso. ai se o contador passar de 20, aloca mais 20 e assim por diante. quando contador for multiplo de 20 você aloca. seila, pode só ser coisa minha, mas não gosto da ideia de ficar mexendo na memoria.

mas ainda acho q a melhor opcao era essa q falei aqui:

você quer dizer q o usuario vai escolhe o tamanho do array?? tipo qtos numeros ele quer digitatr??

se for isso, você pode pedir pra ele digitar o tamanho e criar o array cum esse tamanho. exemplo:

Link para o comentário
Compartilhar em outros sites

  • 0

Ele encinou sobre esse tipo de locação de memoria msmo...

Eu que não soube dizer na pergunta mas assim que vi o seu comentario

vi que você tinha ido direto no asunto...

Do jeito que você falou vai ficar legal...

Vou fazer aki e postar...

Realmente não é bom ficar brincando com a memoria é preciso aprender

sobre e como se usa... Coisa que tah me fazendo apanhar muito...

valeu cara!

Link para o comentário
Compartilhar em outros sites

  • 0

Não tah dando certo pra colocar a função no programa!

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
void ConverteNumerosAbs(int vet[], int qtd)
{
    int i;
    
    for(i=0; i<qtd; i++)
    {
        if(vet[i] < 0) (vet[i]) *= (-1);        
    }
}


int main ()
{
  int input,n;
  int cont=0;
  int * Num = NULL;

  do {
     printf ("Digite o numero (0 para sair): ");
     scanf ("%d", &input);
     cont++;
     Num = (int*) realloc (Num, cont * sizeof(int));
     if (Num==NULL)
       { puts ("Erro de locação de memoria"); exit (1); }
     Num[cont-1]=input;
  } while (input!=0);

  printf ("Numeros inscritos: ");
  for (n=0;n<cont;n++) printf ("%d ",Num[n]);
  
  free (Num);
  return 0;
  system("PAUSE");
}

Link para o comentário
Compartilhar em outros sites

  • 0

porque não??

copiei seu codigo aqui, compilei e deu tudo certo.

adicionei a linha:

ConverteNumerosAbs(Num, cont);

antes dos printf e mostrou o valor absoluto tudo certinho.

a unica otra alteracao q teria q fazer é por o return 0 depois do system("pause"), porque o return sai do programa.

Link para o comentário
Compartilhar em outros sites

  • 0
porque não??

copiei seu codigo aqui, compilei e deu tudo certo.

adicionei a linha:

ConverteNumerosAbs(Num, cont);

antes dos printf e mostrou o valor absoluto tudo certinho.

a unica otra alteracao q teria q fazer é por o return 0 depois do system("pause"), porque o return sai do programa.

valeu cara... muito obrigado msmo!

Tdo certo!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...