Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. vangodp

    Maior número em C

    É fácil.. Ordene eles em um array mostre a primeira e a segunda posição.
  2. void Forcaresultante (int Peso, int Empuxo,int &dif, char resp[]) Amigo.. uma referencia você imagina que é como 2 irmãos gêmeos que se eu dou uma bulacha em um o outro vai sentir a dor kkkk. referencia é isso: int n = 10; int &r = n; tudo o que acontecer com r vai doer em n kkkk. Se eu pegar r e mudar para 20 n vai acontecer o mesmo. Isso se usa quando você quiser conservar o resultado na variável que você esta enviando. Isso: int n = 10; int &r = n; r = 20; //nagora vale 20 é o mesmo que isso void foo(int &r){ r=20; } int main(){ int n = 10; foo(n); cout << n << endl; //20 } sobre o void bar(char array[]){ //... } o que acontece é que si eu envio "mingau"... int main(){ char palavra[100] = "Mingau"; bar(palavra); } se produz uma copia de palavra, não é como no caso da referencia que o que acontecer em uma vai acontecer em outra, são como 2 variáveis palavra diferentes, uma em main() e outra em bar(). Si modificar o que ta em bar nada acontecerá em main. Nao provei muito é só para mostrar mais ou menos. #include <iostream>using namespace std;void Forcaresultante ( int, int, int&, char[] );int main (){ int Empuxo, Peso; int Df, Vfd, g, m, dif; char resp[50] = "\nForca: O corpo "; cout << "\nDigite a densidade do fluido em kg/m3: "; cin >> Df; cout << "\nDigite o volume do fluido em m3: "; cin >> Vfd; cout << "\nDigite a aceleracao da gravidade em m/s2: "; cin >> g; Empuxo = Df * Vfd * g; cout << "\nValor do empuxo: " << Empuxo << " N"; cout << "\n"; cout << "\nDigite a massa do corpo em Kg: "; cin >> m; cout << "\nDigite a aceleracao da gravidade em m/s2: "; cin >> g; Peso = m * g; cout << "\nValor do peso: " << Peso << " N"; cout << "\n"; Forcaresultante ( Peso, Empuxo, dif, resp ); cout << "Diferencia: " << dif; cout << "\n"; return 0; }void Forcaresultante (int Peso, int Empuxo, int &dif, char resp[]) { if ( Peso > Empuxo ) cout << resp << "afundara"; else if ( Peso == Empuxo ) cout << resp << "ficara imerso"; else if( Peso < Empuxo ) cout << resp << "flutua na superfície do liquido"; dif = Peso - Empuxo;} Pega seu source aí e eu ja irei dando uma olhada.
  3. por que basicamente um string está composto desta forma "isso é um string\0". Esse '\0' (NULL) é o que vai logo ao final do string e faz com que pare. em outras palavras e o mesmo que string != '\0' int i;char string[]= {"String qualquer"}; for(i=0; string[i] != '\0'; i++) //Essa condição no laço for faz com que ele entre em loop até imprimir a ultima letra da string. Mas por que?{ printf("%c", string[i]);} Ou mais fácil de entender: int i;char string[]= {"String qualquer"}; for(i=0; string[i] != 0; i++) //Essa condição no laço for faz com que ele entre em loop até imprimir a ultima letra da string. Mas por que?{ printf("%c", string[i]);} Esse nulo são as funções como scanf que colocam ele de forma implícita sem que você saiba, porém ele existe. Por que existe esse null? Como você acha que o printf sabe onde tem que parar? Imagine que eu crio char string[1000] = "Hello"; Só usei 4, porém printf não sai imprimindo 1000 chars não é? Então... É porque quando eu declaro um char string[1000] = "Hello";, o programa vai logo depois da ultima letra e bota o nulo! Em outras palavras fica char string[1000] = "Hello\0";. Ok
  4. vaia a youtube em um canal que se chama de "aluno para aluno" busque nas listas videos de programação C. Pratique até o tema de estruturas, arrays etc Eu não sei exatamente quanto você sabe, por isso não posso dar um programa conforme seus conhecimentos. Porém pense que uma estrutura é como um array, a diferença é que um array armazena dados de igual tipo, já uma estrutura armazena tipos diferentes. Explicar coisas por aqui fica difícil, si quiser ajuda pode me add no skype e te ajudo sem problemas.
  5. Toma ai... /* 4. Foi realizada uma pesquisa de algumas características físicas da população de um certa região. Foram entrevistadas 500 pessoas e coletados os seguintes dados:a- sexo: M (masculino) e F (feminino)b- cor dos olhos: A (azuis), V (verdes) e C (castanhos)c- cor dos cabelos: L (louros), C (castanhos) e P (pretos)d- idadeDeseja-se saber:A maior idade do grupoA quantidade de indivíduos do sexo feminino, cuja idade está entre 18 e 35 anos e que tenham olhos verdes e cabelos louros.*/#include <iostream>using namespace std;struct Dados{ char sexo; char corOlho; char corCabelo; int idade;};int main (){ Dados entrevista[500] = { //sexo,olho,cabe,idade { 'M', 'A', 'L', 22 }, //<- entrevista[0] { 'F', 'V', 'P', 27 }, //<- entrevista[1] { 'F', 'A', 'C', 39 }, //<- entrevista[2] { 'M', 'C', 'C', 18 }, //... { 'F', 'A', 'L', 52 }, { 'M', 'A', 'L', 22 }, { 'F', 'V', 'L', 27 }, //Loira de olhos verdes XD { 'F', 'A', 'C', 39 }, { 'F', 'V', 'L', 22 }, //Outra loira { 'F', 'A', 'L', 52 }, //pode por até 500 mas eu acho que vou passar disso, só quero testar... Preenche vc kkk }; int maiorIdade=0; int n=0; for ( int i = 0; i < 500; i++ ){ //maior idade cout << "lol" << i << endl; if ( entrevista[i].idade > maiorIdade ){ maiorIdade = entrevista[i].idade; } //quantidade de indivíduos do sexo femininoentre 18 e 35 anos //e que tenham olhos verdes e cabelos louros if (entrevista[i].sexo == 'F' && entrevista[i].idade > 17 && entrevista[i].idade < 36 && entrevista[i].corOlho == 'V' && entrevista[i].corCabelo == 'L' ){ n++; } } cout << "A maior idade do grupo é: " << maiorIdade << endl << endl; cout << "Quantidade de indivíduos do sexo \nfemininoentre 18 e 35 anos " << "e que \ntenham olhos verdes e cabelos louros: " << n << endl; cin.ignore(); return 0;} Leia com atenção e modifique o que quiser
  6. isso esta mal: char *sexo... Logo depois você tenta ler como si fosse um string porém isso é um ponteiro. Si você quer espaço para guardar um string, Em C você tem os arrays, e em C++ você tem os arrays e a classe string. Um exemplo valido em C e C++, é o tal array de chars ou também chamado vetor de chars, ou também c_string, ou simplesmente string, porém não devemos de confundir string de C com a classe string de C++. c_string #include <iostream>using namespace std;int main (){ char palavra[20]; printf("Escreva uma palavra de menos de 20 letras: "); scanf ( "%s", palavra ); // Nao ponha & adiante como vc faz normalmente com char ou int printf("A palavra é: "); printf("%s", palavra ); cin.ignore(); return 0;} Classe string de C++ (Só vale em C++) #include <iostream>using namespace std;int main (){ string palavra; cout << "Escreva uma palavra sem se preucupar pelo tamanho dela: "; cin >> palavra; cout << "A palavra é: " << palavra << endl; cin.ignore(); return 0;} Da sua forma você pode apenas guardar literais nela ou seja, o unico que você pode fazer é #include <iostream>using namespace std;int main (){ char *palavra = (char*)"Isso é um string literal"; // nao se pode usar scanf para modificar ela depois, ela é uma constante criada em tempo de compilaçao, por isso nao podemos modificala. cout << palavra << endl; cin.ignore(); return 0;} Primeiro você deve solucionar isso antes dos ifs. Logo você nos conta como foi isso.
  7. #include<iostream>#include <cstdlib>#include<conio2.h>using namespace std;void voto ( int* );void limparTela();int menuPrincipal();int menu();char* nome(int);int main() { char op; int c[3] = {0}; while ( (op = menuPrincipal()) ) { switch ( op ) { case 1: cout << "Cidade SP. "; voto ( c ); break; case 2: cout << "Cidade RJ. "; voto ( c ); break; case 3: cout << "Cidade BA. "; voto ( c ); break; case 9: for ( int i=0; i<3; i++ ){ cout << "Candidato " << nome(i) << " total votos: " << c[i] << endl; } system("Pause"); break; default: break; } limparTela(); }}void voto ( int *c ) { int op = menu(); switch ( op ) { case 1: c[0]++; break; case 2: c[1]++; break; case 3: c[2]++; break; default: break; }}int menuPrincipal() { cout << "Informe sua Cidade 1-SP , 2-RJ, 3-BA, 9 para resultado, 0 para sair: "; int op; cin >> op; limparTela(); return op;}int menu() { int op; cout << "Escolha seu Candidato: \n" << endl; for ( int i=0; i<3; i++ ){ cout << i+1 << " - " << nome(i) << endl; } cin >> op; cin.ignore(); return op;}void limparTela() { //system("cls"); clrscr();}char* nome(int n){ switch (n) { case 0: return (char*)"Fulano - PP"; case 1: return (char*)"Beltrano - SS"; case 2: return (char*)"Ciclano - TT"; default: return (char*)"Candidato not found!"; } } Esse poderia ser um bom ponto de partida.
  8. quando for designar um valor a um string faça com " (aspa duplas) exemplo: ct = 'Infantil' troque por ct = "Infantil". Trata-se de um string e não de um char.
  9. No case 2: você não declarou a variável B que você esta passando para a função remove, outro erro seu é que você esta usando o nome remove para uma função, sendo que já existe uma função com esse nome, melhor trocar isso por outro nome, remover por exemplo. Nessa mesma função "remove" você não colocou return algo, da um aviso. e a variável r você não esta utilizando ( int r = vet[verificar]; ). Em fim... São vários erros pequenos que impedem seu programa funcionar bem, conserte isso.
  10. Nao só isso kkkk Quando for usar scanf tipo scanf("%d",n1); temos que por & adiante do n1 de esta forma scanf("%d",&n1); XDDD
  11. você quer validar si a pessoa introduziu uma frase maior que o tamanho que você reservou, é isso? Pois você esta fazendo isso até de maneira perigosa eu acho. A função gets lê um string de qualquer tamanho, 10, 40, 100 até "infinito", ele toma todas essas letras de um X, e armazena na sua variável frase, que é do tamanho de 40 chars. Porém você já se perguntou o que acontece com o resto das letras si você escrever mais de 40 letras? A resposta é "buffer overflow", ou conhecido em nossa língua como transbordamento de buffer. você vai passar do limite que você estabeleceu e tudo o que ultrapassar vai sobrescrever dados "vizinhos", isso é um problema gravíssimo. Prove isso baixo sua responsabilidade: char frase1[10]; printf ( "Escreva uma frase de mas de 10 letras e veja como gets nao controla o tamanho." ); gets(frase1); printf ( "Frase1: %s\n", frase1); Quando printf imprimir mais letras da que você reservou você já destruiu memória XD. Até pode que falhe o programa, incluindo até mesmo pode que seu computador fique inservível e você tenha que formatar. kkkkk Quer uma forma correta de ler uma frase e não sobrepassar o tamanho? #include <stdio.h>#include <stdlib.h>void flush_in(); int main (){ char frase1[10]; scanf("%9[^\n]", frase1 ); flush_in(); printf("O tamanho da frase %d letras, e contem: \"%s\\0\"", sizeof(frase1)/sizeof(frase1[0]), frase1); getchar(); return 0;}void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}} Essa é a melhor forma de ler corretamente algo. Passamos a explicar cada linha. Passamos direto para a linha 8, nessa linha faço uma declaração de um string de 10 letras. Na linha 9 uso scanf com um parâmetros meio doidos kkk. o %9 impede que entre na frase1 mais de 9 letras. Por que só 9??? Porque ao se tratar de um string ESTAMOS OBRIGADOS A DEIXAR O ULTIMO CHAR LIVRE PARA O CARACTERE NULO '\0' que serve para indicar o final do string. Então é como si fosse 9 chars desde o teclado + o nulo que o scanf bota no final automaticamente por nós, si eu ler %10 o scanf teria colocado o nulo na décima primeira casa causando o tal "buffer overflow". O [^\n]ignora o enter. Que acontece com o resto das letras? Ficam no buffer aguardando outra variável para entrar, ou seja é lixo, não deveríamos fazer nada com isso. Aí é onde entra flush_in(). A função flush_in serve para esvaziar tudo o que sobrou do buffer. Resultado... Uma leitura correta. Recorde que a única forma de esvaziar o buffer é lendo o que contem nele, isso é exatamente o que faz essa função, lê letra por letra até esvaziá-lo completamente. Si você entrar com um string como "vamos fazer uma prova" al executar o programa, vai sair algo como: O tamanho da frase 10 letras, e contem: "vamos faz\0". <- Esse "vamos faz\0" seria o aspecto que teria o que foi lido, sendo considerado o '\0' como uma única letra, que marca o fim do string, isso esta sempre presente em "TODOS" os C_string (string tipo char[]) já que do contrario printf não saberia até onde ler. você já se perguntou como sabe printf onde tem que parar de imprimir si eu crio uma frase com 10 letras, porém reservei 1000?? Ele para no nulo sempre. A maioria das funções botam o nulo para você no final sem que você saiba, então tenha isso em conta na hora de fazer reservas de memória na hora de declarar char[]. Uma forma aconselhável de reservar um string pode ser char frase[100+1]; sendo esse 1 o para o null, então você dispõe de 100 chars livres e não 99. Si você quiser alguma ideia de como controlar a entrada de forma efetiva posso lhe dar uns conselhos, é só você me agregar por skype, lá me chamo igual.
  12. O return ( md ); deve estar fora do laço for. Esse for se executa 4 vezes, porém si ele encontrar o return vai ser interrompido na "primeira volta". Lembre-se disso... Return tem 2 cometidos. A primeira qualidade do return é que ele, como você ja sabe, ele retorna um valor. O que poucos sabem é que ele detêm em seco a função. Ou seja você pode ter mais de um return, realmente nada impede ter infinitos returns em uma função, só que ao topar com um deles a função vai ser interrompida imediatamente e retornará ao ponto de invocação da mesma. É bastante útil ter vários retornos veja um exemplo. #include <iostream>using namespace std;char* nome(int nome){ switch (nome) { case 1: return (char*)"Paulo"; case 2: return (char*)"Marcos"; case 3: return (char*)"Felipe"; default: return (char*)"No name"; }}int main (){ cout << "Bem vindo senhor " << nome(1) << endl; cout << "Bem vindo senhor " << nome(2) << endl; cout << "Bem vindo senhor " << nome(3) << endl; cout << "Bem vindo senhor " << nome(10) << endl; cin.ignore(); return 0;} Beleza?
  13. float Forcaresultante ( float Peso, float Empuxo ) { if ( Peso > Empuxo ) cout << "\nO corpo afundara"; else if ( Peso == Empuxo ) cout << "\nO corpo ficara imerso"; else if( Peso < Empuxo ) cout << "\nO corpo flutua na superfície do liquido"; return Peso - Empuxo; }
  14. O erro correspondente a primeira foto é que a função GradeBook( std::string ) esta esperando um objeto tipo string, e você esta passando um char* (array constante literal), tente fazer isso: string nome = "cs101 Introduction to C++ Programing"; GradeBook::GradeBook( nome ); O programa acha que você esta tentando fazer: char *nome = "cs101 Introduction to C++ Programing"; GradeBook::GradeBook( nome ); Isso está totalmente desaconselhado fazer em C++, para isso você tem as variáveis(objeto) do tipo string.
  15. faça uma variavel chamada valorTotal, e si a pessoa escolher prato 1 por exemplo, aí você faz isso: valorTotal = valorTotal + prato1; o que é o mesmo que: valorTotal += prato1; vai somando cada prato ao valor total, quando termine você vai ter tudo somado nessa variável.
  16. vangodp

    Erro na compilação - C

    o erro esta no tal include que se encontra nessa direção. porém como nos fornece tão poucos dados não posso dar uma resposta 100% clara.
  17. você pode saber isso fazendo: printf ( " %d ", ( por aqui o que quer avaluar ) ); Exemplo printf ( " %d ", ( (A>&&(C==D));. Si imprimir 1 é verdadeiro e si imprimir 0 é falso. então você pode declarar int A = 10; int B = 3; int C = 2; int D = 2; int E = 25; E logo seguido fazer o printf(" %d ", ( (A>&&(C==D)); tal como lhe falei antes. É só prestar atenção se da 1 ou zero. Falou?
  18. vangodp

    Vetor

    #include <stdio.h>int main () { int contador = 0; char c[27] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; int n[27] = {0}; char frase[40]; printf("Escriba una cadena de no mas que 40 caracteres en minuscula.\n"); fgets(frase, 40, stdin); while ( frase[contador] != 0 ) { int i; for ( i = 0; i < 27; i++ ) { if ( frase[contador] == c[i] ) { n[i]++; break; } } contador++; } int i; for ( i = 0; i < 27; i++ ) { if ( n[i] != 0 ) { if ( i == 14 ) { //para mostrar la ñ correctamente printf ( "%c: %d\n", 164, n[i] ); } else { printf ( "%c: %d\n", c[i], n[i] ); } } } getchar(); return 0;} Esse programa registra todas as letras e guarda elas no vetor n[], si quiser saber as repetidas são as que tem 2 ou mais letras, as que não são repetidas são as que tem 1 só letra, é só modificar ele para o seu propósito.
  19. vangodp

    Criar Biblioteca em C

    normalmente as funções vão em arquivos.c ou Cpp, porém não há uma regra definida para isso. O que te esta acontecendo é que o programa esta falando que você definiu 2 vezes essa função fatorial, uma embaixo de main e outra no arquivo nova.h. O problema eu acho que você não esta entendendo como funciona um arquivo .h, ele simplesmente é um "copiar e pegar" do texto que se encontra nele, justamente onde você fez o include. Ou seja o programa copia tudo o que esta em nova.h e o pega justamente na linha do #include "nova.h", ai da problema, porque você já tem a função fatorial embaixo do main. Total... redefinição de fatorial. Si você vai mudar a função fatorial para um arquivo.h, tire essa função do arquivo main, e não precisa nem por o prototipo, por que é como si ela estivesse antes de main, o pré processador vai copiar ela lá no inicio como eu falei. No seu caso o correto é: main.c #include <stdio.h>#include "nova.h"int main() { int x = 0; printf ( "\nEntre com um numero: " ); scanf ( "%d%*c", &x ); printf ( "\nResultado: %d", fatorial ( x ) ); getchar (); return 0;} nova.h int fatorial ( int x ) { int resultado = 1, i; for ( i = 1; i <= x; i++ ); { resultado = resultado * i; } return resultado;} Outra coisa... não use conio nunca mais por favor. kkk
  20. lógico que tem kkk você pode mostrar ela completamente com um só loop for. HEIN! haha Não sei si é isso que você quer porém, pense que toda sua vida você foi enganado kkk, não existe matrizes na programação. Por que eu falo isso? Por que a memória do computador ela linear e não bidimensional, então realmente não existe matriz na memória, e por esse motivo você pode usar um só loop for para imprimir uma matriz. A forma de fazer é essa: você cria a matriz lá bonitinha como você quiser e aprendeu normalmente, e na hora do loop for faça: for ( i = 0; i<linha*coluna;i++ ){ printf("%d", matriz [0]); //pode parecer meio loco porém funciona kkkk } ...supondo que sua matriz fosse algo assim: #define linhas 3 #define colunas 4 int matriz [linhas][colunas]; Prova aeow e você vai ver que uma matriz não passa de um vetor camuflado kkkk o anterior vai imprimir dessa forma: matriz[0][0],matriz[0][1],matriz[0][2],matriz[0][3],matriz[1][0],matriz[1][1],matriz[1][2],matriz[1][3],matriz[2][0],matriz[2][1],matriz[2][2],matriz[2][3] porém tudo em linha com um unico loop. ja para imprimir linearmente porém em colunas seria fazer for( col = 0; i < colunas; i++ ){ for( lin = 0; x < linhas; x++ ){ printf( "%d", matriz[lin][col] ); ... Quando você imprime normalmente você faz: for( lin = 0; x < linhas; x++ ){ for( col = 0; i < colunas; i++ ){ printf( "%d", matriz[lin][col] ); ... ...é só mudar a ordem dos for Sobre o: Acho que você se refere a: for( lin = 0; x < linhas; x++ ){ for( col = 0; i < colunas; i++ ){ printf( "%d\n", matriz[lin][col] ); } printf("\n");} Para mostrar ela tal como: 1 2 3 4 5 6 7 8 9 .... Organizada não é isso? Si não for isso, desenhe ela tal como fiz agora, desenhe os números tal como vão entrar, e como você quer eles depois no final, assim eu seu o que tenho que fazer. tipo: //entrada 2 3 5 7 3 6 //saida 2 3 3 5 6 7 //Ou 2 3 3 5 6 7 //ou 2 3 3 5 6 7 Ok? XD Sorte!
  21. prove trocar seu scanf por este scanf("%d%*c",&n). porém concordo com @Math.Pi... Isso ta meio doido mesmo kkkk primeiro que você declara 300 mil e la vai pedrada chars?kkk logo você lê um numero e uma string sei la de que tamanho, e por ultimo você imprime 3 vezes o numero que você leu? WTF! Cuidado com coisas assim kkk Seu scanf ta lendo a tecla enter junto com o numero, e por isso ele "salta" o string "p". com por %*c como falei no scanf o gets funciona bem por que ja não tem lixo no buffer. MAIS ISSO É MUITO DOIDOWWWW FUI!
  22. Mostre seu treinamento pra nos. XD Pode ser que si vemos algo ruim falamos onde você errou.

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!