quinta-feira, 11 de novembro de 2010

"The Social Network" - linguagem usada para o Facebook

Resumo do filme
O filme fala sobre um jovem universitário de Harvard, Mark  Zuckerberg, que sempre quis pertencer a uma rede social, pois nunca foi um rapaz com muitos amigos e achava que com uma rede social poderia fazer novas amizade.
Após discutir com a sua namorada sobre o tema, vai para casa e cria uma pequena rede social ligada ao servidor da universidade, FaceMash, com o objectivo de comparar fotos das raparigas da universidade, e fotos delas mas modificadas por ele. Este, em apenas 2h tem 22 mil visitas, mas passado 4h descobrem que ele entrou na rede da Universidade e é expulso, sendo acusado de infringir regras de segurança na Internet, de privacidade, ... 
Vendo que teve sucesso, três estudantes de Harvard, Divya Narendra, Cameron Winklevoss e Tyler Winklevoss, decidiram convidar Mark para  entrar num projecto, a criação de uma rede social, HarvardConnection, para a universidade. Mark aceita o projecto mas não o realizou. Mais tarde desenvolveu com a ajuda financeira de um  amigo  Eduardo Saverin uma rede social. E em apenas 1 meses fez 2 mil linhas de código para o inicio do "The Facebook".
Pouco depois Zuckerberg, Dustin Moskovitz e Chris Hughes juntaram-se para expandir para universidades e escolas.
No final do ano lectivo, Mark e Dustin mudaram-se para Palo Alto, Califórnia, com Andrew que tinha conseguido um estágio de verão na Electronic Arts. Eles alugaram uma casa perto da Universidade de Stanford, onde se juntaram a Adam D'Angelo e Sean Parker.
Com ajuda de Sean Parket, o fundador de Napster, acabou por ter uma empresa para continuar a melhorar o Facebook.
Andrew McCollum decidiu deixar a Electric Arts para ajudar todo o tempo no desenvolvimento do Facebook e do site "irmão" Wirehog. Divya Narendra, Cameron Winklevoss e Tyler Winklevoss, proprietários do site HarvardConnection, posteriormente chamado ConnectU, entraram com uma acção judiciaria contra o Facebook reclamando a propriedade intelectual, Mark Zuckerberg teria utilizado código fonte ilegalmente do HarvardConnection, do qual ele tinha acesso. Mark depois acabou por pagar uma indemnização aos irmãos Winklevoss.
 Facebook torna-se o revolução da comunidade, Mark decide alargar os horizontes e expandir por mais países, e evoluindo cada pormenor que se lembrava. Em apenas 5 anos consegue mais de 500 mil amigos.
Tornando-se assim o bilionário mais novo do mundo.
...

Linguagem de programação usada no Facebook
Mark para criar o Facebook usou uma linguagem própria utilizado nas fanpage, o FBML Facebook Markup Language, basicamente são tags especiais que podem ser inseridas no código HTML. Essas tags permitem incluir uma grande variedade de complementos às páginas sem as complicações do HTML padrão.
O principal motivo para a utilização das tags do FBML é a integração com os serviços oferecidos pelo site, como a implementação de campos de comentários, botões de "Like", murais e tudo mais que há no Facebook.
É claro que o Facebook não foi só criado com as funções HTML, pois nem todas as funções funcionam com as fanpage, assim as tags especiais não dão hacks. 


A infraestrutura de software que Mark usou pode ser vista como a de um site LAMP (é um acrónimo para a combinação: Linux, Apache, MySQL, PHP, Perl ou Python), mas com melhorias e extensões de vários serviços.  
Mark utiliza o Memcached, que é no momento um dos softwares mais famosos na Internet, como uma camada de cache entre aplicação web e banco de dados.
PHP é uma linguagem interpretada e por isso o seu código quando executado é relativamente lento quando comparado com código que executa inicialmente. O HipHop converte PHP em código C++ que pode ser então compilado e apresentar um desempenho melhor. Isso permitiu que Mark aproveitasse muito melhor os seus servidores web já que dependem demais de PHP para servir conteúdo.
Para armazenar e recuperar fotos de alto desempenho, Mark utilizou o Haystack, que armazena em quatro diferentes resoluções e executa tarefas como por exemplo a remoção de foto, a actualização ou o acesso.  
Mark também utilizou o BigPipe, que é um sistema dinâmico que serve para páginas web. Ele é capaz de dividir uma página em secções (chamadas “pagelets“) e servi-las em paralelo com desempenho ideal.
Por exemplo, a janela de chat é carregada separadamente, o "feed" de notícias é carregado separadamente, e assim por diante. Esses “pagelets” podem ser carregados em paralelo, que é de onde vem as melhorias de desempenho, e os utilizadores recebem um site que funciona mesmo se uma parte dele for desactivada ou estiver com defeitos.
O Facebook para pesquisar Inbox usa a Cassandra que é um sistema de armazenamento distribuído baseado no projecto do BigTable. Que é um destaque do movimento NoSQL.
Mark usou o Scribe, que é um sistema de logging flexível, que o Facebook usa para uma infinidade de propósitos internos. Ele foi criado para ser capaz de registar todas as acções ocorridas no Facebook, e automaticamente lida com novas categorias de acções registadas conforme aparecem.
O Hadoop é uma implementação open source de MapReduce que permite a execução de cálculos numa quantidade execiva de dados. O Facebook usa-o para análise de dados da sua rede. O Hive é uma interface de acesso ao Hadoop através de consultas SQL, facilitando o seu uso, que também foi aplicado dentro do Facebook.
Mark usou diferentes linguagens para os seus diferentes serviços. PHP é usada para front-end, Erlang é usada para Chat, Java e C++ são usados em diversas áreas. Thrift é um framework cross-language desenvolvido internamente que junta todas as diferentes linguagens, permitindo que elas conversem entre si. Isso facilita muito o desenvolvimento das cross-language no Facebook.
Mark usou o Varnish (que é um acelerador HTTP, que pode agir como uma alteração de estado da carga e também realiza cache de conteúdo para servi-lo rapidamente) para servir fotos, lidando com milhões de requisições todos os dias.
Mark usou vários sofwares e varias linguagem, para realizar o Facebook, foi um longo trabalho que teve bom resultado é por isso que, hoje, é o bilionário mais novo do mundo.

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...

quarta-feira, 29 de setembro de 2010

Ficheiros

Desde muito cedo, aprendemos a utilizar ficheiros, de dados, de informação, de programas, ...
Mas afinal o que é um ficheiro??
 Foi isso que aprendi na aula de hoje.

Um ficheiro é uma colecção de dados ou informação que tem um nome, um nome propriamente dito e uma extensão.
Quase toda a informação armazenada num computador tem de estar num ficheiro.
 Existem diferentes tipos de ficheiros: ficheiros de dados, ficheiros de texto, ficheiros de programa, ...
Diferentes tipos de ficheiros armazenam diferentes tipos de informação.

Então, podemos tirar as nossas próprias conclusões e dizer que um ficheiro é a colecção de informação; a informação é armazenada em ficheiros e que cada tipo de ficheiro armazena tipos de informação. Uma informação é conjunto de dados que podem ser de texto. Uma aplicação é um conjunto de programa, que tem informação e que armazena ficheiros.

continua ...

terça-feira, 28 de setembro de 2010

Afinal não era o fim dos apontadores ...

Os apontadores persegue-me ... :p
Pensava eu que o teste final significava o final do modulo, mas pensei mal como sempre. Os testes foram uma miséria e se calhar a única positiva da turma é a minha, o que significa que hoje tive teste prático. Não foi nada doutro mundo, o teste era o mesmo só que tínhamos a possibilidade de ver os nossos erros e corrigidos através de outros meios, como por exemplo verificar executando no dev c++.
Acho que foi melhor, muito melhor, e hoje decidi postar um exercício que deu-me umas dores de cabeça tremendas.
O exercício "cadeia", o problema não é resolver, mas sim fazer a traçagem, ai é que foi...
Então é o seguinte:

char *func (char *cadeia, int i, int j) {
char aux;
if(i < j) {
aux = cadeia[i];
cadeia[i] = cadeia[j];
cadeia[j] = aux;
func(cadeia, i + 1, j - 1);
}
return cadeia;
}

int main(){
char vector[]= “programa”;
func(vector,3,8);
printf(“%s\n”,vector);
return 0;
}


o output do programa é "pro" vamos lá ver se sei explicar o meu raciocínio nesta traçagem...

 

main
cadeia
vector
i
j
aux
cadeia
If(i<j)
“programa”
3
8
aux = cadeia[i]
aux=cadeia[3]
aux=’g’
Cadeia[i]=cadeia[j]
Cadeia[3]=cadeia[8]
‘g’=’\0’
V
“programa”
3
8
‘g’
Cadeia[j]=aux
Cadeia[8]=cadeia[3]
‘\0’=’g’
-
cadeia[]=’p’ ’r’ ’o’ ’\0’
vector=”pro”

3
8
‘g’
Cadeia[]=”pro”
-



Então, coloquei duas tabelas juntas, uma para o main e outra para a função cadeia e depois coloquei as variáveis de cada tabela e as condições.
O programa começava com deferir  vector[]= “programa”, depois havia uma passagem por valor das variáveis, sendo portanto i=3, j=8, e um apontador para o vector (*cadeia).
Depois verificava a condição If (i< j), sendo verdadeira (3<8), aux iria fica  aux = cadeia[i] ou seja aux=cadeia[3] que é igual aux=’g’, de seguida, Cadeia[i]=cadeia[j] ou seja, Cadeia[3]=cadeia[8] que é igual ‘g’=’\0’ e Cadeia[j]=aux ou seja Cadeia[8]=cadeia[3] que é igual a ‘\0’=’g’. Então o apontador iria ficar "pro", porque a partir dai teria o '\0' que termina. O vector reservaria o "pro" do apontador.

sexta-feira, 24 de setembro de 2010

Fim dos "Apontadores" ...

Hoje, a aula foi para revisões e teste do modulo, ...
As revisões foi sinceramente o que me ajudou muito para a resolução do teste avaliação sumativa do modulo 6 "Apontadores".
Aprendi que para passar para uma função podemos colocar como argumentos (&a) e depois na função ficar o valor apontador pola variavel a . ex:  int x (int *apt).
Aprendi também a fazer  uma cadeia (através de um exercício no moodle da disciplina) e acabou também por sair no teste. O que também foi de admirar foi o exercício troca que não conseguia fazer e que no fim ate consegui também estava no teste ...  e outras perguntas de verdadeiro e falso ou escolha múltipla.
Até não correu muito mal ...
Na próxima vez que postar contarei a minha nota
:)

quinta-feira, 23 de setembro de 2010

Exercicio troca

Um dos exercícios que tínhamos de fazer na aula de psi, era fazer o exercício troca, que já me deu varias dores de cabeça, mas finalmente já esta certo...
O exercício é o seguinte:
Escreve um procedimento que permita trocar os valores de 2 variáveis inteiras.
-Teste a função para x=2 e y=3.

Finalmente, depois de tanto esforço e de tanto tempo a pensar consegui um proposta de solução, mas não sei se esta bem ... mas prontos, a proposta é a seguinte:

#include <stdio.h>
void troca(int *apx, int *apy);
main(){
       int x, y;
       printf("Digite o valor de x: ");
       scanf("%d",&x);
       printf("\nDigite o valor de y: ");
       scanf("%d",&y);
       printf("\n TROCA: \n\n");
       troca(&x, &y);
       printf("valor de x= %d\n",x);
       printf("valor de y=%d\n",y);

       system("pause");
       return;
}
void troca(int *apx, int *apy)
{
    int troca;
    troca=*apx;
    *apx=*apy;
    *apy=troca; 
    return;
}

;p

quarta-feira, 22 de setembro de 2010

Programar com apontadores

Decidi para melhor compreender, fazer um programa com apontadores que aprendi na aula, pois este em especial errei para ai 200 vezes.
O problema é o seguinte: Declarar um apontador para uma variável x inteira inicializada com o valor 5.
- Imprimir o endereço da variável x e do apontador.
E declarar um apontador para o apontador
- Imprimir o endereço desse apontador do apontador para a variável x.

A resolução é fácil:
#include <stdio.h>
main(){
       int x=5;
       int *apt, **aptapt;
       printf("%x\n",&x);
       printf("%x\n",&apt);
       apt=&x;
       aptapt=&apt;
       printf("%x\n",**aptapt);
       getchar();
      
}

Listas bidicionais e Apontadores de apontadores

Nesta aula aprendi que uma lista linear, nem sempre é a melhor forma de fazer, como já vimos a lista linear pode ser filas ou pilhas.
Filas fica ex |9|*|      |2|NULL|
Mas agora as pilhas a melhor forma de fazer é através de uma lista bidireccional da seguinte forma:
|NULL|1|*|     |*|0|*|     |*|1|NULL|  assim por cada numero que avance vai ter sempre o anterior, o numero a ler  e o * para o próximo. O que irá facilitar muito o trabalho da lista, pois senão teria de ir percorrer a lista toda de novo se quisesse os anteriores.


Também vimos que um apontador pode ser apontado, pois um apontador, pode ser considerado variável e apontar o endereço da variável.
Ex:
 int x;
 int *apt;
 int **aptapt;
apt=&x;
aptapt=&apt;
Como todo, tem sempre as suas vantagens, pois poderemos precisar de apontar um valor e depois saber o valor anteriormente apontado e ira facilitar bastante.
Será mais uma maneira de trabalhar com apontadores ...

continua...

terça-feira, 21 de setembro de 2010

Lista linear

Uma lista serve para facilitar uma estrutura, que em vez de correr o vector todo ira ver o vector ate chegar ao \0 ou ao ultimo numero.
Ex:
struct lista
{
int v;
int *apont;
} lista 1;

v|9|3|5|7|4|

lista1[1] |9|*|
lista1[2] |3|*|
lista1[3] |5|*|
lista1[4] |7|*|
lista1[5] |4|NULL|

Assim a lista ira decorrer a string e apontar o próximo numero, o que facilita se quiser ver os valores apontados anteriormente; NULL é nulo o que significa que o programador termina por ai...
A lista acima é considerada uma fila, pois os números são apontados de cima para baixo (FIFO - FIRST IN FIRST OUT) e se for o oposto de baixo pra cima é designado pilhas (LIFO - LAST IN FIRST OUT).

Isto demonstra que as listas facilitam muito, pois não precisa de tanta memoria como se fosse um vector.

segunda-feira, 20 de setembro de 2010

Manipulação de apontadores

No dia 17 de Setembro aprendi a manipular os apontador, atraves de um programa ja feito aprendi a verificar para que serve o apontador, a ver como funciona e ver os motivos dos resultados...
Abaixo coloco um programa que me ajudou a saber manipular...
Aqui verifiquei o endereço de cada variavel para não confuncir o endereço com o valor da variavel, depois descobri que o apont é uma variavel e o *apont é o valor apontado por uma variavel, como ja tinha dito.


#include <stdio.h>
main()
{
    int v[3]={4,6,10};
    int *apont; /* apontador para um inteiro */
   
    apont=&v[0]; /* apont fica a apontar para v */
    /* ou apont=v; */
   
    printf("%d %d %d %d\n",v[0],*apont,apont,&apont);
   
    getch();
   
}


O que da na consola é 4 4 2293552 2293548


Endereço      Valor          Variáveis
2293596       2293600       apont

2293600       4                   v[0]
2293604       6                    v[1]
2293608      10                   v[2]
 *apont --> 4, porque é o valor apontado

quinta-feira, 16 de setembro de 2010

Apontadores - Continuação

#include <stdio.h>
main(){
int valor;
int *apont; // declaração de um pontador
printf("Digite um numero inteiro:\n");
scanf("%d", &valor);
apont=&valor; // apont vai ficar com o endereço da variável valor
printf("valor=%d\n", &valor);
printf("Endereco=%d\n", &valor);
printf("valor apontador por %d =%d\n", apont, *apont);
system("pause");
return;
}

Para melhor entender vamos ver o output do programa:
Ex:
Digite um numero inteiro:
3
valor=3
Endereco=2293620
valor apontador por 2293620=3

O que entendi disto, foi que o valor é o que escolhemos. O endereço do valor é o endereço onde esta guardado a variável, sendo por tanto caracteres aleatórios. Agora, a variável apontador será o endereço do valor, pois esta irá buscar a variável em si (endereço) , *apont, ai sim, será o valor escolhido pois irá a variável e trará o valor apontado, não o valor da variável.

...

quarta-feira, 15 de setembro de 2010

Apontador - Introdução

Nesta aula terminamos de realizar outros exercícios de revisão e começamos um novo módulo que é os apontadores.
Afinal o que é um apontador...??
Um apontador é um tipo de dados que permite guardar endereços de outras variáveis.
Ex: apont=& valor;
Também aprendi, antes de mais, a declarar um apontador (int *apont;)

Resumindo, em c fica:
#include <stdio.h>
main(){
int valor;
int *apont;
printf("Digite um numero");
scanf("%d",&valor);
apont=&valor;

continua....

terça-feira, 14 de setembro de 2010

Revisões de linguagem c

Hoje, a aula  foi bastante interessante ...
Fizemos revisões acerca da matéria dada no período anterior, eu acho que foi bom, porque já não me lembrava de metade.
Um dos exercícios que fizemos, em linguagem C, foi este:
Some 4 inteiros, depois de introduzidos pelo utilizador e armazenados num array, imprima no ecrã a expressão correspondente e o resultado da soma.
Exemplo:
input - 6, 3, 5, 1
output - 6+3+5+1=15
A resolução era fácil, bastava fazer um ciclo for(i=0;i<4;i++) e pedir os valor  de um vector, scanf("%d",&vector[i]); e ir somando com um variável, soma=soma+vector[i];. Por fim, imprimir o resultado fazia outro ciclo e 2 printfs. for(i=0;i<3;i++) , printf("%d + ", vector[i]); e este já fora do ciclo printf("%d = %d", vector[i], soma);.

Por hoje é só ...

sábado, 11 de setembro de 2010

Bem-vindos

Bem-vindos ao meu blog,
Este blog foi criado com o propósito de auxiliar, relembrar e entender melhor as aulas leccionadas na disciplina de programação e sistemas de informação, mais conhecido pela sigla "PSI".
O meu mail é: klaudyta-3@hotmail.com
Para que quiser tirar alguma duvida ou perguntar alguma coisa, tenho total disponibilidade.