quarta-feira, 27 de outubro de 2010

Era da Computação

No passado, o termo computador já foi aplicado a pessoas responsáveis por algum cálculo.

John von Neumann propôs a ideia que transformou os calculadores eletrônicos em “cérebros eletrônicos”: modelar a arquitectura do computador segundo o sistema nervoso central.
Para isso, eles teriam que ter três características:
  1. Codificar as instruções de uma forma possível de ser armazenada na memória do computador. Von Neumann sugeriu que fossem usados uns e zeros.
  2. Armazenar as instruções na memória, bem como toda e qualquer informação necessária a execução da tarefa
  3. Quando processar o programa, buscar as instruções directamente na memória, ao invés de lerem um novo cartão perfurado a cada passo.

Assim, o computador programável que conhecemos hoje, onde o programa e os dados estão armazenados na memória ficou conhecido como Arquitetura de von Neumann.





 O primeiro computador eletro-mecânico foi construído por Konrad Zuse, em 1936 
Mas as primeiras ideias sobre a forma de criar o computador foi Charles Babbage.




Em 1941 foi oficializado a criação do computador.

domingo, 24 de outubro de 2010

Ficha de trabalho

Já a muito tempo que não escrevo nada no meu blog de programação, mas é apenas porque tenho estado todas as aulas a resolver exercícios sobre tratamentos de Ficheiro e achei melhor não postar com tanta frequência, mas hoje lembrei-m de fazer um pequena revisão dos exercidos e mostrar o que aprendi de novo ao realizar estes.
Por exemplo: o exercício 8 que diz para ver o numero de ocorrências num determinado carácter num ficheiro.
Antes de mais, o ficheiro pra ver o número de ocorrências, precisa de ler o ficheiro (utilizando r); depois para verificar a ocorrência podemos fazer assim:
while((palavra=fgetc(fp)!=EOF(fp)){ // serve para verificar quando termina a palavra (texto do FILE)
if(palavra==caracter) // verificar caracter a caracter se é igual
soma=soma+1; // somar o numero de ocorrências
}

Também aprendi que para acrescentar texto utiliza-se: a.
fp=fopen("exp.txt","a");
e  escreve-se no ficheiro o que quiser.

Aprendi a copiar um ficheiro para o outro, criando 2 ficheiros, um com texto pré-definido e o outro vazio e copiar de um pro outro.
Aprendi a mostrar o conteudo do ficheiro, a escrever, a manipular e organizar, ...

Utilizando o r,w, r+, w+ .

 ....

sábado, 16 de outubro de 2010

O número de ocorrências de um determinado carácter num ficheiro

Na aula de ontem, resolvi um exercicio que demorou 1 hora a ser resolvido, mas depois vi que é tão facil.
O exercico é o seguinte:
Escreva um programa que conta, num ficheiro, o número de ocorrências de um determinado carácter. O ficheiro e o carácter são especificados pelo utilizador. Abra o ficheiro em modo de texto para leitura. Utilize a função getc().
Exemplo de saída do programa:
Caminho e nome do ficheiro: c:\autoexec.bat
Caracter: \
Resultado: 6 ocorrências do caracter \
Grave o programa com o nome m7_f1_8.c na sua pasta.

Resolução:
#include <stdio.h>
main()
{
      FILE *fp;
      char palavra;
      char nome_fp[50];
      char caracter[0];
      int i;
      int soma=0;
     
      printf("Introduza o nome do ficheiro:\n");
      scanf("%s",nome_fp);
     
     
      if((fp=fopen(nome_fp, "r"))==NULL)
         printf("Ocorreu um erro ao abrir o ficheiro\n");
     
      else
            printf("O ficheiro foi aberto com sucesso\n");
     
      printf("Caracter: ");
      scanf("%s", caracter);
     
      while((palavra = fgetc(fp))!=EOF){               
      if(palavra==caracter[0])
      soma=soma+1; 
      }
     
     printf("\nresultado: %d correspondencias do caracter %s\n\n", soma, caracter);
     
      fclose(fp);
     
      system("pause");
      return 0;
}
A unica diferença entre este exercício e o exercicio de criar um ficheiro foi :
      printf("Caracter: ");
      scanf("%s", caracter); // serve para pedir um caracter, para depois ver o numero de vezes que ocorre
     
      while((palavra = fgetc(fp))!=EOF){   // serve para verificar quando terminar as palavras no FILE           
      if(palavra==caracter[0]) // verificar caracter a caracter se tem igual
      soma=soma+1;   //contar as ocorrencias
      }
     
     printf("\nresultado: %d correspondencias do caracter %s\n\n", soma, caracter);

quarta-feira, 13 de outubro de 2010

Afinal não havia erro na criação do ficheiro ...

Na aula de hoje, perguntei a professora, o motivo de dar errado o meu programa, mas o que me espantou foi que a professora copiou o meu código pra computador dela e não deu erro.
E porque????
Porque eu sou uma "burra" e não me apercebi que para programar um ficheiro em c é preciso ter anteriormente criado um bloco de notas com o mesmo nome.
Nesta aula tentei intender de vez o que é um ficheiro em c.
Então acho que é assim...
Um ficheiro é um local onde armazena a informação que tem um nome e um extensão. O ficheiro tem de ser previamente criado através de um bloco de notas e o nome tem de ser igual ao que iremos procurar no programa e a extensão que neste caso é txt, por ser bloco de notas (ficheiro de texto).
Acho que é assim ...
Também aprendi a ler palavras que estão no ficheiro através de:
while((fgetc(fp))!=EOF)
putchar(fp);

continua...

terça-feira, 12 de outubro de 2010

Ficha sobre Ficheiros ...

Hoje, na aula de psi, enviei os trabalhos realizados nas aulas anteriores e comecei a fazer uma ficha sobre ficheiros.
Descobri que a vantagem da utilização de ficheiros comparando com as estruturas de dados estudadas anteriormente, é que no fim dos programas, os dados não são perdidos, sendo gravados num ficheiro, e podendo ser usados e/ou alterados mais tarde. Enquanto que numa estrutura os dados quando alterados perde a informação anterior.
Também fiz um programa em c que cria-se um ficheiro e que escreve-se no ecrã um texto caso ocorre-se um erro ou caso o ficheiro abri-se.
O meu programa é o seguinte:

#include <stdio.h> 
main()

    FILE *fp; 
     
    fp=fopen("php.txt","r"); 
    if(fp==NULL) 

    //if((fp=fopen("m7_f1_5.txt","r"))==NULL) 
        printf("Ocorreu um erro ao abrir o ficheiro\n"); 
    else{ 
        printf("O ficheiro foi aberto com sucesso\n"); 
         fclose(fp);
        }
    system("pause");
    return 0;
}


a mensagem que da no ecrã é a seguinte: Ocorreu um erro ao abrir o ficheiro

Ainda estou a ver o motivo de ocorrer um erro e depois direi alguma coisa

...

sábado, 2 de outubro de 2010

FILE (funções)

Na aula a seguir aprendi a criar um ficheiro em c.

#include <stdio.h>
main(){
  FILE *fp;
  if((fp=fopen ("a.txt","r"))==NULL)
  {
    printf("Erro na abertura do ficheiro");
    exit(1);
  }
  fclose(fp);
}


FILE *fp é a definição de uma variável do tipo FILE (ficheiro), tendo um valor apontador para o ficheiro;
 if((fp=fopen ("a.txt","r"))==NULL) é para guardar o ficheiro que ira criar;
fopen é uma função de abertura do ficheiro e fopen é uma função para fechar o ficheiro.

Aprendi também outras funções para manipular ficheiros:

Ler e escrever num ficheiro:
Ficheiro Texto:
  • fgetc - leitura de carácter a carácter do ficheiro
int fgetc(Ficheiro);
  • fgets - leitura de uma string num ficheiro
char *fgets(char *x, int y, FILE *fp)
Onde:
char *s é a string onde vai ser guardada a linha do ficheiro
int y marca o limite que vai ser possível guardar na string
FILE *fp é onde a função vai buscar os valores
  •  fscanf - leitura formatada
int fscanf(FILE *fp, const char *format ...)
  • fputs - escrever num ficheiro
int fputs(int ch, FILE *fp)
  • fprintf - escrever em ficheiro formatado
int fprintf(FILE *fp, const char *format)


Ficheiro Binário
  • fwrite - escrever para o disco, a função retoma os valores que conseguir em caso de erro
int fwrite(const void *ptr, int size, int n, FILE *fp)
Onde:
const void *ptr : Este apontador tem que apontar para o endereço de memoria que queremos guardar, e é void pois é um apontador que pode apontador para qualquer tipo
int size : Indica o tamanho
int n : Indica o numero elementos que queremos escrever
FILE *fp : o ficheiro onde vamos guardar a informação
  • fread - leitura de dados para o ficheiro, a função retoma o numero que conseguir ler em caso de erro
 int fread(const void *ptr, int size, int n, FILE *fp)
Onde:
const void *ptr : Este apontador tem que apontar para o endereço de memória que queremos guardar, e é void pois é um apontador que pode apontador para qualquer tipo
int size: Indica o tamanho
int n: Indica o numero elementos que queremos escrever
FILE *fp : o ficheiro onde vamos guardar a informação




Posicionamento do Ficheiro
Imagine mos que temos que ir ate a ultima linha do nosso ficheiro, podemos fazer pelo Acesso Sequencial indo linha a linha ate a ultima, mas temos uma forma muito mais rápida de conseguirmos o mesmo resultado, esse método chama se Acesso Directo.
  • fseek - é usado para posicionar o ficheiro, a função devolve 0 em caso de erro e um valor diferente de 0 em caso de ser verdadeiro
int fseek (FILE *fp, long offset, int origin)

Onde:
FILE *fp : é o ficheiro onde nos queremos posicionar
long offset : Indica o número de bytes que queremos andar (Positivo anda para a frente, Negativo anda para trás)
int origin : Indica de que ponte inicial nos queremos iniciar o posicionamento
  • ftell - devolve a posição actual no ficheiro
long ftell (FILE *fp)
  • rewind - coloca o ponteiro no inicio do ficheiro
rewind(fp)



Detenção de End-of-File 
int feof (FILE *fp)

Ficheiros de Texto e Ficheiros Binários

Como tinha prometido, hoje vou anunciar a minha nota do teste do módulo 6 - "Apontadores", não foi má mas podia ser melhor se tivesse mais atenta...
Eu tive 15 valores,   mas o último exercício que era a traçagem do exercício cadeia tive 1 ponto de 5, o que demonstra que ate podia ter sigo melhor pois já consegui fazer a traçagem....
Mas prontos, não me queixo porque em outros testes sabia melhor e tinha piores notas....
Depois de receber o teste e fazer a auto-avaliação e a hetero-avaliação, continuamos a realizar um mapa mental que tínhamos começado na aula passado sobre o conceito ficheiro.
Através do programa e-mapa, fizemos um esquema com o conceito ficheiro e outros. Tenho a dizer que aprendi uma coisa nova...

O ficheiro pode ser de dois tipos: ficheiro de texto e ficheiro binário. Quer os ficheiros binários quer os de texto armazenam os dados como sequências de bits. A diferença entre eles é que  um ficheiro binário é processado como uma sequência de bytes, enquanto um ficheiro de texto é processado como uma sequência de caracteres.
Os caracteres dos ficheiros de texto são representados no código ASCII enquanto que num ficheiro binário a representação usada é muito mais completo que o outro, pois são representados por 16 bits, por 32 bits ou até por mais.  (ex. word)

....

Entre outras ligações que tínhamos falado no dia anterior...