Fórum de C


Para dúvidas, opiniões, sugestões, erratas ou momentos de solidão:

http://progressiva.forumeiros.com/

40 comentários:

Adriano Martins disse...

parabens pela pagina, estudo mecatronica e sou leigo em linguagem c ainda. essa pagina ira me ajudar muito. obrigado.

Apostila C Progressivo disse...

Olá Adriano,

Obrigado pelos elogios.
É um prazer para a equipe do C Progressivo ter alunos dessa belíssima área que é a Mecatrônica.

Qualquer dúvida, não deixe de perguntar.

Bons estudos.

adriano é o cara !!!!!!!!!!!!!!!!!1 disse...

Boa Noite! Adoooorei o Site...Muiito legal !
Terei aulas de C na Faculdade, pelo menos é oque eu acho,,rs...
Vou Estudar Redes de Computadores.
Será que é C mesmo?.... Na Faculdade, eles vão Ensinar Tudo sobre C, ou o ALuno tem que saber mesmo antes, de começar o Curso?
Um grande abraço, tudo de Bom!

Sucessoooo!!!! ;).

File of Love disse...

Cara parabéns pelo
site estou adorando
tudo isso gosto
muito de C, mais
entre nos no primeiro
desafio sobre IF ELSE
eu fiz assim.

#include
int main()
{

int x,y;


printf("\ndigite um numero para X : ");
scanf("%d", &x);
printf("\nAgora um numero para Y : ");
scanf("%d", &y);

printf("\n\nO Valore de X: %d e de Y: %d ",x,y);

printf("\n\nAgora os valores trocados X: %d e de Y: %d \n\n",y,x);


hehehe deu certo...TROLL

Abraço amigos...

Apostila C Progressivo disse...

Hahaha, isso se chama gambiarra, e é bem comum rs.

Assim, isso serve caso precise comente mostrar pro usuário os valores trocados, mas se você tivesse que trabalhar com os valores, iria dar errado né, afinal, você não trocou os valores.

O exercício é porque, mais a frente, essa troca (onde se usa uma terceira variável, uma temporária), é algo bem comum, bem comum mesmo em diversos Algoritmos.

É importante que aprenda a fazer a troca, mas de resto, programação é isso aí mesmo, criatividade.

Abraço.

Alexandre_AAP disse...

Com respeito ao uso de C++...
Haveria a possibilidade de voces virem a abordalo?!

Apostila C Progressivo disse...

Olá Alexandre,

Com certeza vamos fazer algum trabalho sobre C++ sim!

Já estamos sondando profissionais da área para criar o projeto.

Se quiser ficar por dentro dos novos projetos, só curtir nossa page que mandamos informações por lá.

Camila dos Anjos disse...

Olá gostei muito do site , faço automação e mecatrônica industrial, e estou querendo me especializar em programação. A minha dúvida é referente ao certificado , ao final do curso conseguirei ter um ? e como faz ?

Att. Camila

Apostila C Progressivo disse...

Olá Camila,

Aqui na apostila C Progressivo oferecemos apenas o conteúdo, que é o mesmo de cursos presenciais e bons livros do ramo.

Para oferecer um certificado próprio, teríamos que ter uma grande estrutura com professores só para isso, profissionais pedagógicos e outras coisas.

Mas para não deixar os leitores não mão, indicamos o Brava Cursos, que já pudemos ver o material e asseguramos que é de excelente qualidade, tem professor, vídeo-aulas próprias, avaliações e emite sua certificação.

Aqui o link para o Brava Cursos:
http://afiliado.bravacursos.com.br/4573/curso-de-programacao-em-c/

Qualquer dúvida sobre C que tiver lá ou aqui, só perguntar que vamos responder e ajudar você a conseguir sua certificação.

steniovm disse...

olá, já faz um tempo que conclui todo o material disponibilizado, gostei muito. De vez em quando eu entro no site pra ver se publicaram alguma continuação, mas nada. tem previsão pra continuar? a parte de alocação dinâmica tá muito pobre em comparação com o restante do material.

outra coisa, acho que seria legal se fizessem o curso de algoritimos, um algoritimosprogressivo, o que acham?

Apostila de C disse...

Olá steniovm,

A seção de alocação dinâmica está incompleta ainda, mas pretendemos sim continuar com ela e outros tópicos.

No momento a equipe está em outros projetos também, e não podemos dar previsão da continuação, só que irá continuar :)

Se estiver procurando mais material, sugiro dar uma olhada no livro de C que indicamos e no curso com certificado.

A ideia dos algoritmos é ótima, e também planejamos fazer um curso de lógica da programação, onde pretendemos colocar no site base, o Programação Progressiva, pois são temas mais genéricos, que valem para todas linguagens.

Francisco Guerreiro disse...

Aprender e ter professores torna-se tarefa demasiado fácil, eu tenho 2 dificuldades, a nivel monetário afastado de qualquer curso pago, e não irei para uma universidade, pois só tenho o 9º ano. Tudo o que faço é nos sites e informações online principalmente sites Brasileiros e Espanhóis para me ajudarem, porque em Portugal só temos a explicação escrita tal como aqui explicado, que 90% das vezes não chega.
Os processos e as passagens não ficam claras, como funcoes , estruturas e ponteiros tornando a aprendizagem confusa.
Mas parabéns pelas informações, as melhores que já vi em sites Portugueses.

Apostila C Progressivo disse...

Francisco,

Se ler algo que achar confuso, pode perguntar.

Mas você estudou o curso desde o início, ou caiu de pára-quedas em algum tutorial em especial ?

Wesley Troy disse...

era pra emitir algum sinal sonoro ?

#include
#include
int main(void)

{
printf("\7 \a");
return 0;

}

Apostila de C disse...

Sim, Wesley, é pra emitir um aviso sonoro, aqueles 'beeps', bem comum principalmente nos desktops mais antigos.

No meu netbook, por exemplo, não funciona esse som, só em um PC mais antigo que tenho.

É o mesmo beep de quando ligo a CPU.

Gabriela Volpato disse...

Ola galeeera, sou completamente nova pra aprender a programar. POis bem meu prof nao explica nada com nada, acha que todos ja sabem programar e passou um trabalho. ALguém poderia me ajudar, ficarei eternamente agradecida.

Ta ai oq ele passou:
Escreva um programa que imprima a mensagem "Digite o valor de A em graus: " e a seguir leia
do teclado um número real representando a medida em graus de um ângulo A. Após a leitura,
seu programa deve imprimir as cinco mensagens seguintes, uma em cada linha:
valor de A em radianos= 999.9999
seno(A)= 999.9999
cosseno(A + PI)= 999.9999
tangente(A + 3PI/2)= 999.9999
fim de programa
onde o termo 999.999 representa os valores do ângulo em radiano e do seno, cosseno e
tangente, conforme indicado nas mensagens.


Apostila C Progressivo disse...

Olá Gabriela,

Poste sua dúvida no fórum:
http://progressiva.forumeiros.com/f4-c-duvidas

Mostre suas ideias, o código que já fez e diga sua dúvida.

Everton Estevão disse...

Pessoal, estou precisando de ajuda, to no início do curso, nos primeiros exercícios, criei um código para um exercício com divisão, mas não funciona corretamente, quando o usuário entra com o primeiro numero e da "enter" o programa finaliza a execução, a seguir o enunciado do exerício e meu código, desde já agradeço a ajuda:

Exercício: Faça um programa em C que peça dois números do tipo double ao usuário e mostre o resultado da divisão do primeiro pelo segundo e exiba esse resultado com 3 casas decimais.
PS: o símbolo de divisão é /

#include

int main(){
float num1, num2, resultado;
printf("Entre com um numero :\n");
scanf("%.1f", &num1);
printf("Entre com o outro numero :\n");
scanf("%.1f", &num2);
resultado = num1 / num2;
printf("O resultado da divisao e: %.2f", resultado);
return 0;
}

Apostila C Progressivo disse...

Everton,

Após pedir o primeiro número, experimente limpar o buffer, colocando o seguinte código (caso esteja no Windows):

fflush(stdin);

Leia sobre O que é e como limpar o buffer em C

Everton Estevão disse...

Muito grato pela dica de limpar o buffer, funcionou !!! Agora minha dúvida é entre duas funções; fgetc e getc, quais as diferenças entre elas, e em quais situações devo usar um ou outra.. Desde já agradeço a ajuda e orientação! Abraço!

Apostila C Progressivo disse...

Everton,

Note que ensinamos o fgetc na seção de arquivos, porque usamos ele pra pegar caracteres dos arquivos em C.

Danielle Farias disse...

Acho que existe um pequeno erro nesse link: http://www.cprogressivo.net/2012/12/Os-tipos-float-e-double-numeros-decimais-reais-em-C.html

No trecho de código que diz:
printf("Sonhei que meu salario era de R4%.2f, \nmas acordei e lembrei que era %.2f centavos", salarioSonho, salarioReal);

Acho que seria:
printf("Sonhei que meu salario era de %.2f, \nmas acordei e lembrei que era %.2f centavos", salarioSonho, salarioReal);

Sem o tal r4.

Apostila C Progressivo disse...

Opa Danielle, é verdade.

Na verdade queríamos colocar R$ e acabou saindo R4, faltou força na hora de pressionar o shift ;)

A equipe agradece sua contribuição!

Danielle Farias disse...

No link: http://www.cprogressivo.net/2012/12/Recebendo-letras-do-usuario--As-funcoes-scanf-getchar-getc-e-fgetc.html

No código:
#include
int main()
{
char letra1, letra2;
printf("Insira um caractere: ");
letra1 = getc(stdin);
printf("Insira outro caractere: ");
letra2 = getc(stdin);
printf("Você digitou: '%c' e '%c'", letra1, letra2);
}

Está acontecendo um erro comigo. Ele compila, mas na hora da execução, o programa insere apenas o primeiro caracter e imprime todo o restante de código sem permitir que o usuário faça as outras entradas.

Danielle Farias disse...

Por favor, ignorem o comentário acima. Vi na aula posterior que devo usar o comando "__fpurge(stdin);"

Att.

Douglas disse...

Eu sou um iniciante em C e tenho gostado muito do curso até agora. Tá de parabéns! Mas eu tenho uma dúvida: existe alguma diference entro botar e não botar o return 0; no final de cada bloco {} ?

se sim, qual é exatamente a função do return 0; ?

Anônimo disse...

Cara, sou usuário do linux, e quando coloco pra compilar o arquivo aparece depois do endereço do arquivo "Permission denied". Sabe como que eu resolvo isso aí ? Abraço e parabéns pelo curso.

Ana Carolina disse...

Não estou conseguindo executar programas que tem os conectivos &&, || e !, por exemplo, o programa 4, da unidade Teste condicional e Controle de fluxo, que é o seguinte...
#include
int main(void)
{
int idade;

printf("Digite sua idade\n");
scanf("%d",&idade);

if(idade>=18) && (idade<65)
printf("Voce pode doar sangue!!!");
else
printf("Voce nao tem idade para isso");
}
dá o seguinte erro :
D:\Mat CTI\C\Curso C Progressivo\Exercícios\exerc_4ifelse.c|9|error: expected identifier before '(' token|.
Aparentemente não há nenhum erro no código. O que está ocorrendo?

Apostila C Progressivo disse...

Ana,

O compilador afirma que o erro está na linha 9 e que há problemas com os parêntesis, vejamos ela:

if(condição) && (condição)

E isso está errado, os parêntesis do if deve englobar todos os testes condicionais.

O correto seria:
if( (condição) && (condição) )

Ana Carolina disse...

Olá, boa noite!!! Novamente, outro programa está dando erro...
#include
int main(void)
/*ler uma data e verificar se é válida ou não*/
{
int idia,imes,iano;

printf("Digite sua data de nascimento no formato dd/mm/aaaa\n");
scanf("%d%d%d",&idia,&imes,&iano);

if((idia<1))||(idia > 31))
printf("Dia invalido\n");
else
if((imes < 1)||(imes >12))
printf("Mes invalido\n");
else
if(iano > 2013)
printf("Ano invalido\n");
else
printf("Data valida\n!!!);
Abaixo, estão as mensagens de erro:
D:\Mat CTI\C\Curso C Progressivo\Exercícios\exerc_5ifelse.c||In function 'main':|
D:\Mat CTI\C\Curso C Progressivo\Exercícios\exerc_5ifelse.c|10|error: expected expression before '||' token|
D:\Mat CTI\C\Curso C Progressivo\Exercícios\exerc_5ifelse.c|10|error: expected statement before ')' token|
D:\Mat CTI\C\Curso C Progressivo\Exercícios\exerc_5ifelse.c|12|error: 'else' without a previous 'if'|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|

Apostila C Progressivo disse...

Ana, sempre que der erro, simplesmente leia e atente para a dica que o compilador dá.

Por exemplo, ele diz, novamente, que na linha 10 o erro tem a ver com um parêntesis.
Se você for checar, vai ver que está errado mesmo...tem um ')' a mais ali.

E na linha 12 ele diz que existe um 'else' sem um 'if'.

Diego disse...

Eu to com uma dúvida aqui em relação ao buffer.

http://www.cprogressivo.net/2012/12/Buffer--o-que-e-como-limpar-e-as-funcoes-fflush-e-fpurge.html

Se eu uso o fflush, ou aquele espaço antes do "%c" no scanf ele vai ignorar o ENTER, certo? Mas após eu fazer isso, suponha que eu digite "abcd". De acordo com o que foi dito no artigo de Buffer, antes de ler um novo caractere, ele vai verificar se ainda existe algum dado armazenado no teclado. Então, depois de eu digitar "abcd", ele vai ler o "a" e ainda vai sobrar o "bcd", porém esses valores são ignorados, por quê? A função do fflush e do espaço antes do "%c" não é só ignorar o ENTER?

Engenhari Ponte Rasa disse...

colegas, sobre a aula Filas em C - Como Programar (Tutorial de C sobre Queue - Estrutura de Dados).
Compilei o arquivo e surgiram alguns erros no retirar elemento. Corrigi, forma ficou melhor:
#include
#include

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct Node{
int num;
struct Node *prox;
};
typedef struct Node node;

int tam;

int menu(void);
void opcao(node *FILA, int op);
void inicia(node *FILA);
int vazia(node *FILA);
node *aloca();
void insere(node *FILA);
node *retira(node *FILA);
void exibe(node *FILA);
void libera(node *FILA);


int main(void)
{
node *FILA = (node *) malloc(sizeof(node));
if(!FILA){
printf("Sem memoria disponivel!\n");
exit(1);
}else{
inicia(FILA);
int opt;

do{
opt=menu();
opcao(FILA,opt);
}while(opt);

free(FILA);
return 0;
}
}


int menu(void)
{
int opt;
printf("\t Exemplo de programa que trabalha com fila em C, somente digite numeros\n\n");
printf("\t Escolha a opcao\n\n");
printf("\t 0. Sair\n");
printf("\t 1. Zerar fila\n");
printf("\t 2. Exibir fila\n");
printf("\t 3. Adicionar Elemento na Fila\n");
printf("\t 4. Retirar Elemento da Fila\n");
printf("\n\t Opcao: "); scanf("%d", &opt);
printf("\n");
return opt;
}

void opcao(node *FILA, int op)
{
node *tmp;
switch(op){
case 0:
libera(FILA);
break;

case 1:
libera(FILA);
inicia(FILA);
break;

case 2:
exibe(FILA);
break;

case 3:
insere(FILA);
break;

case 4:
tmp= retira(FILA);
if(tmp != NULL){
printf("\t Retirado: %3d\n\n", tmp->num);
libera(tmp);
}
break;

default:
printf("\t Comando invalido\n\n");
}
}

void inicia(node *FILA)
{
FILA->prox = NULL;
tam=0;
}

int vazia(node *FILA)
{
if(FILA->prox == NULL)
return 1;
else
return 0;
}

node *aloca()
{
node *novo=(node *) malloc(sizeof(node));
if(!novo){
printf("\t Sem memoria disponivel!\n");
exit(1);
}else{
printf("\t Novo elemento: "); scanf("%d", &novo->num);
printf("\n");
return novo;
}
}

void insere(node *FILA)
{
node *novo=aloca();
novo->prox = NULL;

if(vazia(FILA))
FILA->prox=novo;
else{
node *tmp = FILA->prox;

while(tmp->prox != NULL)
tmp = tmp->prox;

tmp->prox = novo;
}
tam++;
}


node *retira(node *FILA)
{
if(FILA->prox == NULL){
printf("\t **** Fila ja esta vazia ***** \n\n");
return NULL;
}else{
node *tmp = FILA->prox;
FILA->prox = tmp->prox;
while(tmp->prox != NULL)
tmp = tmp->prox;
tam--;
return tmp;
}

}


void exibe(node *FILA)
{
if(vazia(FILA)){
printf("\t * * * Fila ja esta vazia * * * \n\n");
return ;
}

node *tmp;
tmp = FILA->prox;
printf("Fila :");
while( tmp != NULL){
printf("%5d", tmp->num);
tmp = tmp->prox;
}
printf("\n ");
int count;
for(count=0 ; count < tam ; count++)
printf(" ^ ");
printf("\nOrdem:");
for(count=0 ; count < tam ; count++)
printf("%5d", count+1);


printf("\n\n");
}

void libera(node *FILA)
{
if(!vazia(FILA)){
node *proxNode,
*atual;

atual = FILA->prox;
while(atual != NULL){
proxNode = atual->prox;
free(atual);
atual = proxNode;
}
}
}

Elvis Silva disse...

sou iniciante em programação , estou no primeiro período de engenharia elétrica achei este site em uma busca pela net . gostei mto do site , vejo que ira me ajudar mto . Abraços ,vlw .

André de Souza disse...

no artigo:

Gerando números aleatórios em C: rand, srand e seed


disse que RAND_MAX gera um intervalo de 0 a um valor que varia de maquina a maquina. esse valor pra se mais exato depende da memoria ou n?quanto mais memoria maior o intervalo?

Jaymies Stielphins disse...

NAO CONSIGO MONTAR DOIS PROGRAMAS COM DIFICULDADES "STRINGS".

/* Escreva um programa que leia uma frase (use a função gets( ) para ler a frase) e conte a quantidade de caracteres 'c' e caracteres 'a' contidos na frase digitada. Apresente também o número total de caracteres (usando a função strlen( ) ). */

E O OUTRO É:

/*Escreva um programa que leia um caracter digitado pelo usuário e uma frase também digitada pelo usuário e conte quantas vezes o caracter digitado aparece na frase. Por exemplo, se o usuário digitar 'u' e a frase “Urubu papudo que come tudo.” seu programa deve retornar o número de letras 'u' contidos na frase, ou seja 5.*/

AJUDA: É PRA HOJE


Erika Walasasc disse...

Alguém pode ajudar
Escreva uma sub-rotina min_max, com a interface abaixo, que:
–lê 10 valores do usuário
–altera os conteúdos de min e de max para serem respectivamente o menor e o maior dos valores lidos
void min_max( int *min, int *max );

Jocinei Moura disse...

Muito legal o site de vocês. Parabéns!

Me ajudem, aonde consigo um bom tutorial ou livro (em português) da API WIN32
para programar em C.
Pois sempre vejo alguém ensinando de uma maneira mas meu compilador sempre da algum erro.

Conto com a ajuda de vocês!

Obrigado

Anônimo disse...

Como se faz uma linha ou elipse em C?
Eu uso codeblocks no Linux com gcc.

Anônimo disse...

O material é perfeito pra entender, gostaria, portanto, da continuação!! POR FAVOR, façam material para GRAFOS e algoritmos em GRAFOS

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.