pedroerg Posted October 18, 2006 at 01:57 PM Report #58320 Posted October 18, 2006 at 01:57 PM Olá. Queria pedir ajuda relativamente a um programa em c que tenho que fazer que é muito simples mas estou encravado. è o seguinte: Como faço eu um array dinamico para guardar numeros inteiros, sendo depois pedido o maior, menor e media? claro que a linguagem é c. Um abraço
Rui Carlos Posted October 18, 2006 at 02:25 PM Report #58328 Posted October 18, 2006 at 02:25 PM tens mesmo que criar um array dinâmico? ou apenas tens que guardar os valores para poderes saber qual vai ser a média, o maior e o menor? ... e já agora, bem-vindo ao fórum 😛 Rui Carlos Gonçalves
senito Posted October 18, 2006 at 02:48 PM Report #58329 Posted October 18, 2006 at 02:48 PM Olha vê se isto ajuda 😛 #include <stdio.h> #include <math.h> #include <conio.h> typedef struct manha{ float x; float y; }manha; void lista_pontos(int ponto, float p1x, float p1y, float p2x, float p2y) { float pmx, pmy, distancia, raio, angulo, calcx, calcy; int i=0; //float vecx[ponto], vecy[ponto]; manha *vec=NULL; pmx = (p1x + p2x)/2; pmy = (p1y+p2y)/2; distancia = sqrt( pow(p2x-p1x,2) + pow(p2y-p1y,2)); raio = distancia / 2; angulo = ((360/ponto)*3.1415927)/180; if(ponto>0){ vec = (manha *) malloc(sizeof(manha)*ponto); } for(i=0;i<ponto;i++) { vec[i].x = cos(angulo*i) * raio + pmx; vec[i].y = sin(angulo*i) * raio + pmy; //printf("Ponto x%d : %f\t",i,calcx); //printf("Ponto y%d : %f\n",i,calcy); } for(i=0;i<ponto;i++) { printf("Ponto x%d : %f\t",i,vec[i].x); printf("Ponto y%d : %f\n",i,vec[i].y); } getchar(); } void main() { int ponto; float p1x, p1y, p2x, p2y; printf("Introduza o numero de pontos para definir a circunferencia:"); scanf("%d",&ponto); printf("Introduza as coordenadas do ponto 1:"); scanf("%f %f",&p1x,&p1y); printf("Introduza as coordenadas do ponto 2:"); scanf("%f %f",&p2x,&p2y); lista_pontos(ponto, p1x,p1y,p2x,p2y); }
Solution Warrior Posted October 18, 2006 at 04:31 PM Solution Report #58343 Posted October 18, 2006 at 04:31 PM Pretendes criar um vector dinâmico ou uma lista? O segundo é mais comum, e ambos cumprem o teu objectivo. Seja como for, vou-te responder ao primeiro. Existem 3 grandes funções que permites manusear memória em C: malloc, realloc e free. Alocação de memória, Re-Alocação, e libertação. void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); O malloc(x) aloca x bytes de memória. No exemplo do senito vês-lo a alocar memória, usando "sizeof(manha)*ponto", ou seja, está a disponibilizar para o seu programa um espaço contíguo da memória igual ao tamanho da estrutura por ele criada um x número de vezes (esse número de vezes é o "ponto"). Ora, ele pode faze-lo deste modo porque conhece à partida qual o tamanho que necessita para o vector. E se não conhecesse? Aí, entra o realloc, que permite alterar o tamanho de um espaço de memória. (grande asneira que acabei de dizer, é impossível, como é óbvio, esticar a memória) Basicamente ele disponibiliza para o teu programa N bytes de memória após o ponto escolhido. Se essa memória estiver ocupada, ele move o teu vector (sim, costuma-se usar em vectores para o seu tamanho ser aumentado) para um local onde ele "caiba". Acho que ficou pouco explicito, mas encontras bastante informação sobre estes dois comandos no google.
Hipnoted Posted October 18, 2006 at 05:34 PM Report #58366 Posted October 18, 2006 at 05:34 PM Existem 3 grandes funções que permites manusear memória em C: malloc, realloc e free. Também tens o calloc. 😛 Ex: char *A; A = (char *)calloc(1024,sizeof(char)); "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
senito Posted October 18, 2006 at 06:00 PM Report #58381 Posted October 18, 2006 at 06:00 PM Pretendes criar um vector dinâmico ou uma lista? O segundo é mais comum, e ambos cumprem o teu objectivo. Seja como for, vou-te responder ao primeiro. Existem 3 grandes funções que permites manusear memória em C: malloc, realloc e free. Alocação de memória, Re-Alocação, e libertação. void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); O malloc(x) aloca x bytes de memória. No exemplo do senito vês-lo a alocar memória, usando "sizeof(manha)*ponto", ou seja, está a disponibilizar para o seu programa um espaço contíguo da memória igual ao tamanho da estrutura por ele criada um x número de vezes (esse número de vezes é o "ponto"). Ora, ele pode faze-lo deste modo porque conhece à partida qual o tamanho que necessita para o vector. E se não conhecesse? Aí, entra o realloc, que permite alterar o tamanho de um espaço de memória. (grande asneira que acabei de dizer, é impossível, como é óbvio, esticar a memória) Basicamente ele disponibiliza para o teu programa N bytes de memória após o ponto escolhido. Se essa memória estiver ocupada, ele move o teu vector (sim, costuma-se usar em vectores para o seu tamanho ser aumentado) para um local onde ele "caiba". Acho que ficou pouco explicito, mas encontras bastante informação sobre estes dois comandos no google. essa explicação tá 5* 😛 como tava a trabalhar só tive mm tempo de dar um exemplo, n deu pra explicar.
Warrior Posted October 18, 2006 at 06:20 PM Report #58392 Posted October 18, 2006 at 06:20 PM Não referi o calloc propositadamente. Serve para alocar arrays, mas como o senito demonstrou é perfeitamente viável usar o malloc para esses casos.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now