[Iniciante]Preciso de ajuda com C [RESOLVIDO]

1. [Iniciante]Preciso de ajuda com C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 05/12/2014 - 19:05h

Olá,

Tenho me dedicado bastante Ao aprendizado da linguagem C e gostaria de tirar algumas dúvidas:

O livro que mais me chamou a atenção e que estou usando para o meu aprendizado é "Linguagem C por Luis Damas", gostei muito do livro e foi a documentação com a qual mais me identifiquei, porém na página 31, me deparei com algumas questões que não consegui interpretar corretamente e me deixaram confuso espero que possam me ajudar. A questão é a seguinte:

1. Um inteiro tem um limite de armazenamento se o inteiro for de 2 bytes será de -32.768/32.768, e se for de 4 bytes -2.147.483.648/2.147.483.648, mas o que isso significa exatamente?

2. Outra questão que também não interpretei muito bem foi em relação a essas unidades chamadas bits, mas pelo que eu li 8bits equivale a 1byte correto? Por exemplo: Letra a=01000001, possuindo 8 caracteres binários = 1byte, sendo assim a letra "a" equivale a 1byte??? Então se uma variável int só pode armazenar 2 ou 4bytes ela só pode ter no máximo 4 caracteres? Realmente estou confuso em relação a essa parte do livro.

3. A terceira e última dúvida é em relação aos blocos de código, pois tentei escrever e executar dois blocos de código cada um com uma tarefa específica, compilou sem quaisquer erros, mas o programa só executou o bloco main.

Desde já agradeço pelas respostas!


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Linux Mint)

Enviado em 05/12/2014 - 19:25h


1. Um inteiro tem um limite de armazenamento se o inteiro for de 2 bytes será de -32.768/32.768, e se for de 4 bytes -2.147.483.648/2.147.483.648, mas o que isso significa exatamente?


Bom , é o limite para a variável guardar um número (na verdade , é -32.768/32.768 e -2.147.483.647/2.147.483.647),a variável "int", em 1 pc de 32 bits, armazena 4 bits , mas em 64 bits , não sei ao certo.


2. Outra questão que também não interpretei muito bem foi em relação a essas unidades chamadas bits, mas pelo que eu li 8bits equivale a 1byte correto? Por exemplo: Letra a=01000001, possuindo 8 caracteres binários = 1byte, sendo assim a letra "a" equivale a 1byte??? Então se uma variável int só pode armazenar 2 ou 4bytes ela só pode ter no máximo 4 caracteres? Realmente estou confuso em relação a essa parte do livro.


Bom , não sei se estudou "strings" , mas 'a' e "a" são diferentes , pois o primeiro armazena apenas o caractere 'a' e o segundo armazena o caractere 'a' e o caractere fim de linha '\ 0' (sem o espeço),que é usado em strings.


3. A terceira e última dúvida é em relação aos blocos de código, pois tentei escrever e executar dois blocos de código cada um com uma tarefa específica, compilou sem quaisquer erros, mas o programa só executou o bloco main.


Primeiramente teria que ver seu código para analisar-lo e achar o erro , mas vai uma explicação genérica :

Em C, um bloco de código é escrito entre chaves { código aqui }. Por exemplo:

#include <stdio.h>

int main ( )
{ // abre chaves do main
return 0;
} // fecha chaves do main


Outro exemplo:

#include <stdio.h>

int main ( )
{
{ // início do primeiro bloco
printf("Aqui é o primeiro bloco!");
{
printf("Aqui é um bloco dentro do primeiro bloco\n");
}
printf("Aqui ainda é o primeiro bloco\n");
printf("Aqui também é o primeiro bloco\n");
} // fim do primeiro bloco

printf("Agora aqui é o bloco do main, onde a magia acontece\n");

return 0;
}


Cada bloco inicia com { e termina com }
Entre as chaves ficará o código interno do bloco. Observe que main tem um bloco também, main do inglês "principal", por isso é o "bloco" principal é a partir dele que o programa funcionará.

Os bloco funcionam como áreas onde pode ser "ver" certas variáveis e "esquecer" outras.
Você pode declarar variáveis fora do main, então da linha onde você cria a variável para baixo ela será vista, ou melhor, poderá ser acessada:

#include <stdio.h>

int variavel_global = 69;

int main ( )
{ // <- abre chaves do main
printf("Você está fazendo um... %d!\n", variavel_global)
return 0;
} // <- fecha chaves do main


Entendeu? da linha "int variavel_global = 69;" para baixo dela até o final do arquivo, a variavel_global pode ser acessada ou modificada

main também é uma função. Funções são "pedaços" de código que se faz para usar no programa sem precisar reescrever todo um código repetitivo ou igual.
Por exemplo:

#include <stdio.h>

void minha_funcao ( )
{
printf("Olá da função!\n");
}

int main ( )
{ // <- abre chaves do main

minha_funcao(); // executa a função

return 0;
} // <- fecha chaves do main


Veja que eu criei o código da minha_funcao fora das chaves do main.

Espero ter ajudado

[]'s

T+

3. Re: [Iniciante]Preciso de ajuda com C [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Linux Mint)

Enviado em 06/12/2014 - 13:37h

Ajudei ?

[]'s

T+


4. Re: [Iniciante]Preciso de ajuda com C [RESOLVIDO]

thiago henrique
thiago211

(usa openSUSE)

Enviado em 06/12/2014 - 18:59h

8bit escreveu:

Olá,

Tenho me dedicado bastante Ao aprendizado da linguagem C e gostaria de tirar algumas dúvidas:

O livro que mais me chamou a atenção e que estou usando para o meu aprendizado é "Linguagem C por Luis Damas", gostei muito do livro e foi a documentação com a qual mais me identifiquei, porém na página 31, me deparei com algumas questões que não consegui interpretar corretamente e me deixaram confuso espero que possam me ajudar. A questão é a seguinte:

1. Um inteiro tem um limite de armazenamento se o inteiro for de 2 bytes será de -32.768/32.768, e se for de 4 bytes -2.147.483.648/2.147.483.648, mas o que isso significa exatamente?

2. Outra questão que também não interpretei muito bem foi em relação a essas unidades chamadas bits, mas pelo que eu li 8bits equivale a 1byte correto? Por exemplo: Letra a=01000001, possuindo 8 caracteres binários = 1byte, sendo assim a letra "a" equivale a 1byte??? Então se uma variável int só pode armazenar 2 ou 4bytes ela só pode ter no máximo 4 caracteres? Realmente estou confuso em relação a essa parte do livro.

3. A terceira e última dúvida é em relação aos blocos de código, pois tentei escrever e executar dois blocos de código cada um com uma tarefa específica, compilou sem quaisquer erros, mas o programa só executou o bloco main.

Desde já agradeço pelas respostas!


Amigo segue esse link ,acho que vai dar uma informacao detalhada sobre o assunto,pode ser de grande ajuda :

http://www.ime.usp.br/~pf/algoritmos/aulas/int.html

Uma das grandes habilidades de um bom programador e saber pesquisar.

ex:(uma pessoa que esta começando agora em programacao poderia pensar) " nao entendi essa parte ,mesmo o livro explicando ta dificil...ja sei vou postar em um forum de programacao a minha dificuldade e vou ter a resposta rapidinho... nao eu nao posso fazer isso sem primeiro pesquisar ,eu nao posso criar maus costumes ,eu tenho que aprender a pesquisar...se eu nao encontrar a explicacao da minha duvida na internet, ai eu crio um topico no forum que eu participo que eles me ajudarao".

Fim . E o programador viveu feliz para sempre (ate encontrar outro problema).

Amigo ,por favor,encare isso como uma critica construtiva.

obrigado

Qualquer coisa estamos ai .

T+



5. Re: [Iniciante]Preciso de ajuda com C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 06/12/2014 - 23:38h

Muito obrigado por responderem meu tópico, mas não entendi muito bem a 1ª e a 2ª. Em questão aos blocos de código eu escrevi da seguinte forma no programa:

#include <stdio.h>

main() {
intruções~
}

seg() {
instruções~
}

Tentei esse método para ver se ele iria executar primeiro as instruções de "main" e depois as de "seg" só para ver se o programa iria funcionar de uma forma continua, assim eu poderia criar um bloco para cada tema do livro: "Ah, mas conforme o programa fosse ficando grande demoraria a compilar..." Sim, entendo, mas foi só para teste mesmo(não executou seg!).

Vou finalizar o tópico mesmo assim.

Obrigado!


6. Re: [Iniciante]Preciso de ajuda com C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/12/2014 - 07:23h

NOTA: Eu sei que esta resposta está atrasada, e que o tópico já foi até fechado (e o autor inclusive removeu sua conta do VoL). Eu comecei a escrevê-la há uns dois dias, mas tive de interromper antes de concluí-la e poder enviá-la. Como eu já tinha gastado um bocado de tempo com ela, achei melhor enviá-la, mesmo atrasada, do que simplesmente descartar tudo. Quem sabe se não pode ser útil a alguém?

8bit escreveu:

Olá,

Tenho me dedicado bastante Ao aprendizado da linguagem C e gostaria de tirar algumas dúvidas:

O livro que mais me chamou a atenção e que estou usando para o meu aprendizado é "Linguagem C por Luis Damas", gostei muito do livro e foi a documentação com a qual mais me identifiquei, porém na página 31, me deparei com algumas questões que não consegui interpretar corretamente e me deixaram confuso espero que possam me ajudar. A questão é a seguinte:

1. Um inteiro tem um limite de armazenamento se o inteiro for de 2 bytes será de -32.768/32.768, e se for de 4 bytes -2.147.483.648/2.147.483.648, mas o que isso significa exatamente?


(Os limites que você colocou acima estão errados. Veja por quê mais abaixo.)

Bit é uma contração de binary digit, ou dígito binário. Os computadores usam um sistema de numeração com dois algarismos -- por isso o nome binário. A escolha do sistema binário é pela conveniência da construção: é muito fácil construir circuitos que realizam operações a partir de ou produzam saídas equivalentes a dois estados, tais como com corrente vs. sem corrente, ou com tensão mínima vs. com tensão máxima.

Apenas um bit não é suficiente para representar muita coisa. Para serem úteis, os computadores costumam agrupar bits em conjuntos chamados “palavras”, e conseguem realizar operações aritméticas numa só passada sobre todos os bits que compõem tais palavras. Diferentes tipos de processadores podem trabalhar com diferentes tamanhos de palavras, e alguns processadores são até capazes de operar com mais de um tamanho de palavra, dependendo da conveniência do usuário.

A escolha do tamanho da palavra usado por um processador depende de vários fatores de projeto de engenharia, do tipo custo×benefício. Palavras muito pequenas têm a desvantagem de permitir a representação de poucos números. Por outro lado, quanto maior a palavra, mais complicado fica o projeto e o custo do processador, pois para trabalhar com mais bits ao mesmo tempo ele precisará de mais transistores, requerendo mais espaço físico, consumindo mais energia, gerando mais calor etc.

Alguns tamanhos comuns de palavras são 4 bits (chamada às vezes de “nibble” ou “nyble”), 8 bits (também chamada “byte”), 9 bits, 12 bits, 16 bits, 18 bits, 22 bits, 32 bits, 36 bits e 64 bits. Alguns autores chamam de “byte” a palavra nativa de uma arquitetura ou o tamanho usado para representar caracteres de texto (nem sempre os dois são equivalentes), mesmo quando tais tamanhos não são exatamente 8 bits. Alguns, para evitar confusão, preferem referir-se a palavras de 8 bits através do termo “octeto”.

Como eu disse acima, o tamanho da palavra influencia quais operações podem ser realizadas “numa só passada”, ou com uma única instrução, que é a maior eficiência possível dessas operações num dado processador. O valores dos operandos envolvidos nessa operações de máxima eficiência são limitados pelo tamanho da palavra. Assim, numa arquitetura com palavras de N bits, existem 2^N possíveis valores inteiros, que geralmente vão de 0 a 2^N-1 para números inteiros sem sinal, ou de -2^(N-1) até +2^(N-1)-1 para números inteiros com sinal. Tais faixas de operação são obviamente uma redução absurda do verdadeiro espaço dos números inteiros, que é infinito, mas felizmente, na esmagadora maioria das aplicações, as pessoas ou não trabalham com números absurdamente grandes ou, quando trabalham, nem sempre necessitam de precisão absoluta. Se for necessário trabalhar com números que excedem o tamanho da palavra, é preciso construir programas que consigam dividir os números grandes em partes menores, que possam ser mapeadas nas palavras nativas, e operar separadamente sobre essas partes menores, juntando depois os resultados parciais.

O livro que você está usando deve ser um pouco antigo, já que ele menciona palavras de 16 bits como caso comum, e de 32 bits como exemplo maior. Nossos PCs já trabalham com 32 bits como tamanho nativo de palavras há mais de duas décadas, e até nossos celulares mais simples trabalham com 32 bits por padrão. Hoje, 64 bits virou o lugar comum nos PCs, e celulares de 64 bits estão em vias de assumir o primeiro lugar no mercado -- se é que já não o fizeram. Com 64 bits, você conta de 0 a 18.446.744.073.709.551.615 (mais de 18 quintilhões) ou de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.

Nem sempre você precisa disso tudo. Se você quiser, pode, nos nossos PCs, operar com palavras menores, de 32 bits (0 a 4.294.967.295, ou -2.147.483.648 a 2.147.483.647), 16 bits (0 a 65.535 ou -32.768 a 32.767) ou mesmo 8 bits (0 a 255 ou -128 a 127), mas o fato de usar essas palavras menores, ainda que lhe permita economizar memória, geralmente não lhe dará ganhos diretos de tempo de processamento.

2. Outra questão que também não interpretei muito bem foi em relação a essas unidades chamadas bits, mas pelo que eu li 8bits equivale a 1byte correto? Por exemplo: Letra a=01000001, possuindo 8 caracteres binários = 1byte, sendo assim a letra "a" equivale a 1byte??? Então se uma variável int só pode armazenar 2 ou 4bytes ela só pode ter no máximo 4 caracteres? Realmente estou confuso em relação a essa parte do livro.


Essa questão está ligada à anterior. A explicação sobre tamanhos de palavras já foi dada acima. Espero que você a tenha entendido.

Cuidado com o termo “caracteres”. No caso, o melhor seria você chamar de “dígitos binários” ou de “bits”. Em tempo, o byte indicado pela representação binária 01000001, ou 65 em notação decimal, corresponde, de acordo com o ASCII, ao caráter 'A', não ao 'a' (cujo índice ASCII é 97, ou 01100001).

O tipo int do C (e do C++) possui, nos nossos PCs, 32 bits, ou 4 bytes. Para escrevê-lo usando algarismos 0 ou 1 do sistema de numeração binário, você precisaria de uma representação com 32 posições. Mas, de novo, cuidado com o nome “caracteres”.

3. A terceira e última dúvida é em relação aos blocos de código, pois tentei escrever e executar dois blocos de código cada um com uma tarefa específica, compilou sem quaisquer erros, mas o programa só executou o bloco main.


Você não mostrou como foram escritos esses blocos.

Blocos num programa em C servem para os seguintes propósitos:

1) Definir campos de um tipo agregado de dados (struct, union).

struct exemplo {
int i;
char ch;
};


2) Definir valores iniciais de um array.

int exemplo[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 


3) Definir valores de uma enumeração.

enum cores {preto, vermelho, verde, amarelo, azul, magenta, ciano, branco}; 


4) Definir a implementação de uma função.

unsigned fatorial(unsigned n){
return n<=1u? 1u: n*fatorial(n-1u);
}


5) Agrupar múltiplos comandos em uma estrutura de controle de fluxo (if/else, for, while etc.), que de outra forma executariam um único comando.

if(i<0){
/* Múltiplos comandos: requer bloco. */
i=-i;
overflow=1;
}
else
break; /* Um só comando: não precisa de bloco. */


6) Dentro de (4) ou (5), limitar o escopo de visibilidade de variáveis.

unsigned fatorial(unsigned n){
/* ‘produto’ só é visível dentro do bloco que define ‘fatorial’ */
unsigned produto=1u;
while(n>=2)
produto*=n--;
return produto;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts