Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. vangodp

    VETORES

    leia o código e guarde ele em uma variavel temporal, logo compare com cada uma das que estao guardadas, si existir uma ocorrencia, avise e volte a pedir o código, si não existir insira ele no final. Dica... Isso tudo vai dentro de um while. int i = 0, continuar = 1; while ( continuar ){ //ler o código aqui while( i < tamaño do vetor de códigos ){ // while interno if ( cod == codtemp ){ /*avisar repetiçao*/ }else{ guardar e por continuar a 0 e lançar um break para deter o while interno. } i++ }//fin do while interno }//fin do whole Não é bem um código em c++ mais contem todos os passos.
  2. pronpt e console são a mesma coisa. =/ Nunca deixe de pegar seu código aqui. O erro certamente é seu, sem código não da para ajudar, aqui a sorte não existe.
  3. você esta criando projetos de prompt ou projetos de win32?
  4. para contar as linhas melhor você nos descreva a estrutura do arquivo de texto, pois sem saber o que vamos ler fica meio ruim.
  5. Imagine uma função como isso: funçao você bota carne encima, ele tem umas engrenagens que fazem o trabalho por vc, a carne passa pelas engrenagens e sai abaixo moídas. se pode dizer que a função faz a mesma coisa carne_moída superMoedor2000 ( carne ){ //engrenagens retorna carne_moída; } Então vamos lá.... A primeira linha carne_moída superMoedor2000 ( carne ), a palavra carne_moída estamos dizendo o que vai retornar a maquina(função), é como a propaganda da caixa que promete que embaixo sai carne moída do buraco embaixo si você colocar carne normal encima, uma vez dito que vai sair carne_moída, não podemos retornar outra coisa, pois seria propaganda enganosa kkkk. A palavra superMoedor2000 é apenas un nome ao que damos a maquina para saber a qual nos referimos, podem haver muitas, mas não 2 com o mesmo nome ;). E por ultimo os ( e ), que si você imaginar que é um buraco que você mete carne (carne). As engrenagens são o importante, é tudo aqui que vai dentro de { e }, todos sabemos que 2 maquinas podem trabalhar de forma diferente conforme a disposição das engrenagens, si uma tiver a engrenagens mais pequenas pode sair carne muito mais moídas kkk. por ultimo está a bitola(return), si na primeira linha avisamos que vai devolver carne moída não tem jeito, só podemos devolver isso. Então vamos ver como seria isso conforme seu pedido. o próprio enunciado ta dizendo o que vai retornar (verdadeiro/falso) isso é bool. Recebe um numero, isso é a carne. O fato dela retirnar true si é par ou false si é impar é as engrenagens. Vamos montar ela bool par ( int n ) { //engrenagens if ( n % 2 == 0 ) { return true; //nesse caso tem 2 buracos de saida, porem só si vai usar um deles por vez. só podemos retornar true o false (bool) } else { return false; //nesse caso tem 2 buracos de saida, porem só si vai usar um deles por vez.só podemos retornar true o false (bool) } }Pronto já temos a primeira maquina de picar carne de fabricação própria haha. Como funciona? Dentro de main você chama ela par(20) por exemplo. Porem isso não fará nada, você precisa imprimir o resultado, para isso você pode fazer cout << par(20) << endl; como 20 é par nossa função retorna true, mas vai imprimir 1, si passamos 33 a par(33), então retorna 0. você também pode passar um inteiro int numero = 33; cout << par(numero) << endl; ok? 2. Elaborar uma função que mostra os números de 1 a 100. Nesse caso ela não vai retornar nada, assim que em vez de bool você bota void e também não recebe nada então deixe os () vazios, o importante nessa função são as engrenagens. void mostrar(){ //engrenagens... um simples bucle for o while que imprima até 100. É a mesma coisa que se fosse dentro de main } logo somente faça mostrar(); dentro de main, essa é bem facil, vou deixar para você ver si consegue ;) 3. Fazer uma função semelhante a acima, mas que recebe como parâmetros os valores inicial e final. A mesma coisa só que agora em vez de deixar vazio () fazemos void mostrar( int inicio, int final ){ //engrenagens... um simples bucle for o while que imprima até 100. É a mesma coisa que se fosse dentro de main } para invocar ela é passar 2 números assim: mostrar( 5, 100 ); //inicia contando em 5 e termina em 100 O truque ta em que quando criar um loop for e fizer for ( int i = 0... esse i seja igual a inicio, tipo for ( int i = inicio; i <= final; i++)... Entendeu? Tenta fazer e pratique muito. Sorte
  6. a função sytem é com s minúscula, C++ é "case sensitive", ou seja que distingue entre maiúsculas e minúsculas, para ele System é diferente de system. Ademais você precisa incluir cstdlib ou windows.h(só em sistemas linux). Na linha 38 esta como maiúscula. Também falta ponto e virgula na linha 21 do seu código. Sobre o problema que você diz que "...depois na 7 e vai até a 13.", isso é normal, quando você tem um erro em uma linha o mais normal é que as seguintes linhas estejam marcando erro, faça caso antes a primeira linha, consertando ela o resto deixa de marcar erro. Um truque para identificar erros é que as vezes o compilador marca o erro em uma linha a qual você não vê nenhum erro, porem ele bota algo como "before algo" ou seja "antes de algo", um cout um switch(geralmente a primeira palavra da linha), e as vezes o que vem antes está na linha anterior, já que para C++ não existe o salto de linha, para c++ tanto faz você fazer cout << "Alô"; cout << "mundo"; que cout << "Alô"; cout << "mundo"; ... o anterior(before) de cout << "mundo"; sempre será cout << "Alô";, esteja ele na mesma linha ou na linha anterior, não lhe importa a c++ os saltos de linha, então como falei o truque é si não ver erro na mesma linha olhe uma linha atrás. Por isso existe o ponto e virgula, si você esquecer de colocar o ponto e virgula depois do cout << "Alô", iria fazer mais sentido si fosse cout << "Alô" cout << "mundo"(falta ponto e virgula depois de "Alô");, nesse caso ele ia dizer que falta ponto e coma antes(before) do segundo cou, isso tem sentido, o compilador iria marcar o erro na mesma linha, porem deixa de ter sentido si ambos estiver em linhas separadas e ele vai marcar o erro na seguinte linha com a palavra before, porém como falei para C/C++ é a mesma coisa estar junto que separado, porque o ponto e virgula é o que indica que acabamos uma instrução, isso sim que não pode faltar. Podemos até escrever o programa integramente em uma só linha, mas não devemos esquecer o ponto e virgula logo depois de cada instrução. ;)
  7. Limitada? Em que sentido? você pode desenvolver até mesmo sistemas operativos com isso. Aprender if, for, while é igual aprender o beabá, uma pessoa meia inteligente e sem estudos pode aprender isso em uma tarde ou máximo uma semana. Vaia aprender funções estruturas, arrays, ponteiros, memoria dinâmica: listas infinitas, pilhas..., manipulação de arquivos etc. Só então você deveria que é limitado. Si não o limitado ta sendo vc. Si eu te der uma tarefa você não vai nem por onde começar. Para quando você aprender C, continue com C++, esse é meu conselho. Ou então aprenda Java, ou que você mais gostar. C é um ótimo linguagem, não se engane. Todos os outros linguagens estão baseados nele. você aprendendo C será como comer algodão doce na hora de aprender outros linguagens, fácil, fácil.
  8. vangodp

    Return

    return tem 2 utilidades. Uma delas é retornar um valor. A outra é deter o programa nesse ponto. Para que serve isso? por exemplo, você tem um programa que desde main você invoca uma função e envia a essa função um numero que você quer saber si é par ou impar, ai você vai la dentro do da função e coloca 2 ifs, um para averiguar si o numero e par e outro si é impar, logicamente isso se pode fazer com um só if por que si não é par else impar XD, mas imaginamos os ifs por separado, agora imaginamos que o numero é par e no primeiro if já temos o que buscamos. Vamos deixar o a função continuar até o final? Pra que? Acho bem melhor por um return dentro de cada if e que assim se interrompa a execução dessa função e volte para o main sem precisar chegar ao final. em outras palavras seria algo assim #include <stdio.h> void foobar(int n){ if ( n%2==0 ){ printf("Par"); return; //o programa vai retornar de aqui } if( n%2!=0 ) { printf("Impar"); return; } } int main () { foobar( 2 ); return 0; }Claro que com esse exemplo não se aproveita o potencial que te oferece o return, mas imaginou si fosse 30 comparações? Teria lógica deixar o programa fazer 30 comparações se encontrou o resultado na primeira? Acho melhor voltar imediatamente a main, isso é mais rendimento no seu programa. ;)
  9. não entendo o que quer dizer "colocar os valores das matrizes no codigo". você quer guardar o resultado na própria matriz?
  10. vangodp

    DUVIDA EM C

    #include <stdio.h> #define N 35 int main () { float salario[N], minimo[N]; int i = 0; while ( i < N ) { printf ( "SALARIO do funcionario %d: ", i + 1 ); scanf ( "%f", &salario[i] ); printf ( "SALARIO MINIMO do funcionario %d: ", i + 1); scanf ( "%f", &minimo[i] ); printf ( "\n"); i++; } i=0; while ( i < N ) { printf ( "%d Ganha %.1f salarios minimos.\n", i + 1, ( salario[i]/minimo[i]) ); i++; } return 0; }
  11. vangodp

    Return

    Não! O return não esta aí atoa. Si você declarar uma função como int você esta obrigado a por o return, e desgraçadamente o main sempre deve ser do tipo int, assim que não há nada que podamos fazer. Si quiser por um printf antes tudo ok, porem tudo o que por depois o programa não o terá em conta, jamais chegará aí.
  12. https://pt.wikipedia.org/wiki/Diagonal_de_uma_matriz #include <iostream> #include <iomanip> using namespace std; #define N 2 int main (){ float m[N][N] = { {3.0, 7.0}, {8.0, 5.0} }; //Si quiser uma matriz mas grande, mude N a um valor maior e nao se esqueça de preencher ela aqui, cada linha deve ter dentro as colunas {n1,n2,n3...} float maior = 0; float soma=0; int i = 0; for ( i = 0; i < N; i++ ) { for ( int j = 0; j < N; j++ ) { cout << " " << m[i][j]; } cout << "\n" << endl; } i=0; while ( i<N ){ //maior if ( m[i][i] > maior ){ maior = m[i][i]; } //soma diagonal soma += m[i][i]; i++; } cout << "Maior valor na diagonal: " << maior << ". \nSoma de elementos em diagonal: " << soma << endl << endl; //mostrando a divisao de cad aelemento polo maior numero cout << "Divisao de cada elemento do vetor pelo maior numero encontrado em diagonal: " << endl; for ( i = 0; i < N; i++ ) { for ( int j = 0; j < N; j++ ) { std::cout << std::fixed; cout << setprecision(2); cout << " " << ( m[i][j]/maior); } cout << "\n" << endl; } cin.ignore(); return 0; } Por que ele só vai imprimir a virgula até j ser N-1, ou seja, nesse caso, uma só vez por linha.
  13. o problema é que você esta estudando ponteiros porem você ainda não aprendeu o que são arrays >_<. Que é um array? Bom basicamente um array é um conjunto de dados de um mesmo tipo, armazenado na memória de forma consecutiva. Porem para acessar a essa memória, isso acontece mediante um ponteiro implícito. Vamos fazer um desenho do que seria um array de chars em memória, algo simples, algo como "Alo mundo" //isso é um array de chars, ou seja um string ['A']['l']['o'][' ']['m']['u']['n']['d']['o']['\0'] Isso é um string, um conjunto de dados básicos o tipo char. Até aqui nada novo né, você deve ta pensando... I esse noob que me ta contando kkk Ok agora vem o divertido. Depois disso você vai entender os arrays como nunca XD O problema reside que nós não acessamos a todas as variáveis de uma só vez, por exemplo o printf, o unico que quer saber é qual é a primeira letra desse array. Essa letra é 'A' não é? Ai o que é que ele faz? Ele pega vai la na memória bunitinho, imprime a 'A' depois imprime a segunda que esta ao lado que é a 'l'. você reparou que eu marquei em negro "forma consecutiva" lá quando expliquei o que é um array? Então! Na memoria, todas as letras desse array são vizinhas, então o nosso colega "printf" vai imprimindo todas elas uma a uma todas as que estiverem ao lado. Quando é que ele para? quando ele encontrar o NULL que é a ultima, si não ele não saberia onde parar. Ele vai parar no '\0' (Sempre!) Tá.. mais ainda não explicou né? XD Não realmente não explicou! Ainda... XD Vamos pensar... Como você acha que ele acede a cada letrinha??? Fácil! Com um ponteiro!!! Quando eu crio char vet[]="Coruja"; considere que vet é um ponteiro (Realmente é um ponteiro), que inicia apontando a primeira variável, ele sempre vai apontar a primeira ao inicio. Graficamente seria isso: *vet | v 0 1 2 3 4 5 6 ['C']['o']['r']['u']['j']['a']['\0']Agora acho que já começa entender... Ou não sei kkk. Si já sabia isso, agora vem o que vai fazer você entender melhor. vet[0] é isso então: *vet | v 0 1 2 3 4 5 6 ['C']['o']['r']['u']['j']['a']['\0']si eu faço vet[1] troca o ponteiro para a posição 1. *vet | v 0 1 2 3 4 5 6 ['C']['o']['r']['u']['j']['a']['\0']Isso é o que vai fazendo o printf, ele vai trocando e imprimindo um por um até chegar no Nulo. Por que tem o nulo? Imaginou o que aconteceria si eu fizer char vet[10000]="Coruja"; e somente guardar "Coruja"? Como vai saber printf onde parar? No 10000? kkk Não é arte de magia, é ciência. kkk Tá vamos deixar de conversa e vamos ao grão. O que é p1 = vet? É uma copia de ponteiro, você esta copiando a direção do ponteiro vet em p1, nada mais! vamos ver a explicação lógica... Uma variável guarda um numero, porem um ponteiro apesar de também guardar números, não guarda números qualquer, si não que guarda números de direção. Agora vamos ver que fazem os operadores de direção (&) e indireção(*). -O operador de direção (&) serve para manipular direção lógico. Como uma variável esta feita para guardar números si queremos extrair sua direçao devemos por & adiante, ou seja que si eu faço int ptr= &n; estou guardando em ptr a direçao de n, lógico isso é o que espera ptr(A direçao), mas si eu fizer int ptr= n; como n guarda um numero, é como si eu fizesse int ptr= *n; no qual o que vai acontecer é que ptr vai guardar o valor de n e não sua direção, isso é errado. Acho que aqui você não tem problema. O operador de indireção retorna o conteúdo da variável apontada, ou sej, si tenho int ptr= &n; e logo faço int n2 = *ptr; estou guardando em n2 o valor de n1. Ok aqui vem a explicação. Como sabemos que o que guarda um ponteiro é uma direção si vamos copiar um ponteiro a outro não temos que por o (&) adiante não é? Isso é correto: char *p1; char b = 'w'; char *p2; p1 = &b; //p1 aponta b Para copiar o ponteiro p1 em ponteiro p2 nós fazemos: p1 = p2; //Ambas apontam a b, tanto p1 como p2 fazer isso p1 = p2 é errado não é? Então! Isso demonstra que ao fazer p1 = vet é uma copia de ponteiros, agora ambos apontam ao principio do seu string "Coruja". Logo de fazer p1 = vet *p1 | v 0 1 2 3 4 5 6 ['C']['o']['r']['u']['j']['a']['\0']Fica igual que vet *vet | v 0 1 2 3 4 5 6 ['C']['o']['r']['u']['j']['a']['\0'] Por isso você mesmo coloca no comentário do seu código "// ou p1=&vet[0],tanto faz". Ao fazer &vet[0] você esta extraindo a direção da primeira letra do seu array e guardando em p1 hombre! XD então Agora vou deixar bem claro o que você quer escutar... Si eu quero imprimir com printf todo um string eu faço: char vet[]="Coruja"; printf("%s", vet); Eu não tenho que que por * adiante não é? então... si antes eu falei que ao fazer p1 = vet;, isso é uma copia.... Por que deveria por * adiante de p1 si você não tem que colocar * adiante de vet???? TADAHHH!!! Entendeu? Agora vamos responder uma por uma: -Por que quando printamos o conteúdo referente a um ponteiro do tipo char, não podemos passar o *p1 como argumento para indicar esse conteúdo? R: isso é por que p1 já é um ponteiro que aponta a primeira posição, printf entende que ao passar p1 o nome p1 é o mesmo que &vet[0], isso é o que espera printf -Por exemplo, quando queremos printar o conteúdo apontado por um ponteiro do tipo int, passamos o *p2 como um argumento. R: O tipo de operação é diferente, O mecanismo do printf com array de char eu já expliquei, quando usamos o operador %s ele pega e imprime todas as letras, porem com int ele não imprime todas as letras, si não que temos que indicar uma a uma as que queremos imprimir. recorde que quando copiamos p1 = vet estamos copiando a primeira posição do array, porem o modificador %s atua diferente do modificador %d ou %x ou %c, ele diz "Imprime tudo até o NULL", já o %d por exemplo, diz "imprime essa casinha somente". -Caso eu o fizesse num ponteiro do tipo char, o programa não rodaria. R: Claro si você tentar fazer printf ( "%s", *p1 ); o %s ta esperando saber onde esta a primeira letra do string, &vet[0], e você passa *p que imprime a letra 'C' já que ele aponta a primeira letra do vet, ai o programa pega o valor, sei la.. da tabela asc2 equivalente a C e bota ele no %s, será 100 acho, então o printf tenta mandar o ponteiro lá na direção 100 da memória e começar a printar dali. Resultado.... Acho que nosso amigo windows capa isso, por que ele sabe que é uma má idéia, você ta tentando acessar a memória que não te pertence. É o windows quem faz a reserva de memória por nós, quando fazemos char c; estamos pedindo "Windows! Tem memória para um char? Windlws responde.. Sim claro! Nosso programa fala pra ele: Beleza anota aí que é minha kkk" Resultado... o window sabe tuuuudo!!!! XD -Outra dúvida, o conteúdo armazenado pelo ponteiro do tipo char p1 e o conteúdo apontado por ele foram passados por mim no printf como o mesmo argumento ( ambos p1), mas um print ou o endereço( passei como %x ) e o outro o conteúdo da string (passei como %s). Como pode isso?! É um conteúdo ou um endereço afinal?? R: Acho que isso já ta respondido não? tanto p1 como vet apontam a mesma bagaça. XD -Parece que quanto mais tento estudar ponteiros, mais confuso eu fico...broxante!! R: Brocha não... kkk Desde já grato. R: (y) Uff cansei... Fui
  14. #include <iostream> #include <iomanip> using namespace std; #define N 2 int main (){ float m[N][N] = { {3.0, 7.0}, {8.0, 5.0} }; //Si quiser uma matriz mas grande, mude N a um valor maior e nao se esqueça de preencher ela aqui, cada linha deve ter dentro as colunas {n1,n2,n3...} float maior = 0; float soma=0; int i = 0; cout << "O vetor contem: " << endl; for( i = 0; i < N; i++){ cout << "{ "; for(int j = 0; j < N; j++){ cout << m[i][j]; if ( j<N-1 ){ cout << ", "; }else{ cout << " "; } } cout << "}" << endl; } cout << endl; i=0; while ( i<N ){ //maior if ( m[i][i] > maior ){ maior = m[i][i]; } //soma diagonal soma += m[i][i]; i++; } cout << "Maior valor na diagonal: " << maior << ". \nSoma de elementos em diagonal: " << soma << endl << endl; //mostrando a divisao de cad aelemento polo maior numero cout << "Divisao de cada elemento do vetor pelo maior numero encontrado em diagonal: " << endl; for( i = 0; i < N; i++){ cout << "{ "; for(int j = 0; j < N; j++){ float f = ( m[i][j]/maior); std::cout << std::fixed; cout << setprecision(2) << f; if ( j<N-1 ){ cout << ", "; }else{ cout << " "; } } cout << "}" << endl; } cout << endl; cin.ignore(); return 0; }Da uma analisada e o que não entender pergunte XD
  15. Um struct é como um array, porem um array esta obrigado a armazenar tipos de dados iguais, a estrutura serve para armazenar tipos de dados diferentes. cin.ignore(); evita erros logo após tomar um string por teclado, os erros geralmente são produzidos pela tecla enter que pulsamos al final de ler um string. Já o cin.ignore() no final do programa atua de pausa. ;) (truquinos ihihihi) Datos lista[100]={0}; é como um array de inteiros, porem em ves de ser de inteiros, ele é de estruturas. =O while( i<100 && (strcmp( lista.nome, "fim") != 0) ); é como dizer ao programa.... porenquanto que i seja menor que 100 e lista.nome seja diferente de "fim" repetir e repetir XD São conceitos um pouco avançados, porem isso tudo você começa entender quando você lidar com estruturas, as estruturas são boas para agrupar dados sobre um mesmo objetivo comum.... Por exemplo eu tenho uma estrutura chamada dados, nesse dados eu guardo os dados que possa ter uma pessoa, telefone, nome, rua etc.... struct dados{ int telefone; char nome[30]; char rua[50]; }; Isso agrupa dados de um individo. Agora eu posso fazer assim: dados Manuel; //e posso guardar os dados do suposto manuela Manuel.telefone = 952847438; strcpy ( Manuel.nome, "Manuel Apolonio"); strcpy ( Manuel.rua, "Rua Longa"); //Posso criar quantos dados eu quiser dados Elena; dados Pedro; ... Ou.... dados agenda[100]; // Isso pode ser uma agenda de 100 contatos, cada uma delas com seus respectivos dados de telefone, nome e rua. Agora eu faria... agenda[0].telefone = 12313123; strcpy ( agenda[0].nome, "Manuel Apolonio"); strcpy ( agenda[0].rua, "Rua Quebrada"); E posso fazer isso até agenda[99].telefone=...... A maior vantagem é que as estruturas guardam diferentes tipos de dados. ;) C/C++ são maravilhosos não é? =)
  16. #include <iostream> #include <string.h> using namespace std; struct Datos { char nome [100]; char prof [100]; }; int main () { Datos lista[100]={0}; int i = 0; do{ cout << "\nDigite Seu Nome: "; cin >> lista [i].nome; cin.ignore(); if ( strcmp( lista[i].nome, "fim") != 0 ){ cout << "\nDigite Sua Profissao: "; cin >> lista [i].prof; cin.ignore(); i++; } }while( i<100 && (strcmp( lista[i].nome, "fim") != 0) ); cout << "mostrando resultados..." << endl << endl; int advogados = 0; int x = 0; if ( strcmp( lista[x].prof, "advogado") == 0 ){ cout << "Nome: " << lista[x].nome << " Profissao: " << lista[x].prof; advogados++; } for( x++; x<i; x++ ){ if ( strcmp( lista[x].prof, "advogado") == 0 ){ cout << ", Nome: " << lista[x].nome << ", Profissao: " << lista[x].prof; advogados++; } } cout << "Numero de advogados: " << advogados << endl; cin.ignore(); return 0; }
  17. vangodp

    Ler 20 Inteiros

    Depende do que você quer fazer... si descrever o problema que já nem lembro hahaha
  18. vangodp

    Ler 20 Inteiros

    strcmp retorna 3 tipos de valor conforme o caso si temos 2 string de esta forma: char s1[10] = "abc"; char s2[10] = "abb"; E usamos strcmp(s1, s2) devemos saber que resultados van a dar. Para saber como funciona strcmp você tem que saber o procedimento que ele usa. O strcmp compara letra a letra um string com outro, exemplo ele pega a primeira letra de s2 e compara com a primeira letra de s1, si é menor o função para a comparação, já que em s2 uma letra é menor que s1, então se diz que s2 é menor que s1, strcmp retorna -1, porem si a letra encontrada for maior então s2 é maior, nesse caso strcmp retorna 1, si ambas letras são iguais se passa a analisar a seguinte letra de ambos strings, e assim até acabar todas as letras, nesse caso retorna zero pois não existe letras maiores ou menores em ambos strings, são iguais. Comparar "abc" com "abb" strcmp retorna -1 pois a 3º letra del segundo string é menor que a do que a 3ª letra do primeiro string. strcmp("abc", "abb") retorna -1, 'b' é menor que 'c'. strcmp("abc", "abd") retorn 1 a 'd' é maior que a 'c'. strcmp("abc", "abc") retorna 0 pois ambos são iguais. E por ultimo !strcmp("abc", "abc") retorna 1, pois o simbolo ! adiante de strcmp é o operador de negação, ele "inverte" o resultado, como são iguais e strcmp retorna um 0(false), o operador transforma o false em true(1). Aqui você errou: if (prof=='advogado')é if ( !strcmp(prof, "advogado") )para indicar que ambos são iguais, recorde que si são iguais o resultado de strcmp será zero, então não funcionaria if, aí o operador de negação transforma esse falso em true para que ele entre no if quando sejam iguais. Em outras palavras, isso !strcmp(prof, "advogado")é igual a isso strcmp(prof, "advogado") == 0ok? Tente arrumar isso.
  19. Busque no google "calcular numero euler C" que você encontra um montão de posts já feitos.
  20. #include <iostream> #include <cstring> //para usar strcpy(str1, str2) "string copy" incluir cstring lib, esta funçao copia str2 em str1 #include <cstdlib> //para system("Pause") using namespace std; int main (){ char nm[25], ct[25], cs[25]; float rf, id; cout<< "Qual o seu primeiro nome: "; cin>> nm; cout<< "Qual a sua idade: "; cin>> id; cout<< "Qual a sua renda familiar: "; cin>> rf; if ( id <= 15) { strcpy (ct, "Infantil"); } else if (id > 15 && id <= 18) { strcpy (ct,"Juvenil"); } else strcpy (ct,"Adulto"); if ( rf <= 1000) { strcpy (cs, "Media Baixa"); } else if ( rf > 1000 && rf <= 3500) { strcpy (cs, "Media"); } else strcpy (cs,"Media Alta"); cout<< "Sua categoria e: " << ct << "\n"; cout<< "Sua classe social e: " << cs << "\n"; system ("pause"); return 0; }Si está usando C_string devemos usar as funções de C, como strcpy para copiar um string em outro, não se permite fazer diretamente como str1 = str2, como no caso de usar a classe string de c++, para C_strings(strings tipo C) não que devemos usar strcpy(str1, str2); que é o equivalente a str1 = str2. Certifique-se que no str1 tenha suficiente espaço para caber str2 ou vai causar transbordamento de memória.
  21. vangodp

    Ler 20 Inteiros

    while(nome!='fim');{... esta errado, é while ( !strcmp( nome, "fim" ) ){... Para comparar chars estilo C, precisamos usar as funções que nos brinda C para comparar strings, si em vez de C_string você usar a classe string aí é outra coisa, então seria while(nome!="fim"){.
  22. vangodp

    Ler 20 Inteiros

    troque std::cout << " Numeros Digitados " << numeros << std::endl; por std::cout << " Numeros Digitados " << numeros << ", "; é o std::endl que faz o salto de linha.
  23. você não usa os break em cada case???
×
×
  • Criar Novo...