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

Problema na execução.


O (RaeL)

Pergunta

Estou estudando programação em c++.

Quando eu compilo um exemplo uma apostila para enteder os códigos o executável informa 0.000000

Não entendo o motivo.

Alquem poderia me dizer onde está o erro? Na seguência está o código e eu uso o dev-c++4992. aguardo.

#include<stdio.h>
#include<conio.h>

int main ()
{
float matrx [50][50];
float *p;
int count;
p=matrx[0];
for (count=0;count<2500;count++)
{
*p=0.0;
p++;
}
printf("%f", *p);
getch();
}

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
pelo que entendi no código, é isso mesmo que tem que acontecer, me parece que tu está atribuindo 0.0 para todas as posições do array. Qual o obgetivo desta rotina?

Essa rotina é apenas uma ilustração de como fazer uso de ponteiros. O seu código original como está na apostila está sem a função printf("%f", *p);. Eu adicionei esse printf porque fiquei curioso em saber o que poderia ser impresso na tela. Me parece que a função dessa rotinha é, somente, explicar de forma ilustrativa o uso de ponteiros em vetores, então.

Eu pensei que essa rotina preenchesse a matriz automaticamente.

Obrigado, amigo.

aproveitando o momento, qual a diferença de 0 para 0.0 em c++?

aguardo.

Editado por O (RaeL)
Link para o comentário
Compartilhar em outros sites

  • 0

A princípio, o que essa rotina faz é preencher toda a matriz com 0.0.

A diferença entre 0 e 0.0 é extrema, desde a maneira como é representada na memória até a parte do processador que "processa" ela.

Dê uma lida neste artigo: Ponto Flutuante vá direto na área Precisão, que da uma explicada de como ele fica na memória.

Já os números inteiros (0), ficam na memória do geito que conhecemos eles "binariamente". Ex: 10_dec = 1010_bin, a única diferença de como eles realmente ficam na memória é relacionado a extremidade, para entender, leia este outro artigo: Endianness.

Outra diferença básica é que os números inteiros são processados pela ALU (Arithmetic Logic Unit - Unidade Lógica e Aritmética) e os de ponto flutuante são processados pela FPU (Float Point Unit - Unidade de Ponto Flutuante). Nos computadores atuais, essa FPU já vem embutida nos processadores, antigamente (BEEEM antigamente), ela era comprada a parte.

Fora a parte de "baixo nível" que dei uma explicada agora, tu pode procurar sobre type cast para entender um pouco sobre os tipos.

Qualquer dúvida só postar aí.

Ah, pra tu que está estudando sobre ponteiros, aqui vai um desafio:

char *( *( *( *( *(*c)(void *) )[10])( int *( *( *(*b)(void *) )[5][99])() ) )[11] )();

Me diga o que é esse código acima. Isso foi um colega que fez e eu precisei de umas sete linhas para explicar o que era: ponteiro pra ponteiro.....

Se você colocar a resposta certa ganha um prêmio! :lol:

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
A princípio, o que essa rotina faz é preencher toda a matriz com 0.0.

A diferença entre 0 e 0.0 é extrema, desde a maneira como é representada na memória até a parte do processador que "processa" ela.

Dê uma lida neste artigo: Ponto Flutuante vá direto na área Precisão, que da uma explicada de como ele fica na memória.

Já os números inteiros (0), ficam na memória do geito que conhecemos eles "binariamente". Ex: 10_dec = 1010_bin, a única diferença de como eles realmente ficam na memória é relacionado a extremidade, para entender, leia este outro artigo: Endianness.

Outra diferença básica é que os números inteiros são processados pela ALU (Arithmetic Logic Unit - Unidade Lógica e Aritmética) e os de ponto flutuante são processados pela FPU (Float Point Unit - Unidade de Ponto Flutuante). Nos computadores atuais, essa FPU já vem embutida nos processadores, antigamente (BEEEM antigamente), ela era comprada a parte.

Fora a parte de "baixo nível" que dei uma explicada agora, tu pode procurar sobre type cast para entender um pouco sobre os tipos.

Qualquer dúvida só postar aí.

Ah, pra tu que está estudando sobre ponteiros, aqui vai um desafio:

char *( *( *( *( *(*c)(void *) )[10])( int *( *( *(*b)(void *) )[5][99])() ) )[11] )();

Me diga o que é esse código acima. Isso foi um colega que fez e eu precisei de umas sete linhas para explicar o que era: ponteiro pra ponteiro.....

Se você colocar a resposta certa ganha um prêmio! :lol:

Abraço

Amigo, obrigado pela explicação e pelas dicas. Com certeza foram muito proveitosas. Vou ler todos os artigos que você me enviou como link.

Sobre sua charada, eu vou resolvê-la, ao menos vou tentar, rss. Contudo acho que vou demorar um pouco, pois só tem, aproximadamente, três semanas que estou estudando linguagem em c++ e é a primeira linguagem que estou estudando, ou seja, tenho que entender sobre os códigos e lógica de programação. Acabei de iniciar o estudo de funções hj e nem sei o siginificado da função VOID ainda. Assim que eu conseguir desvendar essa charada, eu te escrevo perguntando pelo meu prêmio. rs.

vlw. e muito obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Funções com retorno void são funções que não retornam nada. Void significa, literalmente, vazio. (um dos significados)

Observe:

int retornaInteiro() {
    return 5;
}

void naoRetornaNada() {
}

Variáveis também podem apresentar o tipo void *. Isto é, um ponteiro "genérico". É apenas um ponteiro, e não se sabe para que tipo de informação se aponta. Se é um char, int, long, isto é você que tem que saber.

Este "ponteiro genérico" é útil para fazer estruturas de dados "genéricas" em C, por exemplo, uma stack que aceite tanto valores char quanto valores int. Em C++, pode-se usar templates. Mas isto é outra história. ;-)

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Funções com retorno void são funções que não retornam nada. Void significa, literalmente, vazio. (um dos significados)

Observe:

int retornaInteiro() {
    return 5;
}

void naoRetornaNada() {
}

Variáveis também podem apresentar o tipo void *. Isto é, um ponteiro "genérico". É apenas um ponteiro, e não se sabe para que tipo de informação se aponta. Se é um char, int, long, isto é você que tem que saber.

Este "ponteiro genérico" é útil para fazer estruturas de dados "genéricas" em C, por exemplo, uma stack que aceite tanto valores char quanto valores int. Em C++, pode-se usar templates. Mas isto é outra história. ;-)

Abraços!

Hum, interessante. Vou dar seguência nos estudos, vou focar tudo isso que você abordou e quando eu estiver mais afiado ou quando surgir mais dúvidas, eu te pergunto. Ok?

rs. Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
Mais um adendo: Você também pode usar a palavra void pra dizer que não tem parâmetros, exemplo:

int main(void) {
}

Abraço

beleza.

Amigo, boa noite. Tenho um problema aqui. Tentei escrever uma rotina onde tento preencher a matriz[3][3] através do scanf. Contudo, os dados são mostrados em apenas uma linha e não 3x3. Onde será que está o erro. Abaixo está a rotina.

#include<stdio.h>

#include<conio.h>

main()

{

int matriz[3][3];

int count;

int i,j;

for(i=0;i<3;++i)

for(j=0;j<3;++j)

{

matriz[j]=count;

count++;

scanf("%d",&matriz[j]);

}

for(i=0;i<3;++i)

for(j=0;j<3;++j)

{

printf("%d ",matriz[j]);

}

getch();

}

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...