FernandoG Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 (editado) 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 Outubro 23, 2008 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 Da uma olha... O grande problema agora é dxar usuario digitarquantos 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; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 O grande problema agora é dxar usuario digitarquantos 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] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 O grande problema agora é dxar usuario digitarquantos 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 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) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 Meu professor...No caso eu uso realloc() funcionaria melhor ?cara eu vi os exemplos... Muito com a site valeu msmo... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 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: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 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 comentariovi 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 aprendersobre e como se usa... Coisa que tah me fazendo apanhar muito...valeu cara! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 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"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 FernandoG Postado Outubro 23, 2008 Autor Denunciar Share Postado Outubro 23, 2008 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
FernandoG
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!
Editado por kuroiAdicionar tag CODE
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
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.