Jump to content

Tabelas de estatística e ginásio - Ajuda


Discursivo
 Share

Recommended Posts

Tanto eu como um amigo meu tivemos a ideia de criar um programa que fizesse a estatística de um ginásio, onde uma pessoal iria fazer 4 exercícios, diariamente, entre os quais a passadeira, a eliptica , o remo e bicicleta.

Abaixo deixo um "print" da nossa ideia.

Nós já começamos a trabalhar nisso.

O problema rege-se da forma de não sabermos como começar o mesmo.

Também deixarei um print daquilo que fizemos até agora.

print.png

("print da tabela")

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>

void main (void)

{
//declaração de variáveis das modalidades praticadas
float bicicleta;
float eliptica;
float passadeira;
float remo;
//declaração de sub-variáveis das modalidades praticadas sendo que o inicio das variaveis sao b (bicicleta), e(eliptica), p(passadeira) e r(remo)sua respectiva de Tempo e Distância
float btempo;
float bdistancia;
float etempo;
float
}

Agradeço uma resposta, obrigado.  :down:

Link to comment
Share on other sites

  • Replies 63
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Boas estou juntamente com o "Discursivo" a fazer este projecto, em C. Temos com base o programa Virtual C++ 2008.

Nós pretendemos em fazer algo com a aparência deste género:

____________________________________________________
|****************************************************|
|****************************************************|
|******************||NOME DO PRO||********************|
|****************************************************|
|****************************************************|
____________________________________________________










[MÊS/DIA][bICICLETA ][ ELIPTICA ][PASSADEIRA][   REMO   ]
[       ][Temp][Dist][Temp][Dist][Temp][Dist][Temp][Dist]
|01-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|02-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|03-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|04-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|05-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|06-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|07-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|08-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|09-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|10-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|11-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|12-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|13-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|14-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|15-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|16-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|17-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|18-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|19-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|20-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|21-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|22-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|23-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|24-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|25-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|26-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|27-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|28-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|29-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|30-X-10||    ||    ||    ||    ||    ||    ||    ||    |
|31-X-10||    ||    ||    ||    ||    ||    ||    ||    |
[TOTAL: ][    ][    ][    ][    ][    ][    ][    ][    ]
[MÉDIA: ][    ][    ][    ][    ][    ][    ][    ][    ]

é um programa simples, mas com algumas dificuldades no inicio de fazer o código, estamos com algumas dificuldades a nivel de selecção de variaveis. Ainda não sabemos bem que tipo de funçoes vamos utilizar, será que podem dar umas "Luzes"! Obrgado!

Aconselho o uso de structs.

O que tens a fazer é só incluir os dados na struct e depois fazer os cálculos indo buscar, na mesma, os dados.

os structs são idênticos às strings certo? mas a questão é:

os utilizadores, do programa, irão introduzir dia a dia os seus valores, não vão introduzir os valores todos.

Estáva-mos a pensar em usar a criação de um ficheiro e cada vez que a pessoa introduzisse novos valores actualiza-se, no final do mês o programa vai puxar o ficheiro .txt, e fazer os totais e as médias. que acham?

Link to comment
Share on other sites

É agora ir por partes.

1º Tens de certificar que o programa grava os dados nas variáveis, e põe num ficheiro .txt, isto num único dia.

Quanto a por dados no ficheiro não te posso ajudar pois não percebo muito bem, ainda.

Mas quanto as funções e variáveis é simples. Crias várias stucts(btw, struct não é string, struct guarda um conjunto de dados), sendo elas Data, Bicicleta, ELIPTICA, PASSADEIRA, REMO. Onde cada struct possui os dois dados Temp e Dist, com exceção da Data.

Struct é algo assim

struct bicicleta{
   int tempo;
   int distancia;
};

Se quiseres usas funções a parte, mas para isso precisas de conhecer os apontadores e saber utilizalos, se não, fazes tudo na main(), uma série de printf e fgets(ou scanf), de forma a guardar tudo em cada variável de cada struct.

Btw, para isto terás de criar um apontador para cada estrutura, isso implica criar um tipo também:

typedef struct bicicleta BICICLETA;
BICICLETA * p = NULL;

Fazes os mesmo para as restantes structs, mas apontadores com nomes diferentes. E quando quiseres fazer o scanf ou guardar o input na variável fazes " p->variável ", onde p é o apontador da struct e a variável, já sabes.

Link to comment
Share on other sites

A se percebi, temos que criar uma espécie de funções "void" externas do género:

void bicicleta (void);
{
  
   struct bicicleta{
   int tempo;
   int distancia;
};
   printf ("/n/nIntroduza o tempo Bicicleta:  ");
   scanf("%d", &tempo);
   printf ("/nIntroduza a distância de Bicicleta:   ");
   scanf("%d", &distancia);
   return;
}

uma para a bicicleta, elíptica, passadeira e remo.

depois chamamos as funções no main void.

aqui no nosso caso, para cada dia temos que guardar um ficheiro .txt

void main(void)
{
FILE *fp;
char stuff[50];
int index;
fp = fopen(“FICHEIRO.TXT","w");
for (index = 1; index <= 10; index++)
fprintf(fp,"%s Linha numero %d\n", chamar o valor obtido);
fclose(fp);
}

é deste género?

Link to comment
Share on other sites

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

struct bicicleta{
   int tempo;
   int distancia;
};
struct eliptica{
   int tempo;
   int distancia;
};
struct passadeira{
   int tempo;
   int distancia;
};
struct remo{
   int tempo;
   int distancia;
};

o primeiro paço é fazer isto certo?

mas precisamos de defenir a quantidade de dados que iremos por, por exemplo assim:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

struct bicicleta{
   int tempo[31];
   int distancia[31];
};
struct eliptica{
   int tempo[31];
   int distancia[31];
};
struct passadeira{
   int tempo[31];
   int distancia[31];
};
struct remo{
   int tempo[31];
   int distancia[31];
};

neste caso pus como tamanho 31, pois é a quantidade de dia que um mês têm no máximo.

Link to comment
Share on other sites

Não precisas de declarar um tipo de struct para cada modalidade, visto que são todas iguais

Sim eh capaz de ser mais simples gravar o total numa variavel dentro da struct, não sendo necessario no entanto.

A seguir seria fazer o "load" dos dados guardados no ficheiro e pedir o dia (se for isto que pretendem) em que o utilizador quer introduzir, e fazer a introdução

No fim seria guardar de novo no ficheiro

Penso que cobre basicamente isso... se precisarem de mais avisem

espero ajudar

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

"Um Campo Total como assim?"

Em vez de ser

struct bicicleta{
   int tempo[31];
   int distancia[31];
};

seria

struct bicicleta{
   int tempo[31];
   int distancia[31];
   int total;
};

entendes?

acho que me esta a escapar algo...

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Aquilo de separar as structs foi só pra perceberes, podes por tudo em um ou como te der jeito.

Visto serem 31 dias, se separaste totalmente as structs, terás de criar um tipo para cada e declarar com tamanho 31. Isto:

BICICLETA bicicleta[31];
Link to comment
Share on other sites

Secalhar para isso guardava tambem o numero de dias introduzidos, para depois fazer a media?

...

não eh necessario, de novo, mas pode-lhe facilitar o algoritmo...

para alem disso memoria não eh um problema

Exemplo:

struct bicicleta{
   int tempo[31];
   int distancia[31];
   int total;
   int num;
};

De novo, isto depende da "tecnica" que quiserem usar...

Strabush, ele pode declarar um array de 31 bicicletas como la dentro ter 2 arrays de inteiros cada um com 31 de tamanho

Eh igual...

Tens rasão, mas agora que já percebeu n valeria a pena estar a criar novos tipos completamente iguais

EDIT: quando me referi a tecnica, refiro-me a, por exemplo, como querem fazer a introdução, ou seja, se quiserem que o utilizador especifique o dia o 'num' talvez não valha a pena, mas se a introdução for sequencial até  ajuda a saber onde vais fazer a nova introdução, sem teres que recontar o numero de elementos que já tens no array como tambem o seu total

Tudo depende de como vais "encarar" a tabela

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Grava tudo numa matriz. Tu sabes que os campos que precisas são sempre 2 e sabes que só precisas de 31 dias, no máximo, por isso crias uma matriz de 31 linhas e 8 colunas e depois trabalhas aos pares.

#define LIN 31
#define COL 8

int table[LIN][COL];
scanf("%i %i", &table[0][0], &table[0][1]);
scanf("%i %i", &table[0][2], &table[0][3]);

Claro que terias duas variáveis para iterarem por toda a matriz, atenção que a variável que itera pelas colunas incrementa de 2 em 2 unidades.

here since 2009

Link to comment
Share on other sites

Não precisas de declarar um tipo de struct para cada modalidade, visto que são todas iguais

Sim eh capaz de ser mais simples gravar o total numa variavel dentro da struct, não sendo necessario no entanto.

A seguir seria fazer o "load" dos dados guardados no ficheiro e pedir o dia (se for isto que pretendem) em que o utilizador quer introduzir, e fazer a introdução

No fim seria guardar de novo no ficheiro

Penso que cobre basicamente isso... se precisarem de mais avisem

espero ajudar

Ou seja, neste caso, guardava o valor por exemplo dia 01-01-10, guardava num ficheiro 010110.txt com o valor de 10 (quilometros) e quando fossemos introduzir novo valor, por exemplo do dia 02-01-10, guardava num ficheiro 020110.txt depois ia a buscar esses valores todos e fazia os totais por exemplo da distancia e tempo...

é isso?

mas é preciso na mesma declarar 1 struct para cada modalidade, pois cada modalidade, é a parte, as medias da distância é só para a a respectiva modalidade!

Em vez de ser

struct bicicleta{
   int tempo[31];
   int distancia[31];
};

seria

struct bicicleta{
   int tempo[31];
   int distancia[31];
   int total;
};

entendes?

acho que me esta a escapar algo...

neste caso não é preciso por o total, depois na função "principal", dá para chamar os dados armazenados na struct não?

Link to comment
Share on other sites

Aquilo de separar as structs foi só pra perceberes, podes por tudo em um ou como te der jeito.

Visto serem 31 dias, se separaste totalmente as structs, terás de criar um tipo para cada e declarar com tamanho 31. Isto:

BICICLETA bicicleta[31];

sim, o problema é por exemplo no dia 1 guando um determiado valor. como associo esse valor ao dia 1? Com os apontadores=?

Link to comment
Share on other sites

Grava tudo numa matriz. Tu sabes que os campos que precisas são sempre 2 e sabes que só precisas de 31 dias, no máximo, por isso crias uma matriz de 31 linhas e 8 colunas e depois trabalhas aos pares.

#define LIN 31
#define COL 8

int table[LIN][COL];
scanf("%i %i", &table[0][0], &table[0][1]);
scanf("%i %i", &table[0][2], &table[0][3]);

Claro que terias duas variáveis para iterarem por toda a matriz, atenção que a variável que itera pelas colunas incrementa de 2 em 2 unidades.

como assim?

Link to comment
Share on other sites

Usa o método que o Pinguim aconselhou, poupa-te trabalho e deixa limpinho o código.

Para por na variavel não tem muito segredo:

p->dia[1]

(...) onde p é o apontador para a estrutura, devias ter criado, ve no meu antepenultimo post.

O pensamento do Local por acaso simplifica ainda mais o trabalho, mas terás de perceber melhor.

Link to comment
Share on other sites

Usa o método que o Pinguim aconselhou, poupa-te trabalho e deixa limpinho o código.

Para por na variavel não tem muito segredo:

p->dia[1]

(...) onde p é o apontador para a estrutura, devias ter criado, ve no meu antepenultimo post.

O pensamento do Local por acaso simplifica ainda mais o trabalho, mas terás de perceber melhor.

Pois eis o problema, ainda não percebo muito disto, já tive umas aulinhas de programação, mas ainda não aprendemos a fazer matrizes! mas aprende-se... hehe

Link to comment
Share on other sites

Eu disse TIPOS de estruturas

vais ter de declarar 4 estruturas, 1 para cada modalidade ah mesma...

Para queh um ficheiro para cada dia?

Pasta separares cada dia por uma linha ou algo do genero, tudo dentro do mesmo ficheiro...

se tiveres 31 dias, vais fazer 31 ficheiros, so para escrever uma linha em cada um?

Respondendo ao que estão a falar...

Para simplificar, o que o Localhost está a dizer é para criares uma matriz para guardar TODOS os valores, tanto po tempo como pa distancia de cada modalidade

8 colunas significa aqui 2 colunas por cada modalidade

como são 4 modalidades, 4x2 = 8

31 é porque no maximo tens 31 dias...

para avançares de modalidade em modalidade, tens de avançar 2 colunas, pq cada modalidade tem duas colunas

desta forma, por exemplo, para leres para a coluna 'distancia' da modalidade bicicleta, seguindo o teu exemplo, seria:

scanf("%i",&table[0][1]);

a sugestão do localhost eh trabalhares aos pares, ou seja, por cada leitura preencheres LOGO as duas tabelas de uma modalidade, daí

scanf("%i %i", &table[0][0], &table[0][1]);

este codigo já te leh tanto o 'tempo' como tambem o 'distancia' da tua primeira modalidade (neste caso, BICICLETA)

...

"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.