SimRacing Portugal Forum
Pedido atrasado e urgente... linguagem C - Printable Version

+- SimRacing Portugal Forum (https://www.simracingportugal.net/forum)
+-- Forum: Hardware e Software (https://www.simracingportugal.net/forum/forumdisplay.php?fid=6)
+--- Forum: Hardware/Software - Ajuda e Suporte (https://www.simracingportugal.net/forum/forumdisplay.php?fid=63)
+--- Thread: Pedido atrasado e urgente... linguagem C (/showthread.php?tid=9246)



Pedido atrasado e urgente... linguagem C - Alexandre Caetano - 30-05-2009

Bem... "A gente somos burros" e precisavamos de uma ajudita para fazer este trabalhito de faculdade. É para entregar até amanhã as 20 mas é daquelas coisas que PARA QUEM SABE, é canja... Tivemos 4 tardes a debatermo-nos sobre o assunto e mesmo assim quase nada conseguimos fazer. Falo em nós porque é um trabalho de grupo.

Gostaria então que alguém pudesse dar um empurrãozito para resolver esta situação.

https://mocho.di.fc.ul.pt/file.php/63/docsTPs/trabalho3.0809.pdf

Nós até agora temos isto:

http://www.2shared.com/file/6016564/7cfdd05/temos.html

O trabalho original que é falado, do acrescentar é isto:

http://www.2shared.com/file/6016576/f0da8d68/trab2.html



A ajuda seria essencialmente na alínea da estrutura. A partir daí as outras até que se vão fazendo. Estamos com dificuldades é na atribuição dos valores à estrutura a gravação da respectiva no ficheiro.


Extremamente agradecidos,
Alexandre Caetano
Pedro Vieira
Filipe Carvalho


RE: Pedido atrasado e urgente... linguagem C - RicGom - 31-05-2009

Alexandre, correndo o risco de estares a falar de alhos e eu a responder bogalhos Smile, aqui vai :

O conjunto

typedef struct {
int points; /* numero de pontos obtidos */
char player[8]; /* pacman, inky, blinky, pinky or clyde */
time_t sta_time; /* data/hora da entrada no jogo */
time_t end_time; /* data/hora da saida do jogo */
uid_t user; /* identificador do utilizador que jogou */
char logname[16]; /* nome do utilizador que jogou */
} pacman_record_t;

define um novo tipo que passa a poder ser utilizado como outro tipo "interno" ao C.
Isto é, da mesma forma que quando escreves :

int i_numero_inteiro;
Estás a declarar a variável i_numero_inteiro como sendo do tipo int, passas a poder declarar algo do género :

pacman_record_t v_registo_record;
Desta forma declaras a variável v_registo_record, como sendo do tipo pacman_record_t.

Depois de declarares essa variável, podes usá-la exactamente da mesma forma que qualquer outra, identificando o nome da variável seguido de "." (ou "->" no caso de ser um apontador) seguido do campo interno da estrutura, tipo :

v_registo_record.points=100;

ou

strcpy(v_registo_record.player, "blinky");


A escrita em ficheiro binário segue a forma :

fwrite(&v_registo_record,sizeof(v_registo_record),1, fp )
Parâmetros :
- Apontador para "o que" queres gravar
- Tamanho unitário do que queres gravar
- n vezes o tamanho do parâmetro anterior (Na práctica cada registo em ficheiro fica com o tamanho Parâmetro 2 * Parâmetro 3)
- Apontador para o ficheiro onde queres escrever

em que fp é um FILE *, previamente definido e que "sofreu" a atribuição dada por um fopen()

É claro que o exemplo está descrito para um único registo, mas o princípio é o mesmo para n registos.
A forma mais simples de usar a variável para n registos seria definir, por exemplo :

pacman_record_t v_registo_record[100];

Desta forma definirias um array com 100 registos, o inconveniente é que tens que saber o limite máximo que nem sempre é conhecido. Outra forma seria criar dinamicamente cada elemento do "array" com apontadores e respectiva alocação de memória, mas isso é outro filme Smile

Se não era nada disto que querias saber, deculpa lá o tempo que te tomei Wink


RE: Pedido atrasado e urgente... linguagem C - RedChico - 02-06-2009

Ah......
Ricas lembranças da minha frequência falhada na uni....
Tbem tive C.

4 dias a correr para acabar um simulador de ATC (air trafic controler), que logicamente não ficou bem.

Mais outros tantos, desta vez mais relaxados a fazer um "joguito" com um canhão a atirar contra uns cubos no chão (3D), que pelos poderes da lócgica tbém não ficou bem.... só podia dispara um tiro de cada vez (i.e. tinha que esperar que o projectil atingisse algo/terminado um timer que pus) entre outras coisas.... MrGreenBig GrinCoolBlush