-
Posts
1.752 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que vangodp postou
-
ok vamos a ver esses problemas... São mais de um. quando declaramos char nome[8][3] você esta declarando 8 strings de um tamanho de 3, e você esta preenchendo com 3 strings de um tamanho diferente cada um. Ou seja você reserva [][][] [][][] [][][] [][][] [][][] [][][] [][][] [][][] ...e você quer por nesse espaço [m][a][r][a][\0] [j][a][\0] [c][a][r][l][o][\0] Encontrou o problema? O problema é que você tem que declarar char nome[3][8] e não char nome[8][3]. Sendo assim... o problema é que você não dispõe de suficiente espaço para suas variáveis, o espaço é o mesmo, porém o IDE ou compilador ta avisando de que isso ta mal feito, no fundo a memoria é lineal, tudo isso vai em serie e não em paralelo já que a memoria não é "bidimensional" e sim mas bem como uma avenida muito grande com muitas casas alinhadas. Quando reservamos isso: [][][] [][][] [][][] [][][] [][][] [][][] [][][] [][][] .. no fundo a memoria ram ta assim: [][][][][][][][][][][][][][][][][][][][][][][][] Ou seja que cuando você recheia elas com {"maria" , "joao", "carlos"}, ela fica assim: [m][a][r][i][a][\0][ ][ ][J][u][a][\0][ ][ ][ ][ ][c][a][r][l][o][s][\0][ ] Si realizaramos uma comparaçao seria: [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][m][a][r][i][a][\0][ ][ ][J][u][a][\0][ ][ ][ ][ ][c][a][r][l][o][s][\0][ ] A memoria estaria como no exemplo anterior, não sei se seus conhecimentos são avançados suficiente para entender esse conceito, porém assim funciona a historia essa. kkk Esse código daqui(ver mais abaixo) demostra o que eu estou dizendo, ele imprime onde esta cada letra de {"maria" , "joao", "carlos"}, si os números sao consecutivos tipo 1,2,3,4,5.... porém não sei exatamente onde eles vão cair assim que pode variar, más sei que si o primeiro for por exemplo 22444, o seguinte será 22445, e o 3º será 22446..... assim até completar 3*8 chars que foi o que reservamos. Podem haver lixo na memoria e aparecer letrar raras, isso é normal, já que não a estamos utilizando por completo. Si for muito complicado isso tudo não ligue muito, isso se entende melhor quando chega os ponteiros. Aqui o exemplo: #include <iostream>#include <cstring>using namespace std;struct tipo_dumbo { tipo_dumbo(); char nome[3][8]; char senha[3][8];};tipo_dumbo::tipo_dumbo(){ strcpy(nome[0], "maria" ); strcpy(nome[1], "joao" ); strcpy(nome[2], "carlos" ); strcpy(senha[0], "r9g269" ); strcpy(senha[1], "fhuh" ); strcpy(senha[2], "h8732" ); }int main() { tipo_dumbo login; //vamos comprovar que na memoria esteja todas as casinhas consecutivas... for(int i = 0; i < 3; i++){ for( int j = 0; j < 8; j++ ){ cout << "Letra '" << login.nome[i][j] << "' =" << int (&login.nome[i][j]) << endl; //int(&login.nome[i]) vai imprimir a direçao de memoria de cada casinha, ou seja que nos vai dizer onde esta cada letra.=) } } cin.ignore(); return 0;} Ainda tem mais... Essa forma de inicializar ( char nome[8][3]={"maria","joao","carlos"}; ) as variáveis só é compatível com compiladores que suportem o estândar C++11, e para isso deve estar ativado com o comando -std=c++11 nas opções do seu IDE/Compilador. Exemplo: #include <iostream>using namespace std;struct tipo_dumbo { char nome[3][8] = {"maria" , "joao", "carlos"}; char senha[3][8] ={"r9g269", "fhuh", "h8732" };};int main() { tipo_dumbo login; cout << login.nome[0] << endl; cout << login.nome[1] << endl; cout << login.nome[2] << endl << endl; cout << login.senha[0] << endl; cout << login.senha[1] << endl; cout << login.senha[2] << endl; cin.ignore(); return 0;} Si não quiser usar o estandarte C++11 pode fazer ele assim: #include <iostream>using namespace std;struct tipo_dumbo { char nome[3][8]; char senha[3][8];};int main() { tipo_dumbo login = { {"maria" , "joao", "carlos"}, {"r9g269", "fhuh", "h8732" } }; cout << login.nome[0] << endl; cout << login.nome[1] << endl; cout << login.nome[2] << endl << endl; cout << login.senha[0] << endl; cout << login.senha[1] << endl; cout << login.senha[2] << endl; cin.ignore(); return 0;} Ou ainda pode ser feito com construtores já que em C++ as estruturas são quase identicas as classes, a única diferença é que as classes tem seus membros privados por default, e as estruturas tem seus membros públicos por default, porém realmente são a mesma coisa, pode-se usar construtores, destrutores, construtores de cópia etc etc, tanto en estruturas como em classes(Unicamente em C++). Um exemplo: #include <iostream>#include <cstring>using namespace std;struct tipo_dumbo { tipo_dumbo(); char nome[3][8]; char senha[3][8];};tipo_dumbo::tipo_dumbo(){ strcpy(nome[0], "maria" ); strcpy(nome[1], "joao" ); strcpy(nome[2], "carlos" ); strcpy(senha[0], "r9g269" ); strcpy(senha[1], "fhuh" ); strcpy(senha[2], "h8732" ); }int main() { tipo_dumbo login; cout << login.nome[0] << endl; cout << login.nome[1] << endl; cout << login.nome[2] << endl << endl; cout << login.senha[0] << endl; cout << login.senha[1] << endl; cout << login.senha[2] << endl; cin.ignore(); return 0;} Pode haver muitas mais formas de iniciar isso, eu só coloquei as mais tipicamente corretas e fáceis de reproduzir. E você também pode trabalhar com a classe string tipica de C++. Acho que com isso você já pode solucionar seu problema.
-
#include <stdio.h>#include <stdlib.h>#include <math.h>#define NUMICA 18#define AS 66#define SUS 13.8#define MGM 655struct Dados { int idade; float altura; float cq; float peso; float PAS; float PAD; float HDL; float Total; float FRQ; float OBJ; float FRQRES; float fres; char sexo;};typedef struct Dados Dados;void IMC (Dados*);void ICA (Dados*);void Pressao_Art (Dados*);void Taxa_Meta (Dados*);void Taxa_Coles (Dados*);void Freq_Card (Dados*);void limparTela ();int menu ();int main () { int sair = 0; struct Dados dados; while ( !sair ) { switch ( menu() ) { case 1: limparTela(); IMC (&dados); break; case 2: limparTela(); ICA (&dados); break; case 3: limparTela(); Pressao_Art (&dados); break; case 4: limparTela(); Taxa_Meta (&dados); break; case 5: limparTela(); Taxa_Coles (&dados); break; case 6: limparTela(); Freq_Card (&dados); break; case 0: limparTela(); sair = 1; break; default: limparTela(); printf("Incorreto, volte a escolher uma opção"); break; } printf("\n\n"); } printf("Obrigado por usar meu soft =)"); getchar(); return 0;}//IMCvoid IMC ( Dados *dados ) { printf ( "Digite a altura:" ); scanf ( "%f%*c", &dados->altura ); printf ( "Digite o peso:" ); scanf ( "%f%*c", &dados->peso ); printf ( "O valor de IMC e de %f", dados->peso * ( pow ( dados->altura, 2 ) ));}//ICAvoid ICA (Dados* dados){ printf ( "Digite circunferencia do quadril" ); scanf ( "%f%*c", &dados->cq ); printf ( "Digite altura" ); scanf ( "%f%*c", &dados->altura ); printf ( "O valor de ICA e de %f", (dados->cq)/(pow(dados->altura, 1/2))-(NUMICA));}//Pressao_Art void Pressao_Art ( Dados * dados ) { printf ( "Digite a pressao arterial sistolica " ); scanf ( "%f%*c", &dados->PAS ); printf ( "Digite a pressao diastolica " ); scanf ( "%f%*c", &dados->PAD ); printf ( "O da valor da pressao arterial e de %f", dados->PAS+(dados->PAD*2)/3 );}//Taxa_Metavoid Taxa_Meta ( Dados *dados ) { printf ( "Digite o sexo do individuo- m/f :" ); scanf ( "%c%*c", &dados->sexo ); printf ( "Digite a altura" ); scanf ( "%f%*c", &dados->altura ); printf ( "Digite o peso" ); scanf ( "%f%*c", &dados->peso ); printf ( "Digite a idade" ); scanf ( "%d%*c", &dados->idade ); if ( dados->sexo == 'm' ) { printf ( "O valor da taxa de metabolismo e de %f ", (AS*(SUS+dados->peso))+(5*dados->altura)-(6.8*dados->idade) ); } else if ( dados->sexo == 'f' ) { printf ( "O valor da taxa de metabolismo e de %f ", MGM+(9.6*dados->peso)+(dados->altura)-(4.7*dados->idade) ); } else { printf ( "imposible! Nao existe esse tipo de genero.\n\n" ); }}void Taxa_Coles ( Dados *dados ) { printf ( "Digite a taxa de colesterol HDL" ); scanf ( "%f%*c", &dados->HDL ); printf ( "Digite a taxa de colesterol Total " ); scanf ( "%f%*c", &dados->Total ); printf ( "O valor da taxa de colesterol e de %f ", dados->Total / dados->HDL);}void Freq_Card ( Dados *dados ) { printf ( "Digite a frequencia de repouso " ); scanf ( "%f%*c", &dados->FRQ ); printf ( "Digite a percentagem de objetivo" ); scanf ( "%f%*c", &dados->OBJ ); printf ( "Digite a frequencia de reserva" ); scanf ( "%f%*c", &dados->FRQRES ); printf ( "O valor do objetivo muscular e de %f \n", dados->OBJ ); printf ( "O valor da frequencia cardiaca e de %f", (dados->OBJ*dados->FRQRES)+dados->FRQ );}int menu(){ int op; printf ( "\n1 - Taxa Imc " ); printf ( "\n2 - Taxa Ica" ); printf ( "\n3 - Pressao arterial media" ); printf ( "\n4 - Taxa de metabolismo basal" ); printf ( "\n5 - Taxa de colesterol" ); printf ( "\n6 - Frequencia cardiaca" ); printf ( "\n0 - Sair" ); printf ( "\n\n>>Opcao?: "); scanf("%d%*c", &op); return op;}void limparTela(){ system("cls");} Espero que te ajude para futuros programas. Não esta provado 100%, mesmo porque eu não sou medico e não sei que valores por em esses campos para saber si o programa esta respondendo de forma adequada, prove ele antes de entregar
-
Minhas matemáticas vão bem enferrujadas, porém si você explicar em que parte do seu código você acha que esta o erro posso dar uma olhada e tentar achar o erro. Si não teríamos que averiguar a traves do depurador linha a linha para ver o que não esta saindo bem. É pouco porém é o que eu posso oferecer =(
-
Não da para fazer melhor com o que você me deu: #include <stdio.h>#include <stdlib.h>#include <math.h>#define numica 18#define As 66#define Sus 13.8#define Mgm 655void MenuOpcoes();float IMC ( float peso, float altura );float ICA ( float cq, float altura );float Pressao_Art ( float PAS, float PAD );float Taxa_Meta ( char sexo, int idade, float altura, float peso );float Taxa_Coles ( float Total, float HDL );float Freq_Card ( float FRQ, float FRQMAX, float OBJ, float FRQRES );int main() { int op, idade; float altura, cq, peso, PAS, PAD, HDL, Total, FRQ, FRQMAX, OBJ, FRQRES, fres; char sexo; op = 0; while ( op != 6 ) { MenuOpcoes(); scanf ( "%d%*c", &op ); if ( op == 1 ) { printf ( "Digite a altura:" ); scanf ( "%f%*c", &altura ); printf ( "Digite o peso:" ); scanf ( "%f%*c", &peso ); } else if ( op == 2 ) { printf ( "Digite circunferencia do quadril" ); scanf ( "%f%*c", &cq ); printf ( "Digite altura" ); scanf ( "%f%*c", &altura ); } else if ( op == 3 ) { printf ( "Digite a pressao arterial sistolica " ); scanf ( "%f%*c", &PAS ); printf ( "Digite a pressao diastolica " ); scanf ( "%f%*c", &PAD ); } else if ( op == 4 ) { printf ( "Digite o sexo do individuo- masc/fem :" ); scanf ( "%c%*c", &sexo ); printf ( "Digite a altura" ); scanf ( "%f%*c", &altura ); printf ( "Digite o peso" ); scanf ( "%f%*c", &peso ); printf ( "Digite a idade" ); scanf ( "%d%*c", &idade ); } else if ( op == 5 ) { printf ( "Digite a taxa de colesterol HDL" ); scanf ( "%f%*c", &HDL ); printf ( "Digite a taxa de colesterol Total " ); scanf ( "%f%*c", &Total ); } else if ( op == 6 ) { printf ( "Digite a frequencia de repouso " ); scanf ( "%f%*c", &FRQ ); printf ( "Digite o frequencia de repouso max " ); scanf ( "%f%*c", &FRQMAX ); printf ( "Digite a percentagem de objetivo" ); scanf ( "%f%*c", &OBJ ); printf ( "Digite a frequencia de reserva" ); scanf ( "%f%*c", &FRQRES ); } else { printf ( "Opcao invalida " ); } } printf ( "O valor de IMC é de %f", IMC(peso, altura) ); printf ( "O valor de ICA é de %f", ICA(cq, altura) ); printf ( "O da valor da pressao arterial é de %f", Pressao_Art(PAS, PAD) ); printf ( "O valor da taxa de metabolismo é de %f ", Taxa_Meta(sexo,idade,altura,peso) ); printf ( "O valor da taxa de colesterol é de %f ", Taxa_Coles( Total,HDL) ); printf ( "O valor do objetivo muscular é de %f ", OBJ ); printf ( "O valor da frequencia cardiaca é de %f", Freq_Card(FRQ,FRQMAX,OBJ, FRQRES) ); return 0;}void MenuOpcoes() { printf ( "\n0 - Sair " ); printf ( "\n1 - Taxa Imc " ); printf ( "\n2 - Taxa Ica" ); printf ( "\n3 - Pressao arterial media" ); printf ( "\n4 - Taxa de metabolismo basal" ); printf ( "\n5 - Taxa de colesterol" ); printf ( "\n6 - Frequencia cardiaca" );}float IMC ( float peso, float altura ) { return peso * ( pow ( altura, 2 ) );}float ICA ( float cq, float altura ) { return ( cq ) / ( pow ( altura, 1 / 2 ) ) - ( numica );}float Pressao_Art ( float PAS, float PAD ) { return PAS + ( PAD * 2 ) / 3;}float Taxa_Meta ( char sexo, int idade, float altura, float peso ) { if ( sexo == 'm' ) { return ( As * ( Sus + peso ) ) + ( 5 * altura ) - ( 6.8 * idade ); } else if ( sexo == 'f' ) { return Mgm + ( 9.6 * peso ) + ( altura ) - ( 4.7 * idade ); }else{ printf("imposible!"); exit(1); }}float Taxa_Coles ( float Total, float HDL ) { return Total / HDL;}float Freq_Card ( float FRQ, float FRQMAX, float OBJ, float FRQRES ) { // Fres= FRQ -FRQMAX; return ( OBJ * FRQRES ) + FRQ;} Check o funcionamento e si algo não estiver bem explique detalhadamente o problema e a possível solução que você acha que pode ser aplicada. Sorte.
-
seu programa ta muito confuso... algumas funções tem nomes pouco claros. 'tambem'??? esse nome que é. Explique que tem que fazer cada função, onde serão chamadas, arrume pelo menos o nome correto aos parâmetros e assim já poderei te ajudar, é que nem eu entendo o que põe aí?
-
Anne esta não é a forma padrão de reservar memoria: char *nome. Isso é uma cadeia literal de dados, e o espaço para isso é reservado em tempo de compilação, o sistema vai alojar ele em um lugar pouco otimizado, não devemos alterar isso. Para reservar memoria de forma correta devemos especificar o tamanho dela, pois essa memoria será designada em tempo de execução, ou seja quando nosso programa rodar ele vai pedir uma x quantidade de memoria ao sistema operativo. Então sendo assim sua estrutura deveria ser: struct pessoa { char nome[100]; char email[100]; int ID;}; De igual modo não entendo por que você esta declarando uma matriz de estruturas ja que com um simples array o problema ficaria resolvido, ser cadastro[2] ou ser cadastro[4]; E ainda tem outro erro muito grave: for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 2; i++ ) { A ver si adivinhas?XD Em nenhum momento você incrementa j, porém a i você incrementa 2 vezes. Não seria??? for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 2; j++ ) { Tem que ser precisamente uma matriz? Ou pode ser um array de vetores? De todas formas te deixo aqui ele mais ou menos arrumado: #include <stdio.h>#include <stdlib.h>struct pessoa { char nome[100]; char email[100]; int ID;};typedef struct pessoa ser;int main() { ser cadastro[2][2]; int i, j; for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 2; j++ ) { printf ( "Nome: [%d][%d]", i, j ); scanf("%99[^\n]%*c", cadastro[i][j].nome ); printf ( "email: [%d][%d]", i, j ); scanf("%99[^\n]%*c", cadastro[i][j].email ); printf ( "ID: [%d][%d]", i, j ); scanf ( "%d%*c", &cadastro[i][j].ID ); printf ( "\n" ); } printf ( "\n" ); } printf ( "\n" ); for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 2; j++ ) { printf ( "Nome: %s ", cadastro[i][j].nome ); printf ( "email: %s ", cadastro[i][j].email ); printf ( "ID: %i\n", cadastro[i][j].ID ); } printf ( "\n\n"); }}
-
Faça um segundo arquivo a parte para guardar esse numero, e ao iniciar o programa leia ele. Ou si você achar conveniente grave ele no mesmo arquivo na primeira linha, acho más complicado assim más si você preferir.
-
Boa pergunta... É como misturar água e óleo. Nada a ver um com outro.
-
Leitura de arquivo em C (desafio Project Euler)
vangodp respondeu ao tópico de Jordao Natal em C/C#/C++
Bota tudo esses números ai num arquivo chamado arquivo.txt e rola esse código: #include <stdio.h>#include <stdlib.h>int main (){ FILE* fichero; fichero = fopen("arquivo.txt", "r"); int contador = 0; int *array; int i=0; if ( fichero == 0 ){ perror("Error: "); return 1; } for( ; fscanf(fichero,"%*d,") != EOF; contador++ );//contador vai incrementar con cada numero que tiver no arquivo, assim saberemos quantos numeros tem para reservar suficiente memoria. printf ("Encontrados %d elemontos no arquivo. Reservando memoria...\n\n", contador); array = (int*)malloc( contador*sizeof(int) ); //reserva de memoria para X numeros de inteiros encontrados no arquivo. A quantidade de X é o a mesma de contador. rewind(fichero); //Ao contar quantos numeros tinha no arquivo o filepointer ficou no final do arquivo, voltamos ao principio para uma nova leitura. for( i=0; (fscanf(fichero,"%d,", &array[i] )) != EOF; i++); //Agora lemos cada numero y vamos guardando no array. //mostrando valores obtidos for( i=0; i<contador; i++ ){ printf("array[%d]=%d\n", i, array[i]); } //nesse ponto vc dispoe de um array com todos os os numeros que estavam no arquivo. Já pode fazer seus calculos pertinentes. fclose(fichero); //fechamos o arquivo free(array); //liberamos memoria getchar(); return 0;} Depois disso você vai ter um array para fazer seus cálculos e conversões. O arquivo tem que estar na mesma pasta. Sorte
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