sexta-feira, 12 de dezembro de 2014

End Of File (EOF)

End Of File (EOF)

   Hoje irei falar sobre o End Of File (EOF) conhecido como Final de Arquivo. O EOF pode ser utilizado em um programa quando você for fazer um programa que leia um arquivo de texto com um número indeterminado de linha.
   Para fazermos o teste usaremos o terminal do Linux e a IDE de trabalho CodeBlocks.

   O processamento utilizado sera um processamento qualquer, que no caso faz a inversão de cada linha, lembrado é um processamento qual quer ele não se restringe só neste que irei mostrar.
faça o seguinte código:

void limparBuffer(void){
   char c;
   while ((c=getchar())!='\n'&& c!=EOF);
}

int main(){
   char str[tam];
   int c,i;
   while(scanf("%[^\n]",str)!=EOF){
      c=strlen(str);
      for(i=c;i>=0;i--){
         printf("%c",str[i]);
      }
       printf("\n");
      limparBuffer();
}

   Como já foi dito em um Post anterior, nós usaremos a função de Limpeza de Buffer para limpar o buffer e não atrapalhar na leitura do nosso arquivo, o EOF aparece tanto na função quanto no código. Na função ele aparece para limpa caractere por caractere ate que seja encontrado o Enter ou ate que seja encontrado o EOF que é o nosso caso. Já no código ele é usado para ler varias linhas de um arquivo ate que acabe, quando acabar ele retorna o EOF que consecutivamente para o programa ali.

   Agora faremos um arquivo de texto de preferencia .txt com o nome de in.txt (de input) que recebera o algumas linhas. Este arquivo tem que ficar dentro da pasta raiz do programa para ser executado com maior facilidade.

Andre
Athos
Fernando
Leticia

   Agora iremos executar o programa, para executar no terminal faça o seguinte. Aperte Ctrl+F9 no CodeBlocks para somente compilar o programa, olhe no build log para saber se houve algum erro, caso não tenha vá para a pasta onde o código fonte do programa esta pelo terminal e faça o seguinte código: “./nome_do_programa < in.txt”, caso não tenha usado a função de limpeza de buffer ele entrara em loop pois ira ler somente a primeira linha infinitamente e não encontra o EOF para poder para, dando algo parecido com isso:

erdnA
erdnA
erdnA
erdnA
erdnA
erdnA
...

Caso tenha dado certo o resultado deve ser parecido com esse:

erdnA
sohtA
odnanreF
aiciteL


 Bom pessoal espero que tenha gostado e ate mais.

quinta-feira, 4 de dezembro de 2014

Limpando a “sujeirinha” do teclado “Limpeza de Buffer”

Ei, você! Sabe pra quê serve uma Limpeza de Buffer?
Não?? Então se liga nessa dica ...
Suponhamos que existam 3 funções, uma após a outra e ao tentar ler o caractere na segunda função, o programa simplesmente colocar o enter (\n) e já “pula” para a terceira(no nosso caso não haverá a leitura terceira). A limpeza de buffer serve para evitar este tipo de problema.
Um exemplo de quando é necessário limpar:

int main()
{
    char a;
    int b;
    printf("Informe caractere: ");
    a = getchar();
    printf("Informe numero: ");
    b = getchar();
    printf("%d",a);
    printf("%d",b);
    return 0;
}

Mas como limpar o buffer?
Cria-se uma função na qual chamaremos "limparBuffer", para isso criaremos vamos definir uma variável do tipo char e logo após faremos um ciclo while. Exemplo:

void limparBuffer(){
   char c;
   while ((c = getchar()) != “\n” && c != EOF);
}
O que esses comandos fazem é ir "pegando" os elementos do buffer, até que o caractere '\n' apareça, ou o EOF(end of file)Em outras palavras, enquanto c for diferente de quebra de linha ou c for diferente de EOF o ciclo vai continuar a execução.
Agora é só chamar a função apos cada leitura. Exemplo:

void limparBuffer()
{
   char c;
   while ((c = getchar()) != “\n” && c != EOF);
}
int main()
{
    char a;
    int b;
    printf("Informe caractere: ");
    a = getchar();
    limparBuffer();
    printf("Informe numero: ");
    b = getchar();
    limparBuffer();
    printf("%d",a);
    printf("%d",b);
    return 0;
}

Agora um método simples, utilizando o próprio scanf() é o seguinte:

scanf(" %d", &b); //repare no espaço entre o " e o %.

ou ainda:

scanf("\n%d", &b); //agora o "\n"

Simples não é? Isso já é o suficiente pra limpar o buffer.

Aproveitem!!!

sexta-feira, 21 de novembro de 2014

Espaço das profissões no IF Goiano – Câmpus Rio Verde


O espaço das profissões foi um projeto da professora Heyde que juntamente com os alunos do instituto procurou levar informações dos cursos do instituto federal para toda a comunidade Rio-verdense. O espaço das profissões ocorreu durante o dia todo nos dias 22 e 23 de outubro e como não podia faltar, os alunos do projeto da Olimpíada Brasileira de Informática estavam mostrando para toda a comunidade como funciona a OBI e como é prazeroso participar dessa competição, que tem como objetivo principal encontrar novos talentos em programação de computadores, sendo a programação a principal habilidade dos cursos relacionados a informática.


sexta-feira, 31 de outubro de 2014

Code.org - Programação para iniciantes

Algum tempo atrás estava navegando pela internet e me deparei com este site: http://learn.code.org/, achei bastante interessante e resolvi explorá-lo. Logo que comecei a frequentar o site já resolvi vários exercícios do mesmo. No site existem vários jogos, onde você muda de fase e a cada nível descobre novas ferramentas da programação, como por exemplo: ler, repetir, executar, se, senão, entre outras. No total são 20 desafios divididos em 20 fases cada, onde utilizam os personagens de desenhos animados (angry birds, plants versus zumbi, etc).
O Code.org transmite o conteúdo básico de lógica de programação com exercícios viciantes que ensinam da melhor forma possível. Recomendo a utilização do site principalmente para crianças e adolescentes do ensino fundamental que são iniciantes em programação.





“There are only 10 types of people in the world: Those who understand binary and those who don’t.”

sexta-feira, 24 de outubro de 2014

Biblioteca string.h

Biblioteca <string.h>
Como utilizar as principais funções
        A biblioteca string.h foi feita para facilitar o manuseio de string, tendo como suas principais funções a:
·       strlen (a função strlen, retorna um inteiro com dizendo quantos caracteres tem na string).
·        strcpy (a função strcpy copia uma string para outra string).
·        strcmp (esta função compara 2 string e retorna um inteiro. Se este inteiro for 0 quer dizer que as strings são iguais, se for negativo é porque a primeira e maior que a segunda e se for positivo é porque a segunda é maior que a primeira).
·         strcat (a strcat concatena 2 strings).

Como usá las
Para que as seguintes funções funcione  adicione a biblioteca string.h
#include <string.h>”.

        Strlen
Para usarmos a strlen faça a seguinte função:

int i;
char str[tam];
scanf(" %[^\n]",str);
i=strlen(str);
printf("%i\n",i);

pronto. A variável “i” recebera o número de caracteres que tem a sua string só que o próximo código ira fazer isso e é bem fácil de eu entender.

int i;
char str[tam];
scanf(" %[^\n]",str);
for(i=0;i<tam;i++){
   if(str[i]=='\0') break;
}
printf("%i",i);

este é uma código eficiente que simula a strlen.

Strcpy
Para poder usar a strcpy faça o seguinte:

char str1[tam],str2[tam];
scanf(“ %[^\n]",str1);
strcpy(str2,str1);
printf("%s\n",str2);

Veja que lemos a “str1” mas imprimimos a “str2”, isso porque a “str1” foi jogada na “str2”. Agora vamos reproduzir um código que faça algo parecido.

int i;
char str1[tam],str2[tam];
scanf(" %[^\n]",str1);
for(i=0;i<tam;i++){
str2[i]=str1[i];
}
printf("%s\n",str2);

Este código também faz o mesmo processo que a strcpy só que tera que ter uma lógica melhor para compreende-lo.

Strcmp
Para usarmos a strcmp faça:

int i;
char str1[tam],str2[tam];
scanf(“ % [^\n]",str1);
scanf(“  %[^\n]",str2);
i=strcmp(str1,str2);
if(i==0){
printf(“São iguais\n”);
}else(i!=0){
printf(“Não são iguais\n”);
}

Por mais que isso seja só um pouco do que a strcmp possa fazer, esse será o seu principal uso. Mas vamos fazer um código que simule isso.

int i,j;
int o=0,c=0;
char str1[tam],str2[tam];
scanf(" %[^\n]",str1);
scanf(" %[^\n]",str2);
for(i=0;str1[i]!='\0';i++){
c++;
}
for(j=0;str1[j]!='\0';j++){
o++;
}
if(o==c){
printf("São iguais\n");
}else if(o!=c){
printf("Não são iguais\n");
}

Observe que temos dois for para contar quantos caracteres tem na em cada string e depois comparamos ela, caso seja igual ele retornara “São iguais”, caso não ele retornara “Não são iguais”.

Strcat
E por ultimo usaremos a strcat para concatenarmos duas strings. Vamos usar da seguinte forma:

int i; char str1[tam],str2[tam]; scanf(" %s",str1); scanf(" %s",str2); strcat(str1," "); strcat(str1,str2); printf("%s\n",str1);

Observe que o código ficou bem simples mas o que faremos a seguir pode ter uma lógica mais difícil de compreender mas que pode ser mais eficiente que o código anterior.

int i,j;
char str1[tam],str2[tam],str3[tam+tam];
scanf(" %[^\n]",str1);
scanf(" %[^\n]",str2);
for(i=0;str1[i]!='\0';i++){
str3[i]=str1[i];
}
str3[i]=' ';
i++;
for(j=0;str2[j]!='\0';j++){
str3[i]=str2[j];
i++;
}
str3[i]='\0';
printf("%s\n",str3);

bem podemos ver que neste caso criamos a string “str3” para mantermos a integridade do valor da “str1 e str2”, lembrando que a cada string a mais a ser concatenada temos que aumentar o espaço da string que recebera as strings.

Bem pessoal ficamos por aqui com esta dica e até mais.
Lembre se “Os sonhadores são os salvadores do mundo” - James Allen.

sexta-feira, 3 de outubro de 2014

Strings sem dor de cabeça

Strings na linguagem C

Para entendermos como funciona uma string de caracteres, na linguagem c, é muito importante compreender como os caracteres são representados pelo computador, como a linguagem c é uma linguagem compilada e não interpretada temos que trabalhar com strings pensando na forma que o computador C a interpreta. A linguagem C considera os caracteres como números que vão de 0 até 127, enumerados segundo a tabela ASCII, assim:

char exemplo = 61;
printf("61 em C é : %c\n",exemplo );

O programa mostraria : 61 em C é igual a : a

Talvez você quererá atribuir números a um elemento char, então existe 2 formas de fazer isso:

    char exemplo = '1';   OU char exemplo = 31;

em ambos os casos mostram o valor 1.

Mais com o aumento dos nosso programas trabalhar com caracteres únicos tornar-se inviável, então podemos criar um vetor de caracteres denominados strings que nada mais é que um espaço de memoria que contem vários caracteres em fila, como por exemplo:

Athos                                      André                   peixe                     Cachorro

Então se pensarmos um pouco veremos que string nada mais é do que caracteres agrupados e que termina com o caractere  '\0', indicando o final da string. No exemplo abaixo declararmos uma string de 10 caracteres + um caractere terminador '\0', pois o primeiro índice inicia em 0.

char string[10];

No segundo exemplo o compilador sobrescreve o U pois o terminador '\0' é sempre colocado.

#include <stdio.h>

int main () {

char string[1]="EU";

printf("%s\n",string);

return 0;
}

Uma string possui índices e é com esse índices que iremos trabalhar: como por exemplo o meu nome.

0-F
1-e
2-r
3-n
           4-a           
5-n
6-d
7-o
  8-'\0'

Então se quisermos ler uma string temos que fazer o seguinte:

char string[ //defina o tamanho aqui];

int i;

while(i<//tamanho da string){
scanf(" %[^ \n]",string[i] );
}

Mais se quisermos ler varias strings  temos que criar uma matriz de caractere, e para isso precisamos de de dois índices, onde o primeiro representa a linha e o segundo representa a coluna:

                                                                          0123456789
0 fernando'\0'
1       athos'\0'
2       andré'\0'
3    leticia '\0' 

Como exemplo podemos fazer o seguinte:

int i,j;
char string [//aqui vc coloca o numero de palavras que sua matriz tem ] [// aqui vai o maior numero de carceres que vai na string];

for(i=0;i<linhas;i++){ scanf("%[^\n]",string[i]); // %[^\n] lê a string até que se aperte a tecla enter }

bons estudos!

sexta-feira, 19 de setembro de 2014

Plataforma de Estudo para a OBI

Para aquele que procura um site de estudos para a OBI, recomendo o URI Online Judge, nele você encontrará vários problemas pelo qual deve ser respondido em "C" ou "Java".
O URI ajuda tanto iniciantes quanto os mais avançados além de criar uma leve competição com amigos e outras pessoas, por meio de Rank ou a porcentagem de quantos problemas resolvidos.
Já aqueles que não conhece uma linguagem de programação e quer aprende de maneira fácil, há vários canais que ensinam a programar, um dos canais é o eXcript  que não é tão conhecido mas que ensinas várias linguagens de programação, dentre elas o "C" e o "Java".
Bom, agora é só estudar para participar da próxima OBI.

Bons Estudos!

sábado, 13 de setembro de 2014

Segunda Fase OBI - 2014 em Rio Verde - GO

O Instituto Federal Goiano – Câmpus Rio Verde, sediou no dia 30 de agosto a segunda fase da XVI Olimpíada Brasileira de Informática (OBI 2014). Em Rio Verde, cinco instituições de ensino qualificaram alunos para a competição. A prova teve duração de 2 horas, não havendo qualquer tipo de imprevisto. O Professor responsável, André da Cunha Ribeiro, juntamente com seus colaboradores, Athos José de Araújo e Letícia Caroline Sousa Santos, aplicaram a prova e fiscalizaram a mesma para que tudo ocorresse dentro das orientações da OBI.



"Grandes obras são executadas não pela força mas pela perseverança"  Samuel Johnson.

quarta-feira, 27 de agosto de 2014

IF Goiano – Câmpus Rio Verde na OBI

A Sociedade Brasileira de Computação (SBC) anuncia a realização da Olimpíada Brasileira de Informática (OBI), uma competição organizada nos moldes das outras olimpíadas científicas brasileiras, como Matemática, Física e Astronomia. O objetivo da OBI é despertar nos alunos o interesse por uma ciência importante na formação básica hoje em dia (no caso, ciência da computação), através de uma atividade que envolve desafio, engenhosidade e uma saudável dose de competição. A organização da OBI está cargo do Instituto de Computação da UNICAMP.
A OBI está organizada em três modalidades:
  1. Modalidade Iniciação:
  • Nível 1, para alunos até sétimo ano do Ensino Fundamental e
  • Nível 2, para alunos até nono ano do Ensino Fundamental.
  1. Modalidade Programação:
  • Nível Júnior, para alunos do ensino fundamental,
  • Nível 1, para alunos até o segundo ano do ensino médio e
  • Nível 2, para alunos até o terceiro ano do ensino médio.
  1. Modalidade Universitária:
  • Para alunos que estejam cursando, pela primeira vez, o primeiro ano de um curso de graduação.

Em todas as modalidades os alunos competem individualmente. Cada aluno poderá estar inscrito em apenas uma modalidade. Maiores informações podem ser encontrada no site: http://olimpiada.ic.unicamp.br/.

Todos os participantes receberão certificados de participação. Os melhores colocados de cada modalidade receberão ainda medalhas de ouro, prata e bronze. Os melhores colocados das modalidades Iniciação e Programação serão convidados para uma semana de cursos no Instituto de Computação da UNICAMP. Os cursos serão ministrados no Instituto de Computação da UNICAMP, e acontecerão em datas divulgadas oportunamente. Para os alunos da modalidade Programação nível 2, haverá, durante o Curso de Programação Avançada, uma seleção para escolher os quatro alunos integrantes da equipe brasileira na International Olympiad in Informatics ou somente IOI. A IOI é um evento já tradicional que conta com a participação de mais de 70 países.


Com a intenção de incentivar a participação dos alunos de Rio Verde e região criamos o projeto de extensão denotado IF Goiano – Câmpus Rio Verde na OBI. Como resultado do projeto no dia 24/05/2014 participamos da 1º fase da OBI de 2014.
Alunos que participaram da 1ª fase da OBI 2014 na modalidade programação nível 1.
Neste espaço vamos registrar experiências e dicas para todos que desejam participar da OBI.