Ir para conteúdo

POWERED BY:

Arquivado

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

danielmontagna

Agenda em C++

Recommended Posts

e ae galera beleza ???

 

preciso fazer uma agenda para um trampo da faculdade com lista ligada simples emC++ e queria uma forca, deeum uma olhada o que fiz ate agora

 

struct Node {
// data members
int telres[9];
int telcom[9];
int email[100];
char nome[100];
Node *proximo;
};



class ListaSimples{
  private:
	Node *primeiro;

  public:
	ListaSimples(){
		primeiro=0;
	}
	~ListaSimples();
	int isEmpty(){
		return primeiro==0;
	}


ListaSimples::~ListaSimples(){
 Node *p;
 while(!isEmpty()){
   p = primeiro;
   primeiro = primeiro->proximo;
   delete p;
 }
}



bool ListaSimples::insere(){
  Node *novocad, *anterior, *atual;
  novocad = new Node();
  if(novocad == NULL) return false;
  anterior = NULL;
  atual = primeiro;
  cout<<"Digite o nome ";
  cin.getline(novocad->nome);

tipo dai ja nao compila alguem pode dar uma forca ???

 

preciso cadastras os contados com nome tel res e comercial endereco

 

depois alterar

 

e remover

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro que dá?

 

PS. daqui dá pra ver que seu código tá cheio de erros e gambiarras dá uma checada.

Ex:

ListaSimples::~ListaSimples(){
Node *p;
while(!isEmpty()){
   p = primeiro;
   primeiro = primeiro->proximo;
   delete p;
}
}
Tu não usa ListaSimples:: quando a definição tá dentro da classe.

 

~ListaSimples();
int isEmpty(){
   return primeiro==0;
}

Decide, ou declara só os protótipos dos métodos na classe ou declarar os comandos todos ali... fazer os dois fica muito gambiarra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

opaaa

 

entao esse jeito que fiz e do jeito que a professora passou hhhe tipo copiei do dela ainda vichi fiquei ate preocupado agora hehe

 

59 C:\Users\MONTAGNA\Desktop\Atividades Faculdade\ED 2008\listasimples_SI_2008_1[1] testes.cpp no matching function for call to `std::basic_istream<char, std::char_traits<char> >::getline(char[100])'

 

note C:\Dev-Cpp\include\c++\3.4.2\bits\istream.tcc:582 candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]

 

note C:\Dev-Cpp\include\c++\3.4.2\bits\istream.tcc:582 std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::getline(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]

 

esses sao os erros que dao vlwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na função getline falta um parâmetro, o tamanho dos dados que deve ser lido:

cin.getline(novocad->nome, 10); //lê 10 caracteres

cin.getline(novocad->nome, 100); lê 100 caracteres

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa entao surgiu mais uma duvida

 

preciso inserir na minha agenda ordenadamente pelo nome

 

segue o que fiz porem quando mando listar ele lista somente o primeiro cadastro que eu coloco tipo

 

cadastro daniele daniel e luiz

 

deverias listar

 

daniel

 

daniele

 

luiz

 

porem ele lista

 

daniele

 

daniele

 

daniele

 

segue meu codigo

 

bool ListaSimples::insere(){
	int x=0;
	int tamanho;
  Node *novocad, *anterior, *atual;
  novocad = new Node();
  if(novocad == NULL) return false;
  anterior = NULL;
  atual = primeiro;
  cout<<"Digite o nome ";
  cin.getline(novocad->nome,100);
  
	while(atual!=NULL){
	 if(novocad->nome[x]=atual->nome[x]){
	 x++;
	 }else{
		   if(novocad->nome[x]<=atual->nome[x]){
		   break;
		   }else{
					  anterior = atual;
					  atual = atual->proximo;									  
					  }
		   }	
  }
  
  if(anterior == NULL){
	novocad->proximo = primeiro;
	primeiro = novocad;
  }
  else{
	anterior->proximo=novocad;
	novocad->proximo = atual;
  }

  return true;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta:

 

if(novocad->nome[x]=atual->nome[x]){

É para estar acontecendo atribuição de variável nesta linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta:

 

if(novocad->nome[x]=atual->nome[x]){

É para estar acontecendo atribuição de variável nesta linha?

opaaa

 

entao nao era nao era para comprar , o correto é == mesmo

 

foi erro meu

 

brigadao pelos meus testes terminei o insere pelo menos para o nome agora vou incluir os outros parametros da agenda

 

mais uma vez brigadao

 

mais duvidas eu posto aqui

 

e vlww mesmo c ta me dando uma #@?$%~ forca vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais um problema

 

insere o resto das informacoes na leitura ele le o primeiro correto so que quando vou insere um novo ele pula o nome e vai direto para o e-mail

 

sabe pq ??

 

bool ListaSimples::insere(){
	int x=0;
  Node *novocad, *anterior, *atual;
  novocad = new Node();
  if(novocad == NULL) return false;
  anterior = NULL;
  atual = primeiro;
  cout<<"\nDigite o nome ";
  cin.getline(novocad->nome,100);
  cout<<"\nDigite o e-mail";
  cin.getline(novocad->email,100);
  cout<<"\nDigite o Tel Residencial";
  cin>>novocad->telres;
  cout<<"\nDigite o Tel Comercial";
  cin>>novocad->telcom;
  while(atual!=NULL){
	 while(novocad->nome[x]==atual->nome[x]){
	 x++;
	 }
		   if(novocad->nome[x]<=atual->nome[x]){
		   break;
		   }else{
					  anterior = atual;
					  atual = atual->proximo;									  
					  }
					  
		   }	
  
  
  if(anterior == NULL){
	novocad->proximo = primeiro;
	primeiro = novocad;
  }
  else{
	anterior->proximo=novocad;
	novocad->proximo = atual;
  }

  return true;
}

vlw desde ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta 1:

Como você está digitando o Telefone Comercial e o Telefone Residencial? (isso quando já tá rodando o programa)

Pergunta 2:

Nesse while aqui:

while(atual!=NULL){
	 while(novocad->nome[x]==atual->nome[x])
	 {
			x++;
	 }
	 if(novocad->nome[x]<=atual->nome[x])
	 {
		   break;
	 }else
	 {
		   anterior = atual;
		   atual = atual->proximo;									  
	 }
}
Isso seria para impedir que duplique o cadastro estou certo? Se for, tente assim ó:

while(atual!=NULL){
	 while(novocad->nome[x] == atual->nome[x] && novocad->nome[x] != '\0')
	 {
			x++;
	 }
	 if(novocad->nome[x] != atual->nome[x])
	 {
		   break;
	 } else
	 {
		   anterior = atual;
		   atual = atual->proximo;									  
	 }
}

 

Mais uma coisa: a próxima vez que for postar código cara, use a tag code que fica mais fácil de visualizar!

Mais uma coisa, depois de responder as duas perguntas que eu fiz, se eu não achar a solução de cara, me posta o código inteiro do arquivo da classe em uma tag codebox para mim poder testar e analisar!

Falopa! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

opaaa

 

mals ae nao sabia desse do code

 

entao vamos la respondendo suas perguntas

 

eu to digitando os tels somente numeros ( pois tentei colocar assim 3434-4444 ) pelo - ele da pal e pula tudo mais para frente vou tratar a entrada de dados porem quero primeiro que o programe rode para eu garantir pelo menos uma nota depois dando tempo vou deixar redondo essas coisas se eu conseguir ne huauhau

 

entao esse while nao e para duplicar para inserir ordenado eu comparo no while letra por letra enquanto forem iguai inclemento o x, se for diferente sai do while comparo se e menor ou maior do que meu elemento atual da lista, pelos meus testes somente com o nome no node ele inseriou ordenado corretamente

 

segue o meu codigo completo ate o momento, quando eu rodo e aperto 1 para entrar no insere ele pula direto para o e-mail nao deixa eu digitar o nome

 

[/code]#include <iostream>
#include <stdlib.h>
#include <string.h>


using namespace std;
struct Node {
// data members
int telres;
int telcom;
char email[100];
char nome[100];
Node *proximo;
};



class ListaSimples{
  private:
	Node *primeiro;

  public:
	ListaSimples(){
		primeiro=0;
	}
	~ListaSimples();
	int isEmpty(){
		return primeiro==0;
	}	
	bool insere();//insere ordenado
	bool remove(int); //remove o elemento passado por parâmetro
	bool estanaLista(int); //verifica se um determinado elemento (passado por parâmetro) está na lsita
	float media();//retorna a média dos elementos da lista
	void printLista();//imprime os elementos da lista
	int tamanho();
	void copia(ListaSimples &);

};

ListaSimples::~ListaSimples(){
 Node *p;
 while(!isEmpty()){
   p = primeiro;
   primeiro = primeiro->proximo;
   delete p;
 }
}



bool ListaSimples::insere(){
	int x=0;
  Node *novocad, *anterior, *atual;
  novocad = new Node();
  if(novocad == NULL) return false;
  anterior = NULL;
  atual = primeiro;
  
  cout<<"\nDigite o nome\n";
  cin.getline(novocad->nome,100);
  cout<<"\nDigite o e-mail\n";
  cin.getline(novocad->email,100);
  cout<<"\nDigite o Tel Residencial\n";
  cin>>novocad->telres;
  cout<<"\nDigite o Tel Comercial\n";
  cin>>novocad->telcom;
  
  while(atual!=NULL){
	 while(novocad->nome[x]==atual->nome[x]){
	 x++;
	 }
		   if(novocad->nome[x]<=atual->nome[x]){
		   break;
		   }else{
					  anterior = atual;
					  atual = atual->proximo;									  
					  }
					  
		   }	
  
  
  if(anterior == NULL){
	novocad->proximo = primeiro;
	primeiro = novocad;
  }
  else{
	anterior->proximo=novocad;
	novocad->proximo = atual;
  }
 
  return true;
}
void ListaSimples::printLista()
{
  Node *tmp;
  for(tmp=primeiro;tmp!=0;tmp=tmp->proximo)
	cout<<tmp->nome<<" ";
  cout<<"\n";
}


int main()
{

	ListaSimples L;
	int opcao=0,numero,pos;
	
	do{
		
	  cout<<"\n1 - Insere \n2 - Remove\n3 - insere pos\n4 - consultar\n5 - tamanho\n0 - Sair";
	  cin>>opcao;
	  switch(opcao)
	  {
	   case 1: cout<<"Digite o numero que deseja inserir ";
		   L.insere();
		   
		   break;
	  /* case 2: cout<<"Digite o numero que deseja remover ";cin>>numero;
		   L.remove(numero);
		   L.printLista();
		   break;
	   case 3: cout<<"Digite o numero que deseja inserir ";cin>>numero;
			  cout<<"Digite a posicao do numero que deseja inserir";cin>>pos;
			L.inserepos(numero,pos);
			L.printLista();
			break;
	   case 4: cout<<"\nDigite o numero que deseja consultar ";cin>>numero;
			   if(L.estanaLista(numero)==true) cout<<"encontrado\n";
			   else cout<<"não encontrado\n";
			   break;
	   case 5: cout<<"\nNumero de celulas ";
			   cout<<L.tamanho();
			   break;*/		
	   case 0: cout<<"saindo...";
	  }
	}while(opcao!=0);
	system("PAUSE");
	return 0;

}


[code]

vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá vendo essa linha aqui:

 

cout<<"\nDigite o nome\n";

Tenta botar:

 

cin.ignore(1);
cout<<"\nDigite o nome\n";

Aqui deu certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.