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.