Ir para conteúdo
Fórum Script Brasil

Thiago Mendes

Membros
  • Total de itens

    16
  • Registro em

  • Última visita

Tudo que Thiago Mendes postou

  1. Tem como sim, só usar algum algoritmo de ordenação , tipo bubblesort, qualquer um do gênero, só que adaptado para pilha =D
  2. Galera, seguinte eu preciso fazer uma calculadora polonesa em C, esse código está basicamente como o do professor só mudei algumas coisas que estavam dando conflito, preciso urgentemente de ajuda por favor, o programa não está funcionando, apesar de parecer estar certo ;/ A idéia do programa é entrar com, por exemplo: (3*(4+5)) e ele te retornar a resposta correta, sendo que a leitura é feita tipo: ( , enter 3, enter *, enter... Obrigado desde já, e se possível gostaria do máximo de explicações possíveis, por que usei pouco char até hoje, e não sei direito a diferença entre char valor, e char valor[10] e tal... #include <stdio.h> struct ptr{ char valor[10]; struct ptr *prox; } *p, *num, *op; // num = números .: op = operadores; void empilha(struct ptr *p1, char valor[10]){ struct ptr *aux; aux = (struct ptr*) malloc(sizeof(struct ptr)); strcpy(aux -> valor, valor); aux -> prox = p1; p1 = aux; aux = (struct ptr*) NULL; } void desempilha(struct ptr *p1, char *num[10]){ struct ptr *aux; aux = p1; p1 = aux -> prox; aux -> prox = (struct ptr*) NULL; strcpy(*num,aux -> valor); free(aux); aux = (struct ptr*) NULL; } void cria_expressao(){ struct ptr *aux; char valor[10]; p = (struct ptr*) NULL; printf("Entre com a expressao: ( coloque um '.' para indicar o final )"); scanf("%s", &valor); if(strcmp(valor,".")){ p = (struct ptr*) malloc(sizeof(struct ptr)); strcpy(p -> valor,valor); aux = p; printf("Entre com a expressao: "); scanf("%s", &valor); while(strcmp(valor,".")){ aux -> prox = (struct ptr*) malloc(sizeof(struct ptr)); aux = aux -> prox; strcpy(aux -> valor,valor); printf("Entre com a expressao: "); scanf("%s", &valor); } aux -> prox = (struct ptr*) NULL; aux = aux -> prox; } } void calcula(){ struct ptr *aux; int valor,resposta,a1,b1; char cadeia[10],*a[10],*b[10],*operador[1]; aux = p; if(p == (struct ptr*) NULL) printf("não há expressao."); else{ while(aux != (struct ptr*) NULL){ resposta = atoi(aux -> valor); if(resposta) empilha(num,aux -> valor); else{ if( ! ((strcmp(aux -> valor,"+")) || (strcmp(aux -> valor,"*"))) ){ empilha(op,aux -> valor); } else{ if(strcmp(aux -> valor,")")){ desempilha(num,a); desempilha(num,b); desempilha(op,operador); a1 = atoi(a); b1 = atoi(b); if(!(strcmp(*operador,"+"))) valor = b1 + a1; if(!(strcmp(*operador,"*"))) valor = b1 * a1; itoa(valor,cadeia,10); empilha(num,cadeia); } } } aux = aux -> prox; } desempilha(num,a); printf("Resposta = %s", a); } } void mostra(struct ptr *p1){ struct ptr *aux; aux = p1; if( p1 == (struct ptr*) NULL ) printf("não há expressao."); else while( aux != (struct ptr*) NULL ){ printf("%s ", aux -> valor); aux = aux -> prox; } printf("\n"); } main(){ cria_expressao(); mostra(p); // para mostrar que a expressao foi lida corretamente num = (struct ptr*) NULL; op = num; calcula(); getch(); }
  3. Segue o link para um livro cheio de exercícios e alguns com resoluções e tudo mais, esse livro me ajudou muito! Espero que ajude a mais alguém também. http://tiagodemelo.info/livros/logica/ Abraços
  4. O programa não tá dando certo com o gets, o que eu faço?! Na hora da chama ele chama pra entrar o nome e o telefone junto,tá com algum bugzinho,vou postar o código modificado: #include <stdio.h> #include <stdlib.h> //exit() struct ag{ char nome[100],ende[100],email[100]; int tel,cel,comer,id; }; struct ag agenda; //typedef struct ag Agenda; //para ficar melhor a compreensão //Agenda agenda; FILE *arq; int op; void menu(){ printf("Bem vindo a agenda eletronica! Aperte:\n 1 - Inserir um nome \n 2 - Listagem de todos os nomes \n 3 - Consulta de dados (Por nome) \n 4 - Remocao de um nome \n 5 - Quantidade de nomes inicializados com cada letra do alfabeto \n 0 - Para fechar o programa\nOpcao: "); scanf("%d",&op); while(op < 0 && op > 5){ printf("Erro! Opcao invalida,entre com um valor valido por favor:\n"); scanf("%d",&op); } } void dados(){ int op1,op2; printf("Entre com o nome:\n"); //scanf(" %[^\n]s",&agenda.nome); gets(agenda.nome); //Use isso senão vai ocorrer seus erros descritos no tópico printf("Por favor entre com o telefone:\n"); scanf(" %d",&agenda.tel); printf("Gostaria inserir mais dados? (0 - 1)\n"); scanf(" %d",&op1); //Um espaço antes auxilia o scanf a não pegar lixo em buffers if(op1){ printf("Gostaria de entrar com o Telefone Celular? (0 - 1)\n"); scanf(" %d",&op2); if(op2){ printf("Tel. Celular: "); scanf(" %d",&agenda.cel); } printf("Gostaria de entrar com o Telefone Comercial? (0 - 1)\n"); scanf(" %d",&op2); if(op2){ printf("Tel. Comercial: "); scanf(" %d",&agenda.comer); } printf("Gostaria de entrar com o Endereco? (0 - 1)\n"); scanf(" %d",&op2); if(op2){ printf("Endereco: "); gets(agenda.ende); } printf("Gostaria de entrar com o e-mail? (0 - 1)\n"); scanf(" %d",&op2); if(op2){ printf("E-mail: "); gets(agenda.email); } } } void escrevearquivo(){ arq = fopen("agenda.bin","ab"); // já inicia no final do arquivo if(arq == NULL){ printf("Erro ao abrir arquivo!\n"); exit(1); // termina o programa } if(fwrite(&agenda, sizeof(agenda), 1, arq) != 1){ // teste para ver se escreve os dados no arquivo printf("Erro ao escrever no arquivo!\n"); exit(2); } fclose(arq); } void imprimiarquivo(){ arq = fopen("agenda.bin","rb"); if(arq == NULL){ printf("Erro ao abrir arquivo!\n"); exit(1); } // enquanto for lido certo ou não seja o final do arquivo while(fread(&agenda, sizeof(agenda), 1, arq) == 1 && feof(arq)){ printf("Nome: %s \nTelefone: %d \nCelular: %d \nComercial: %d \nEndereco:%s \nEmail:%s \n\n",agenda.nome, agenda.tel, agenda.cel, agenda.comer, agenda.ende, agenda.email); fread(&agenda, sizeof(agenda), 1, arq); } fclose(arq); } main(){ int op3; if((arq = fopen("agenda.bin","a+")) == NULL ) // a+ para anexar informações,o wb+ estava apagando o conteúdo printf("Erro ao criar arquivo."); menu(); while(op){ if(op==1){ dados(); escrevearquivo(); system("cls"); menu(); } if(op==2){ imprimiarquivo(); printf("1 - Voltar ao menu\n0 - Fechar agenda\nO que deseja? "); scanf(" %d",&op3); if(op3){ system("cls"); menu(); } else op=0; } /*if(op==5){ arq = fopen("agenda.bin","rb+"); fread(&agenda, sizeof(agenda), 1, arq); if(agenda.nome) while(!feof(arq)){ printf("Nome: %s \nTelefone: %d \nCelular: %d \nComercial: %d \nEndereco:%s \nEmail:%s \n\n",agenda.nome, agenda.tel, agenda.cel, agenda.comer, agenda.ende, agenda.email); fread(&agenda, sizeof(agenda), 1, arq); } fclose(arq); */ } getch(); } obs.: to trabalhando na opção 5 ainda,por isso tá em comentário
  5. "Agora seu main() abre e não fecha "arquivos.bin" ai você quer abrir o mesmo arquivo em outra função? Isso vai causar perda de dados. se fosse você pensava um pouco na função menu(), transforme em main() e implemente mais alguma coisa para seu algoritmo funcionar. Ou use o retorna da função menu como int. " Perdão, não entendi o que você falou.. como assim abre e não fecha? Abrir o mesmo arquivo em outra função? Eu preciso colocar ele em ordem alfabética e conseguir deletar nomes dele,não sei como farei isso ao certo,mas por que causaria perda de dados? A função menu é só pra diminuir o tamanho do main(), ela é realmente só pra printar as opções,não entendi o problema dela?!
  6. Muito obrigado, Pedro e não precisa se desculpar não,que isso!! =D Eu que agradeço e muito,vou continuar tentando programar e pode deixar que qualquer dúvida de lógica eu pergunto sim! É pra colocar "r+b" nas duas funções?! #include <stdio.h> #include <stdlib.h> //exit() struct ag{ char nome[100]; char ende[100]; char email[100]; int tel; int cel; int comer; int id; }; typedef struct ag Agenda; //para ficar melhor a compreensão Agenda agenda; FILE *arq; int op; Por que tem essa segunda biblioteca a #include <stdlib.h>,ela é pra fazer funcionar o exit?! e por que tem exit(1) e depois exit(2)? Por que você colocou cada char e int em uma linha no struct ag, faz alguma diferença isso? O que é esse typedef ?! do que ser? Acho que seria um abuso isso,mas como meu professor não ensinou nada e eu gostaria muito de aprender e entender alguém poderia me explicar qual a função e o que realmente faz cada tag do fwrite e fread?! ( Tipo a a+,rb+,r+b ) as diferenças e tal,acho que se eu conseguisse entender isso conseguiria programar com mais facilidade, abraços! e muito obrigado por tudo rapaziada! Por que tem que usar o gets(agenda.nome);//Use isso senão vai ocorrer seus erros descritos no tópico ?! e não o scanf? "Um espaço antes auxilia o scanf a não pegar lixo em buffers" como assim lixo em buffers!? até hoje não entendi direito isso de buffer,você poderia me explicar? (to abusando da boa vontade já né?! perguntando tudo.. uhauhauhahu é que eu queria realmente entender ;/)
  7. Eu vou tentar usar essa ideia também, ainda nem consegui chegar na parte de ordenar ;/ A função para escrever no arquivo não está funcionando direito,tem hora que ela escreve,tem hora que não,não estou entendendo e a função de printar a mesma coisa,você poderia dar uma olhada por favor?! Tentei entender seu código,mas ele está meio complicado pra mim hahahah mas estou vendo o que consigo aproveitar dele ;] void escrevearquivo(){ //arq = fopen("agenda.bin","wb+"); fwrite(&agenda, sizeof(agenda), 1, arq); fflush(arq); //fclose(arq); } void imprimiarquivo(){ arq = fopen("agenda.bin","rb+"); fread(&agenda, sizeof(agenda), 1, arq); while(!feof(arq)){ printf("Nome: %s \nTelefone: %d \nCelular: %d \nComercial: %d \nEndereco:%s \nEmail:%s \n\n",agenda.nome, agenda.tel, agenda.cel, agenda.comer, agenda.ende, agenda.email); fread(&agenda, sizeof(agenda), 1, arq); } fclose(arq); } Eu coloquei o arq = fopen("agenda.bin","wb+"); e o fclose(arq); por que achei que eles estivessem abrindo e apagando o arquivo,mas posso estar errado,gostaria de sua ajuda enquanto a isso. E o fflush,seria para quando o usuário entrasse com um nome, e em seguida pedisse a listagem da Agenda não tivesse que fechar e abrir o programa,mas não tenho certeza se está funcionando. E o erro que não estou conseguindo entender de jeito nenhum é isso da função escrever não funcionar direito,tem hora que eu tento entrar com um contato e não dá certo,ai eu fecho e abro o programa , dai eu consigo escrever, sabe o que pode ser?! Ah e a partir de um certo ponto a função copia o número do tel,mas o nome não. Quando abro o arquivo .bin no notepad dá pra ver os nomes escritos, e tá lá o nome,mas na hora de imprimir não aparece ;/ Completamente sem sentido uhahuauh
  8. O problema é que meu professor quer que o arquivo esteja em .bin. ;/ E qual é a ideia para deletar um nome?! E muito obrigado pela dica da ordenação! =D
  9. Tinha funcionado agora não está mais funcionando =/ Você diz colocar "a+" na funcao escrevearquivo,certo?! O problema foi que a partir de um certo ponto de nomes na agenda,ela começou a bugar. Os nomes que eu inseria não iam direito,ficavam espaços vazios,só ia o número celular. E o imprimiarquivo não está indo até o final do arquivo,ai eu fui mexendo mexendo no programa e pronto,agora não está mais funcionando como antes =/
  10. Muito obrigado,funcionou certinho agora! =D Gostaria de saber como faço para colocar em ordem alfabética a agenda,após inserir outros nomes, uso o strcmp()?! Qual o método de comparação?! Abraços, e novamente muito obrigado.
  11. Bom,tenho que fazer um trabalho pra escola que é fazer uma Agenda Eletronica em C usando arquivo. Estou conseguindo fazer o código e tudo mais,porém estou com um erro na hora de escrever no arquivo. Meu professor não ensinou arquivo,nem as funções nem nada,só mandou a gente fazer o trabalho. O que tá acontecendo é que eu só consigo escrever 1 nome no arquivo e não vários,creio que o problema esteja na função escrevearquivo(),segue o código,sendo que estou na primeira opção ainda,as outras não comecei a programar,pois preciso fazer com que a funcao de certo. =] Desde já,muito obrigado. Preciso de ajuda o quanto antes,obrigado. Abraços Obs.: A formatação não está das melhores,mas isso é culpa do DevC++ ;p #include <stdio.h> struct ag{ char nome[100],ende[100],email[100]; int tel,cel,comer,id; }; struct ag agenda; FILE *arq; int op; void menu(){ printf("Bem vindo a agenda eletronica! Aperte:\n 1 - Inserir um nome \n 2 - Listagem de todos os nomes \n 3 - Consulta de dados (Por nome) \n 4 - Remocao de um nome \n 5 - Quantidade de nomes inicializados com cada letra do alfabeto \n 0 - Para fechar o programa\nOpcao: "); scanf("%d",&op); while(!((op==0)||(op==1)||(op==2)||(op==3)||(op==4)||(op==5))){ printf("Erro! Opcao invalida,entre com um valor valido por favor:\n"); scanf("%d",&op); } } void dados(){ int op1,op2; printf("Entre com o nome:\n"); scanf("%s",&agenda.nome); printf("Por favor entre com o telefone:\n"); scanf("%d",&agenda.tel); printf("Gostaria inserir mais dados? (0 - 1)\n"); scanf("%d",&op1); if(op1){ printf("Gostaria de entrar com o Telefone Celular? (0 - 1)\n"); scanf("%d",&op2); if(op2){ printf("Tel. Celular: "); scanf("%d",&agenda.cel); } printf("Gostaria de entrar com o Telefone Comercial? (0 - 1)\n"); scanf("%d",&op2); if(op2){ printf("Tel. Comercial: "); scanf("%d",&agenda.comer); } printf("Gostaria de entrar com o Endereco? (0 - 1)\n"); scanf("%d",&op2); if(op2){ printf("Endereco: "); scanf("%s",&agenda.ende); } printf("Gostaria de entrar com o e-mail? (0 - 1)\n"); scanf("%d",&op2); if(op2){ printf("E-mail: "); scanf("%s",&agenda.email); } } } void escrevearquivo(){ //arq = fopen("agenda.bin","wb+"); //fseek(arq, ftell(arq), SEEK_CUR); fwrite(&agenda, sizeof(agenda), 1, arq); //fflush(stdin); //fclose(arq); } void imprimiarquivo(){ arq = fopen("agenda.bin","rb+"); //while(fread(&agenda, sizeof(agenda), 1, arq)) fread(&agenda, sizeof(agenda), 1, arq); while(!feof(arq)){ printf("Nome: %s \nTelefone: %d \nCelular: %d \nComercial: %d \nEndereco:%s \nEmail:%s \n",agenda.nome, agenda.tel, agenda.cel, agenda.comer, agenda.ende, agenda.email); fread(&agenda, sizeof(agenda), 1, arq); } fclose(arq); } main(){ if((arq = fopen("agenda.bin","wb+")) == NULL ) printf("Erro ao criar arquivo."); menu(); while(op){ if(op==1){ //if(feof(arq)!=0){' //printf("\n Primeiro nome!!"); dados(); escrevearquivo(); //imprimiarquivo(); system("cls"); menu(); } } getch(); }
  12. Thiago Mendes

    Matriz C++

    Muito vaga a sua pergunta,amigo...usar em engenharia com qual finalidade?! Abraços
  13. Olá, fui resolver um exercício relativamente simples que pedia a criação de um vetor de 5 posições, e depois mostrar o menor valor nele e sua posição..até ai tudo bem,mas quando eu coloco o menor valor na posição zero o no último printf aparece um número lixo, ou aleatório não sei dizer,alguém sabe por que isso está acontecendo?! #define TAM 5 main(){ int x[TAM],i,me,p; for(i=0;i<TAM;i++){ printf("x[%d] = ",i); scanf("%d",&x[i]); } for(i=0;i<TAM;i++){ if(i==0) me=x[i]; else if(me>x[i]){ me=x[i]; p=i; } } printf("O menor: x[%d] = %d",p,me); getch(); } Obrigado,desde já! =]
  14. Muito obrigado! =D Como eu faço para marcar como resolvido?!
  15. erro no scanf main(){ int x[2],y[2],w[2],i; for(i=0;i<2;i++){ printf("y[%d] = ",i); scanf("%d",&y[i]);//declare o indice } for(i=0;i<2;i++){ printf("x[%d] = ",i); scanf("%d",&x[i]);//declare o indice } for(i=0;i<2;i++){ w[i]=x[i]*y[i]; printf("w[%d] = %d\n",i,w[i]); } getch(); } Nossa como fui deixar um detalhe tão bobo passar assim ;P Muito obrigado! Resolveu, eu tenho que fazer alguma coisa tipo fechar o post e tal ou tá tudo certo?1 Sou muito noob que isso uhauha
  16. Olá, é meu primeiro post no fórum então peço desculpas por qualquer eventual erro... =] Estou tentando resolver uma questão relativamente simples vou colocar o enunciado: " Escreva um algoritmo que leia dois vetores de 10 posições e faça a multiplicação dos elementos de mesmo índice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante. " Meu código está dando um erro muito estranho no final, apesar de que , do meu ponto de vista o código está certo,segue o código abaixo: main(){ int x[2],y[2],w[2],i; for(i=0;i<2;i++){ printf("y[%d] = ",i); scanf("%d",&y); } for(i=0;i<2;i++){ printf("x[%d] = ",i); scanf("%d",&x); } for(i=0;i<2;i++){ w[i]=x[i]*y[i]; printf("w[%d] = %d\n",i,w[i]); } getch(); } Obrigado,desde já! =] ... obs.: como faço para endentar o meu código?!
×
×
  • Criar Novo...