Ir ao conteúdo

Ajuda para um noob plix.....


celiojedi

Posts recomendados

Postado

Bom se o seguinte pessoal... minha professora de estrutra de dados esta passando a materia rápido de mais e nao estou pegando bem... queria ajuda de vocês para entender o seguinte.. .

como usar o encadeamento de dados (nao sei se chama assim) com struct e o malloc...

ja entendi o malloc ele aloca um espaço na memoria criando um vetor nao e isso ?

agora so nao sei como fazer FUNCIONAR...

tipo crio uma struct ne ...

tipo uma escolca que quer adicionar as notas dos alunos assim como o nome deles e a turma e criar uma media e ver quais alunos passaram na turma ...

a tem a struct

 

#include <cstdlib>
#include <iostream>

using namespace std;

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
/*Inicia a struct*/
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

struct turma
{
int cod;
char nome[50];
float nota;
int vazio;
}alunos[50];

int cadastrar(int cod, int pos);
int consultar();
int verifica_pos();
//int zerar();
int verifica_cod(int cod);
int excluir();
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*Int main*/
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

main()
{
//zerar();
int op=0,retorno,codaux,posicao;
while(op!=4){
printf("\n\n\t\t\t\t** Sistema Escola **\n\n\nMENU\n\n1 - Cadastrar\n2 - Consultar\n3 - Excluir\n4 - Sair\n\nOpcao: ");
scanf("%d",&op);
fflush(stdin);
switch(op) {
case 1: { // CADASTRAR
posicao=verifica_pos();
if (posicao!=-1) {
printf("\nEntre com o codigo desejado\n");
scanf("%d",&codaux);fflush(stdin);
retorno=verifica_cod(codaux);
if (retorno==1)
cadastrar(codaux,posicao);
else
printf("\nCodigo ja existente\n");
}
else
printf("\nA agenda esta cheia\n");
break;
}

case 2: { // CONSULTAR
consultar();
break;
}

case 3: {
excluir();
break;
}

case 4: {
printf("\n\nTchau");
break;
}

}
}

system("pause");
}

/*///////////////////////////////////////////////////////////////////////////*/
/*Funções.*/

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

int cadastrar(int cod, int pos)
{
pos=verifica_pos();

alunos[pos].cod=cod;

cout<<"nome:";

cin>>alunos[pos].nome;

cout<<"nota:";

cin>>alunos[pos].nota;

alunos[pos].vazio=1;

cout<<"Cadastro Realizado com Sucesso!"<<endl;

}

/*Consulta no struct*/

int consultar() {
int cont=0, cod;
printf("\nEntre com o codigo do aluno\n");
scanf("%d",&cod);
while(cont<=50) {
if (alunos[cont].cod==cod) {
if (alunos[cont].vazio==1) {
printf("\nNome: %s",alunos[cont].nome);
printf("\nNota: %d",alunos[cont].nota);
break;
}
}
cont++;
if (cont>50)
printf("\nAlunos nao encontrado\n");
}
}


int verifica_pos() {
int cont=0;
while (cont<=50)
{
if (alunos[cont].vazio==0)
return(cont);
cont++;
}
return(-1);
}

/* Verifica cod */

int verifica_cod(int cod) {
int cont=0;
while (cont<=100) {
if (alunos[cont].cod==cod)
return(0);
cont++;
}

/*Zerar*/
/*
int zerar() {
int cont;
for (cont=0;cont<=50;cont++)
alunos[cont].vazio=0;
}*/

/*Excluir*/

int excluir()
{
int cod, cont=0;
printf("\nEntre com o codigo do aluno que deseja excluir\n");
scanf("%d",&cod);


while (cont<=50) {
if (alunos[cont].cod==cod)
if (alunos[cont].vazio==1) {
alunos[cont].vazio=0;
printf("\nExclusao feita com sucesso\n");
break;
}
cont++;
if (cont>alunos)
printf("\nAluno nao encontrado\n");
}
}

esse codigo deu faill total alguem pode me ajudar ??? arrumar ele para mim entender o que eu fiz de errado ?

Postado

olha so nao estou conseguindo fazer funcionar ....

#include <iostream>

#include <stdlib.h>

using namespace std;

int main ()

{

int *p;

p=(int *)malloc(sizeof(int)*3);

if (p == NULL)

cout<<"Memoria com erro!!"<<endl;

int i =0;

for (;i<3;i++)

{

//p=+i;

p=(int *)malloc(sizeof(int)*i);

if (p == NULL)

cout<<"Memoria com erro!!"<<endl;

cout<<"entre como o valor:";

cin>> *p;

}

int j =3;

for (;j>0;j--)

{

p=(int *)malloc(sizeof(int)*j);

cout<<"o valor e:"<<*p<<endl;

}

free(p);

system ("pause");

}

Postado

Você precisar mexer com estruturas pra isso, não precisa fazer (sizeof(int)*3). O indice "não existe" como em um vetor que você vê vetor[1], vetor[2], etc.

Você tem que usar dentro da estrutura um apontador para um próximo, e ligar eles dentro do programa. Um exemplo simples (e bem porco, mas pra você entender, funciona):


#include <iostream>
#include <string.h>
#include <string>
#include <stdlib.h>

//Estrutura simples. Fazendo o "typedef", nao precisamos...
//...escrever "struct pessoa" a cada vez que queiramos declarar...
//...a estrutura, é só fazer "Pessoa" que dá no mesmo.

//Ou seja, "struct pessoa *p" é igual a "Pessoa *p"
typedef struct pessoa{
char nome[20];
int idade;

struct pessoa *prox;
}Pessoa;

using namespace std;

int main (){
Pessoa *p = NULL, *inicio = NULL;
char name[20];
p=(Pessoa *)malloc(sizeof(Pessoa)); //Aloca os vetores, do tamanho da estrutura
inicio=(Pessoa *)malloc(sizeof(Pessoa));

inicio=p;
int i=0;
while(i!=2){
cout<<"Qual é o nome da pessoa?"<<endl;
cin >> name;
strcpy(p->nome, name); //Guarda o nome em "p->nome", ou (*p).nome, dá no mesmo

cout<<"Qual é a idade da pessoa?"<<endl;
cin >> p->idade; //Guarda a idade em "p->idade", ou (*p).idade, dá no mesmo

p->prox = (Pessoa *)malloc(sizeof(Pessoa)); //p->prox é alocado
p = p->prox; //p recebe p->prox, ou seja, avancou no "vetor"
p->prox = NULL; //Como p agora vale p->prox, fazemos o seguinte a ele valer NULL
//...ou seja, em relação ao p inicial, p->prox->prox = NULL

cout<<"Valor de i?"<<endl;
cin>>i;
}

//Funcaozinha que imprime a lista de pessoas, ta travando, mas funciona pra você aprender
while(inicio->prox != NULL){
cout<<"O nome é " << inicio->nome << endl;
cout<<"A idade é "<< inicio->idade << endl<<endl;

inicio=inicio->prox;
}


free(p);
free(inicio);
system ("pause");
}

Enquanto o valor de "i" for diferente de 2, ele vai armazenando as pessoas, com nome e idade. Pra ir pra uma próxima pessoa (ou seja, proximo indice do vetor) ele deve alocar esse espaço e depois fazer que ele receba o prox.

Dê uma olhada se você entende.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!