BRUNO_ALEX Postado Abril 24, 2011 Denunciar Share Postado Abril 24, 2011 Boa tarde pessoal estou com um problema. Tenho o seguinte exercício e o professor me pede para modifica-lo para usar ponteiros na leitura e apresentaçãodos dados dos vetores só que não tenho nem idéia de resolver isso. Segue o exercício:#include <stdio.h> struct Carro { char marca[15]; int ano; char cor[10]; float preço; }; struct Carro carro[2]; void main() { void preencheVetor(); void pesquisarPorPreco(); void pesquisarPorMarca(); void pesquisaAvancada(); int operacao; do { system ("CLS"); printf ("Entre com a opcao:\n"); printf ("1- Preencher lista de Carros\n"); printf ("2- Pesquisar por preço\n"); printf ("3- Pesquisar por marca\n"); printf ("4- Pesquisa avancada\n"); printf ("0- Sair\n"); scanf ("%d", &operacao); switch (operacao){ case 1: preencheVetor(); break; case 2: pesquisarPorPreco(); break; case 3: pesquisarPorMarca(); break; case 4: pesquisaAvancada(); break; } if ((operacao != 1) && (operacao != 2) && (operacao != 3) && (operacao != 4) && (operacao != 0)) { printf ("\nOperacao invalida!!!"); system ("CLS"); } } while (operacao != 0); } void preencheVetor(){ system ("CLS"); int i; for (i = 0; i < 2; i++) { printf ("\nMarca: "); scanf ("%s", &carro[i].marca); printf ("Ano: "); scanf("%d", &carro[i].ano); printf ("Cor: "); scanf ("%s", &carro[i].cor); printf ("preço: "); scanf ("%f", &carro[i].preço); } system ("CLS"); } //pesquisarPorPreco void pesquisarPorPreco() { system ("CLS"); int i; short flag = 0; float preço; printf ("Digite o preço do carro: "); scanf ("%f", &preço); for (i = 0; i < 2; i++) { if (carro[i].preço == preço) { system ("CLS"); printf ("preço escolhido: %.2f\n\n", preço); flag = 1; printf ("Marca: %s\n", carro[i].marca); printf ("Ano: %d\n", carro[i].ano); printf ("Cor: %s\n", carro[i].cor); } } if (flag == 0) printf ("não existem carros com esse valor!!!\n"); system ("PAUSE"); } //pesquisarPorMarca void pesquisarPorMarca(){ system ("CLS"); int i; char marca[15]; short int flag = 0; printf ("Digite a marca: "); fflush (stdin); gets (marca); for (i = 0; i < 2; i++) { if (strcmp(carro[i].marca, marca) == 0){ system ("CLS"); flag = 1; printf ("Marca escolhida: %s\n\n", marca); printf ("Ano: %d\n", carro[i].ano); printf ("Cor: %s\n", carro[i].cor); printf ("preço: %.2f\n", carro[i].preço); } } if (flag == 0) printf ("não existem carros com essa marca\n"); system ("PAUSE"); } //pesquisaAvancada void pesquisaAvancada(){ system ("CLS"); int i; short int flag = 0; char marca[15]; int ano; char cor[10]; printf ("Marca: "); fflush (stdin); gets (marca); printf ("Ano: "); scanf ("%d", &ano); printf ("Cor: "); fflush (stdin); gets (cor); for (i = 0; i < 2; i++){ if (strcmp(carro[i].marca, marca) == 0 && carro[i].ano == ano && strcmp(carro[i].cor, cor) == 0) flag = 1; } if (flag == 1) { system ("CLS"); printf ("Existe carro(s) com essa(s) caracteristica(s)\n"); for (i = 0; i < 3; i++) { if (strcmp(carro[i].marca, marca) == 0 && carro[i].ano == ano && strcmp(carro[i].cor, cor) == 0) { printf ("preço: %.2f\n", carro[i].preço); } } } else { printf ("não existe nenhum carro com estas caracteristicas\n"); } system ("PAUSE"); }Se alguém puder me dar uma força agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Myho Postado Abril 24, 2011 Denunciar Share Postado Abril 24, 2011 Vou ser sincero que não entendi exatamente a questão, mas se for só pra ter ponteiros no programa, em vez de declarar assim:void preencheVetor(); Troque por: void preencheVetor(Carro *car); e no corpo da função: void preencheVetor(Carro *car){ system ("CLS"); int i; for (i = 0; i < 2; i++) { printf ("\nMarca: "); scanf ("%s", &car[i].marca); printf ("Ano: "); scanf("%d", &car[i].ano); printf ("Cor: "); scanf ("%s", &car[i].cor); printf ("preço: "); scanf ("%f", &car[i].preço); } system ("CLS"); }E então você preencheu o vetor de carros usando um ponteiro para ele ( car )... é só seguir essa lógica para os outros e não se esqueça de quando for chamar a função tem que chamar com os parâmetros agora.Carros carros[2] não precisa mais ser global se todas as funções que manipulam suas variáveis receberem como parâmetro um ponteiro para ele. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BRUNO_ALEX Postado Abril 24, 2011 Autor Denunciar Share Postado Abril 24, 2011 (editado) Entendi o que quiz dizer e creio que a resposta seja essa, mas como ficaria o protótipo no método main() tentei assim:void preencheVetor(Carro *)mas dá erro: error: syntax error before '*' token. Editado Abril 24, 2011 por BRUNO_ALEX Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 BRUNO_ALEX Postado Abril 24, 2011 Autor Denunciar Share Postado Abril 24, 2011 (editado) Já descobri o erro: esqueci do struct.void preencheVetor(struct Carro *); Editado Abril 24, 2011 por BRUNO_ALEX Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Myho Postado Abril 24, 2011 Denunciar Share Postado Abril 24, 2011 (editado) Verdade, eu também esqueci em minha resposta, mesmo sem struct aqui funcionou pois meu compilador compilou em C++, onde não é preciso colocar o struct na frente nesse caso. Em C é obrigatório. Editado Abril 24, 2011 por Myho Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
BRUNO_ALEX
Boa tarde pessoal estou com um problema.
Tenho o seguinte exercício e o professor me pede para modifica-lo para usar ponteiros na leitura e apresentação
dos dados dos vetores só que não tenho nem idéia de resolver isso. Segue o exercício:
Se alguém puder me dar uma força agradeço.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.