Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. Nao conheço muito C#, mas sei que ele precisa de net framework para que funcione. Em c/c++ não precisamos de nenhum framework para isso, uma vez compilado o programa e transformado a exe esse sempre funcionará nessa maquina sem precisar instalar nada mais. Em C/C++ é você que se encarga de gestionar a memoria ram, já em C# tenho entendido que que é o framework que se encarga disso, ou posso estar falando uma tonteria, porém como você já conhece o linguagem C# não preciso dizer nada. Entre C e C++ a diferença é que C++ é orientado a objetos, ou seja, você trabalha com classes, herança, polimorfismo, etc, igual que C#, porém C usamos funções e estruturas somente. Por que você não prova C ou C++ durante uma semana? Assim você pode ter uma ideia de qual são as diferenças, ao menos iniciais. Aprenda variáveis, string, bucles, funções, e só com isso você se vai dar conta que estarás todo o tempo trabalhando sobre a memoria, coisa que os frameworks emulam, porém com muito mais cuidado. Em C/C++ si sair de rango lascou kkkkk.
  2. vangodp

    Struct em c++

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

    dúvida em c++

    #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
  4. 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 =(
  5. vangodp

    dúvida em c++

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

    dúvida em c++

    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í?
  7. vangodp

    Struct Matriz

    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"); }}
  8. 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.
  9. vangodp

    Porque C# nesse forum?

    Boa pergunta... É como misturar água e óleo. Nada a ver um com outro.
  10. 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!