• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedroerg

[C] Ajuda: Criar um array dinâmico (Resolvido)

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha vê se isto ajuda :P

#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);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Existem 3 grandes funções que permites manusear memória em C: malloc, realloc e free.

Também tens o calloc. :P

Ex:


char *A;

A = (char *)calloc(1024,sizeof(char));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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*  :P

como tava a trabalhar só tive mm tempo de dar um exemplo, n deu pra explicar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não referi o calloc propositadamente. Serve para alocar arrays, mas como o senito demonstrou é perfeitamente viável usar o malloc para esses casos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora