Perguntas sobre C:
Para que serve enum?
Qual a diferença de malloc e calloc?
Versão Imprimível
Perguntas sobre C:
Para que serve enum?
Qual a diferença de malloc e calloc?
Enum serve para criar um tipo cujos possíveis valores serão todos enumerados pelo programador.
Por exemplo, um enum de meses teria os valores Janeiro, Fevereiro, ..., Dezembro.
Estou tentando aprender C, porem estou no começo ainda e estou com uma dúvida.
Toda vez que executo esse programa:
chega a parte que eu digito o numero de dias, e o programa fala o resultado em outra linha, mas sai rapidamente (como um flash).Citação:
#include <stdio.h>
int main ()
{
int Dias;
float Anos;
printf ("Entre com o n˙mero de dias: ");
scanf ("%d",&Dias);
Anos=Dias/365.25;
printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos);
return(0);
}
Dai eu consegui colocar o comando getchar (); pra "retardar" o fechamento do programa, e deu tudo certo.
ficando assim:
Mas dai a dúvida: peguei esse programa sem o comando, então deve ser algum outro erro ou é normal ter que colocar isso sempre?Citação:
#include <stdio.h>
int main ()
{
int Dias;
float Anos;
printf ("Entre com o numero de dias: ");
scanf ("%d",&Dias);
getchar ();
Anos=Dias/365.25;
printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos);
getchar ();
return(0);
}
Os programas que você fez é apenas um exemplo de como transformar dias em anos.
O que aconteceu no primeiro programa é que você não pausa (para) o programa, e quando ele termina o CMD (prompt) também termina. De tão rápido que é não da tempo do usuário ler.
A função getchar(); espera por alguma entrada do usuário até que o programa possa continuar. Foi o que você usou no segundo exemplo.
O "return(0);" é como se fosse: termine o programa
O "printf(...);" é como se fosse: imprima texto
O "getchar();" é como se fosse: espere o usuário digitar
No primeiro exemplo:
No segundo exemplo:Citação:
imprima texto
termine o programa
Citação:
imprima texto
espere o usuário digitar
termine o programa
Coloca o comando system("pause"); que faz o a tela congelar quando o programa finaliza, assim você não precisa colocar esse getchar ();, talvez não pegue o comando acima, então você teria que colocar uma biblioteca especifica pra poder usar essa função, que no momento eu não lembro qual é...
Nunca consegui usar system ou getchar, sempre adiciono a biblioteca CONIO.H e uso o "getch()" :P
Agora que eu irei tentar aprender a programar, preparem para ver várias perguntas noobs.
Galera, eu estou com uma dúvida. Estou ainda no começo dessa apostila de programação e não entendi algumas coisas:
- Funções;
- Argumentos;
- Retornar valores;
Não seria mais simples colocar tudo dentro do "int main()" do que criar uma nova "função"??
Comecemos pelo retorno. Todas as funções retornam um valor, a menos que sejam void. Uma função tipo...
int soma(tipo argumentos){
return x}
Vai retornar um valor x inteiro.
Argumentos são valores que você passa para uma função, eles podem ou não serem modificados dentro desta, dependendo de como você os envia (por parâmetro ou referência).
Exemplo, no main você vai chamar uma função...
"função(a, b);"
void função(int a, int b){
}
Pela ordem em que você enviou, o valor (ou endereço) do parâmetro a será passado para o argumento "int a".
Espero ter sido claro, complicado explicar.
Obrigado Victor.
Cloud~ Deu uma boa clareada aqui, mas eu fiquei com dúvida na parte do retorno. Ok, toda função irá retornar um valor, mas vão retornar pra que e pra onde?
Citação:
AUTO AVALIAÇÃO
Veja como você está. Escreva uma função que some dois inteiros e retorne o valor da soma
Vejam se fiz certo por favor.Citação:
#include <stdio.h>
int soma (int a, int b)
{
printf("%d", a+b);
getchar();
return(a+b);
}
int main ()
{
int x,y;
x=1;
y=2;
soma (x,y);
getchar();
return(0);
}
Enfatizando o retorno.. você poderia fazer assim olha:
Código:#include <stdio.h>
int soma (int a, int b)
{
return (a+b);
}
int main ()
{
int x,y;
x=1;
y=2;
printf("%d",soma(x,y));
// note que aqui, o valor a ser impresso será o retorno da função soma.
return(0);
}
Uma função, jogando a grosso modo, é um meio de organizar e reaproveitar um código. O qual faz algum tipo de processo, emcima de objetos(por exemplo, números). Depois de processar os objetos e transformar em um novo(ou novos), ele retorna esses objetos pra quem o chamou, numa determinada linha/parte do código.
Mas para uma função processar alguma coisa(que é seu objetivo), ele precisa das coisas pra processar, certo?
Essas coisas são os Argumentos. Argumentos são as variáveis(objetos) que serão responsáveis por receber os valores que foram enviados, quando a função, foi chamada.
Após a função receber seus argumentos, eles serão processados, da forma que o programador quiser. Na sua parte final, a função então devolve(retorna) o(s) objeto(s) resultantes do processo, para onde ela foi chamada.
No caso:
A parte em negrito, nessa linha do código, é onde ela foi chamada.No caso, o que será exibido na tela, será 3, porque a função retornou o valor 3 naquele ponto.Citação:
#include <stdio.h>
int soma (int a, int b)
{
return (a+b);
}
int main ()
{
int x,y;
x=1;
y=2;
printf("%d",soma(x,y));
// note que aqui, o valor a ser impresso será o retorno da função soma.
return(0);
}
No caso da função que você criou(soma), a função, recebe os argumentos a e b, que terão os valores de x e y que você tinha colocado(1 e 2). O processo, que você definiu, foi de somá-los. E então, depois de somá-los, você retornou o valor processado, que foi 3.
Da certo também. Mas...Citação:
Não seria mais simples colocar tudo dentro do "int main()" do que criar uma nova "função"??
Essa é uma dúvida muito, muito frequente de iniciantes. Isso é uma coisa que você só entenderá melhor quando criar programas mais complexos.
Vou dar um exemplo bem clássico,
Veja bem:
#include <stdio.h>
Você tem alguma idéia do que essa linha faz?
Ela inclui uma biblioteca, chamada de stdio.h.Mas o que é uma biblioteca? Uma biblioteca, a grosso modo, é um lugar onde tem um monte de funções, pré-programadas.
Se você for perceber bem, o próprio printf, É uma função. No caso, pré-programada.Os argumentos, seriam no caso aquele %d, e o outro seria um valor.
Pensou se você não tivesse pronta a função printf? Você teria que aprender a fazer a função, e ainda, refazê-la todas as vezes em todos os programas, se quisesse mostrar algo na tela.
Mas com a biblioteca, você ja a tem pronta. E então, você não economizou tempo e código?
É justamente para isso que ela serve.
Agora pensa em um programa mais complexo. Tipo um sistema operacional. Onde um processo é utilizado 100 vezes. É melhor, eu copiar e colar o código do processo 100 vezes, e explodir a hd de tantos gigabytes de linhas de código ou re-aproveitar esse processo?
:)
Quando você entrar de cabeça mesmo em programação orientada a objeto avançada, você entenderá muito bem isso.
Na verdade é imprescindível que você entenda sobre esse assunto, para quando for mexer com classes, metodos, propriedades e etc.
E isso ae, espero que tenha ficado claro :)
Ufa.
A verdade é que eu sempre gostei de ver/saber sobre programação, e até penso focar meus estudos e trabalhar nesta área... mas por DESGR*** do destino, eu não entendo PO**A nenhuma, e não tem nenhuma escola de programação na região... e é por isso que nos primeiros capítulos eu desisto. :fckthat:
Se alguém souber de alguma linguagem boa pra começar, e conhecer algum tutorial bom, eu ficarei muito grato ^^
Sem mais,
Danilo
Muito obrigado Rin' e Victor'.
E Bruce, ficou muito mais claro essa explicação!
Agora sim posso seguir la na apostila.
Recomendo pra você começar com java, é uma linguagem muito boa para iniciantes em programação.
Eu também sempre curti mas nunca conseguia entender nada, mas vagando pela internet achei a apostila de java da caelum(uma escola de programação) e esto aprendendo muito, já até criei uns programinhas noobs pra android.
A apostila você pode encontrar aqui.
Mas antes recomendo você assistir as viodeoaulas de algoritmo do professor Neri Neitzke, pra aprender a programar de fato, antes de começar com alguma linguagem. As aulas você acha no canal dele no youtube.
Já eu sugiro C para começar. Nos cursos de computação, é a língua dada em Introdução à Programação. Java tem muita coisa mastigada que é importante saber, segundo minha professora.
É acho que vocês tão certos.
C realmente é uma ótima linguagem pra começar.
Obrigado pessoal, vou procurar alguma apostila de C (Quem conhecer alguma boa pode manda xD), mas antes entender os conceitos de algoritmos.
Obrigado a todos.
Até :y:
Se você não tem a menor noção de lógica de programação, creio que seja melhor tu aprender algoritmos em pseudocódigo, recomendo o visualg, é um interpretador e editor de ''portugol'', segue o link: http://www.baixaki.com.br/download/visualg.htm
E aqui a apostila: http://www.guanabara.info/logica/Apo...isuAlg_Ref.pdf
A parte teórica é importante, mas para você se acostumar a aplicar sua lógica e aliá-la ao seu conhecimento da sintaxe das linguagens, só treinando, vai por mim, faz toda a diferença.
Pretendo começar a aprender java ainda essa semana, eu já sei o básico sobre C/C++ (funções, matrizes/vetores, controle de fluxo, um pouco de ponteiros), então o que eu preciso pra começar a progamar? como se compila em java?
Já salvei a apostila que o amigo postou ali, estou dando uma lida.
Uso windows 7 64-bit
Você só precisa baixar o JDK(java development kit) no site da SUN.
Sobre as IDE's você pode ver na apostila.
Já fiz um progaminha e funcionou, só tive uma surpresa:
Porque o nome do arquivo tem que ser o mesmo do lado do class aí? em C não tinha nada disso que eu lembre.Código:public class AloPessoal {
public static void main(String args[]) {
System.out.println("Alo pessoal!");
}
}
Porque eu não sei, mas tem que ser assim para o compilador aceitar. A classe (ou Interface, ou Enum) principal do arquivo tem que ter o mesmo nome do arquivo .java, senão o compilador javac não compila e as IDE's reclamarão.
É bom estudar um pouco do paradigma de programação orientada à objetos. A abstração muda um pouco, você passa a usar o conceito de classes de objetos e as regras que derivam desse modelo (herança, polimorfismo, interface e etc)
A rigor, você consegue programar de uma forma estruturada em Java, assim como faz em C, a sintaxe é bem parecida, mas aí perde todas as vantagens da linguagem orientada a objetos.
é uma linguagem toda orientada a objeto, seria bom aprender um pouco sobre, como o bob falou.
Aconselho a entrar nessa área se tiver conhecimentos intermediários mesmo.
Isso vem do conceito de OO, se não me engano, serve de identificação para que um outro programa que queira extender essa classe o ache.
Bom, semestre que vem terei de usar Java (em LP1) e já baixei o compilador e uma apostila decente para acompanhar. Se alguém quiser, só digitar programando em Java e baixar o PDF da UFBA :D
Pelo que eu percebi, muda bastante coisa na sintaxe.
Vou dar uma estudada sim, o problema é que no 1º semestre da facul ví apenas algoritimos e C, ou seja, não manjo nada de OO, por onde devo começar?
Se não me engano vou ter essa matéria semestre que vem (Linguagem de progamação I), quando começar o semestre muito provavelmente o professor vai disponibilizar o material inteiro da matéria dele para os alunos, então eu compartilho o material com você se quiser.
Comece com algum tutorial, veja a qualidade e manda bala.
Qualquer tutorial de java deve ensinar sobre OO, pois ela é uma linguagem toda orientada.
Como ensinar é algo um pouco pessoal, vai ter pessoas explicando de forma x e y, mesmo o conceito sendo 1 só. Então, vá baxando diversos tutos pela net, e vá lendo e aplicando até entrar na cabeça.
Como ja falaram do apostilando, também aconselho fortemente um dos melhoresfóruns de discussão sobre programação, que acho que todo programador deveria conhecer.
Foi lá que aprendi OO em php.
Muda sim, pois C é uma linguagem estrutural.
A parte de orientação a objeto da mesma, já vai para o C++, o ++ do C é justamente a linguagem C derivada para suporte a OO.
Como java é todo orientado, é "quase como" se você fosse ir de C para o C++.
Olá galera, voltei.
Estou no exercício de characters e strings da minha apostila e não estou conseguindo terminar um, então escolho pedir ajuda aos universitários.
Citação:
AUTO AVALIAÇÃO
Veja como você está:
b) Escreva um programa que leia duas strings e as coloque na tela. Imprima tambÈm a
segunda letra de cada string.
Ele vai até o final do programa, mas no final quando a minha ideia era mostrar a segunda letra de cada string ele mostra somente a letra "s".Citação:
#include <stdio.h>
#include <conio.h>
int main ()
{
char string[100];
printf("digite uma string: ") ;
gets (string);
char string2[100];
printf("digite uma string2: ");
gets (string2);
printf("strings sao: %s, %s\n", string, string2);
até aqui está indo tranquilo, imprimindo as duas strings.
char str[100]= "%s, string";
char str2[100]= "%s, string2";
printf("segunda letra: %c, %c", str[1], str2[1]);
getchar();
return(0);
}