Ir ao conteúdo
  • Cadastre-se

MartiniM

Membro Pleno
  • Posts

    21
  • Cadastrado em

  • Última visita

Reputação

6
  1. MartiniM

    C++ C++ class imprimindo lixo

    @Luís Roberto C. da SilvaEra isso mesmo, muito obrigado!
  2. MartiniM

    C++ C++ class imprimindo lixo

    @Luís Roberto C. da Silva É lixo sim (lixo = resultado inesperado) Se base = 3 e altura = 4, então Área = (3*4)/2 = 6 Se fosse em notação científica, seria 6,0e0
  3. #include <iostream> #include <math.h> using namespace std; class Triangulo{ private: int base; int altura; float area; float hip; public: void setBase (int x){base = x;}; void setAltura (int y){altura = y;}; void calculos() {area = (base*altura)/2; hip = sqrt(base*base + altura*altura); }; void verValores() {cout << this->base << endl; cout << this->altura<< endl;}; void verResultado(){cout << this->area<<endl; cout << this->hip << endl;}; Triangulo(int h, int g){setBase(h); setAltura(g);}; ~Triangulo(){}; }; int main() { int base; int altura; cout << "digite a base" <<endl; cin >> base; cout << "digite a altura" << endl; cin >> altura; Triangulo TRI(base, altura); TRI.verValores(); TRI.verResultado(); return 0; } Um algoritmo pra calcular a area e a hipotenusa (hip) de um triângulo. Os valores da base e altura chegam corretamente à classe, como se pode observar no verValores(). Porém quando tento calcular a area do triangulo ou a hipotenusa, o programa imprime lixo. Quando coloca base = 3 e altura = 4, o programa imprime area = 4.60005e+033 e hip = 5.87744e-025
  4. Quanto tento cadastrar um segundo cliente, o programa trava. Além disso, o algoritmo imprime lixo onde deveria ser o "nome". #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> struct cliente{ char nome[256]; char ano[256]; char cpf[256]; }; struct cliente *p = NULL; void cadastrar (int *i) { system("cls"); p = realloc(p, sizeof(struct cliente)* ((*i)+1)); puts("\nDigite o nome do cliente: "); scanf("%s",&p[*i].nome); printf("\nDigite o ano de nascimento de %s: ", p[*i].nome); scanf("%s",&p[*i].ano); printf("\nDigite o cpf de %s: ", p[*i].nome); scanf("%s",&p[*i].cpf); puts("\nCliente cadastrado: "); ++(*i); Sleep(700); } void registro(int *i) { system("cls"); puts("\nLista de clientes: "); int j = 0; while (j < *i) { printf("\n%s nasceu em %s e possui cpf %s", p[j].nome, p[j].ano, p[j].cpf); ++j; } setbuf(stdin, NULL); puts("\nDigite qualquer tecla para continuar: "); getchar(); setbuf(stdin, NULL); } int main(){ int choice; int i = 0; p = malloc(sizeof(struct cliente)); while(choice != 0) { system("cls"); puts("\n\nDigite 1 para cadastrar novo cliente: "); puts("\n\nDigite 2 para remover cliente: "); puts("\n\nDigite 3 para imprimir registro: "); puts("\n\nDigite 0 para sair: "); scanf("\n%i", &choice); switch (choice) { case 1: cadastrar(&i); break; case 2: //remover(); break; case 3: registro(&i); break; default: if (choice != 0) { system("cls"); puts("\nNumero invalido"); Sleep(1000); } if (choice == 0) { puts("\nSaindo..."); Sleep(700); system("cls"); } } free(p); } return 0; } Edit: fiz if (p == NULL) {puts("\nErro de alocação de memoria: );} logo após o realloc e descobri que de fato tem um erro, mas não achei o porquê.
  5. #include <stdio.h> #include <stdlib.h> struct maquina{ int codigo; char descricao[50]; float valor; }; struct maquina *Buscamaiscara (struct maquina p, int *k) { int i; struct maquina *maiscara = &p[0]; for (i = 1; i < *k; ++i) { if (p[i].valor > (*maiscara).valor) { maiscara = &p[i]; } } return maiscara; }; int main() { puts("\nDigite a quantidade de maquinas: "); int qtd, i; scanf("%i", &qtd); struct maquina p[qtd]; for (i = 0; i < qtd; ++i) { puts("\nDigite o codigo do produto: "); scanf("%i", &p[i].codigo); puts("\Digite a descricao do produto: "); scanf("%s", &p[i].descricao); puts("\nDigite o valor do produto: "); scanf("%f", &p[i].valor); } struct maquina *maiscara = Buscamaiscara(p, &i); printf("\n %s custa %f e possui codigo %i", maiscara->descricao, maiscara->valor, maiscara->codigo); return 0; } O programa aponta 4 erros: o que eu citei acima e mais um monte de "subscribed value is neither array nor pointer nor vector (óbvio que não, é uma estrutura)
  6. Escreva um programa que armazene em um vetor uma sequência de números, sendo que a leitura é finalizada no momento em que for digitado 0, sem desperdiçar memória. Fiz um algoritmo usando malloc, mas para usá-lo preciso antes saber quantos elementos serão digitados. Então coloquei isso num ciclo for: #include <stdio.h> #include <stdlib.h> int main() { int j; float *vetor; int i; for (i = 0; i < 999; ++i) { printf("Digite o valor %i:\n ", i+1); vetor = malloc((i+1)*sizeof(float)); scanf("%f", &vetor[i]); if (vetor[i] == 0) { i = i + 1000; } } return 0; No entanto, para minha grande surpresa, a linguagem C não adiciona mais espaço ao usar "malloc(i+1)*sizeof(float)" a cada "i", e sim redefine o vetor de forma que os valores se perdem. Foi isso que pensei até agora, alguém tem uma ideia de como fazer esse algoritmo? Edit: Burrice minha, poderia ter usado while(vetor! = 0) no lugar desse for e IF, mas isso não resolve o problema principal.
  7. #include <stdio.h> #include <stdlib.h> int main() { int *vetor; int n,i; puts("Digite o n: "); scanf("%i",&n); for (i = 0; i < n; ++i) { printf("Digite o valor %i: \n", i+1); vetor = malloc((i+1)*sizeof(int)); scanf("%i", &vetor[i]); } for (i = 0; i < n; ++i) { printf(" %i ", vetor[i]); } return 0; } Estou tentando criar um algoritmo para alocar espaço e um valor num vetor a cada "i" do ciclo, mas quando executo vem lixo em todos os valores.
  8. Consegui resolver o problema, fazendo: contador = 10; for (i;contador; --i) { printf("\n%i", vetor); ++contador; }
  9. O tamanho veio de outra função, por isso usei ponteiros.
  10. void escreve (int *vetor, int *tamanho) { int contador = 0; int i = *tamanho; i = i - 1; for (i; contador == 10; --i) { printf("\n%i", vetor[i]); ++contador; } } Estou tentando fazer uma função que imprima os últimos dez valores de um vetor. A variável "i" recebe um número de "tamanho" e subtrai um. Depois, pensei em criar um for de i até que o contador seja igual a 10, decrescendo de 1 em 1 o i e, ao mesmo tempo, adicionando um ao contador. Porém não está funcionando, pois a função não imprime nada.
  11. #include <stdio.h> #include <stdlib.h> int main() { int vetor[10]; leitura(vetor); escrever(vetor); return 0; } void leitura (int *vetor) { int i = 0; while (i<10) { printf("\nDigite o valor %i: ",i+1); scanf("%i",&vetor); ++i; } } void escrever (int *vetor) { int i = 0; while (i<10) { printf("\n %i", vetor[i]); ++i; } } Quando executo o código acima, os valores são nadar a ver com o que eu digitei.
  12. Então o erro deve ser em outra parte do código, para minha tristeza. Obrigado pela resposta!
  13. Estou criando um código para tirar qualquer caractere estranho (números, @'s, &'s e etc) de uma string, utilizando a função: void EliminaEstranhos (unsigned char *palavra) { int i = 0, j = 0; unsigned char aux[200]; while (palavra[i] != '\0') { if ((palavra[i] > 40 && palavra[i] < 91) || (palavra[i] > 96 && palavra[i] < 123) || palavra[i] == ' ') { aux[j] = palavra[i]; ++j; } ++i; } i = 0; while (i<=j) { palavra[i] = aux[i]; ++i; } } A ideia é jogar tudo que é letra minúscula, maiúscula ou espaços para um vetor auxiliar e, depois, pegar de volta os caracteres, mas não está funcionando. Quando digito "CaraDeS2anto" (sem aspas), o algoritmo subistitui por CaraDeSRanto, troca o 2 por R.

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...