Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. vangodp

    Ler 20 Inteiros

    Para entender arrays você vai ter que entender o conceito de ponteiros. Recorde isso... Um ponteiro é um tipo de variável que aponta onde esta outra variável. Que quer dizer com isso de que aponta outra variável? Toda variável ela é alojada na memória RAM do computador certo? Como o computador faz para encontrar elas? Todas, repito TODAS variáveis, tem uma direção na memória, é um numero que indica em que parte da memória esta essa variável, esse numero é o que guarda um ponteiro, por isso se diz que ele(O ponteiro) aponta outra variável, porque ele guarda a direção de memória de outra variável, si eu souber a direção de uma variável eu posso manipular ela. Então... Agora que tomamos uma rápida classe sobre ponteiros, você deve saber que um array é um conjunto de variáveis do mesmo tipo armazenado na memória de forma consecutiva, ou seja que cada variável vem a continuação da outra, estão todas juntas, são como vizinhos. O mais interessante é que a primeira variável do array é apontada por um ponteiro implícito, ou seja você não vê ele de forma clara ou transparente, porem ele ta aí, de outra forma não podíamos acessar a nenhum dos valores do array. um array é... //Si eu criar um array tipo int lembre que será um grupo de variáveis todas juntas e que será apontado por um array ponteiro "invisível" que aponta a primeira posição. int p[5]; //p é um ponteiro que inicia apontando a primeira das variáveis p -> [ ][ ][ ][ ][ ] Isso é um mero desenho ilustrativo, serve para ter uma ideia do que é um ponteiro, si eu quero ter acesso a primeira casinha das 5 existentes eu devo fazer p[0]. Então... p[0] é como si fosse: p -> [ ][ ][ ][ ][ ] Ai vem a pergunta.... Como faço para acessar a 3º casinha? É fácil, você faz p[2]! Pera ai... p[2] é a 2º não a 3º? Não!! sempre começamos a contar de zero, então p[0] é a primeira, p[1] é a segunda, e o p[2] é a terceira casinha. Em outras palavras p[2] é [0][1] p ->[2][3][4]. Entendeu? Por isso seu código não funciona, você tem 5 variáveis(nesse caso) e você não está alternando entre elas por que você não esta usando o "índice" que nada mais é que esse numero [x] que vai entre as [] logo depois de p para ir trocando de variável. seu problema é que você faz "p" quando deveria fazer "p[x]"(X porque pode ser qualquer numero, 0, 1, 3...). Então vamos ver seu problema solucionado. #include<iostream> int main(){ float numeros[5]; int i; for ( i = 0; i < 5 ; i++ ) {//i deve começar de zero sempre!!! std::cout << "Entre com o numero " << i+1 << " : " ; // si quiser ver como 1,2,3... e nao como 0,1,2... engane o usuário somando +1 na hora de mostrar o i então si estiver na posição zero, ao ter mais um somado ao i, vai mostrar 1 ;) std::cin >> numeros[i]; //Isso é o que te faltou simplesmente... O "[i]" índice. } std::cout << " Numeros Digitados " << numeros[0] << std::endl; //primeiro é a posição zero sempre!! std::cout << " Numeros Digitados " << numeros[1] << std::endl; std::cout << " Numeros Digitados " << numeros[2] << std::endl; std::cout << " Numeros Digitados " << numeros[3] << std::endl; std::cout << " Numeros Digitados " << numeros[4] << std::endl; //o ultimo é o 4, porque de 0 a 4 temos 5 números que foi o que vc declarou, não existe a posição[5], si vc acessar a essa casa vc saiu de rango, isso é muito ruim, não faça isso ok. Por isso dentro de for acontece i < 5, porque i nunca deve ser 5, i só vai incrementar enquanto seja menor que 5, até ser 4, quando ele for 4(menor que 5) já não precisamos incrementar mais si não saímos de rango. sinto muito alargar tanto, porem é o lugar correto para comentar. std::cout << "\n\n Outra forma de imprimir" << std::endl; for ( i = 0; i < 5 ; i++ ) {//i deve começar de zero sempre!!! std::cout << " Numeros Digitados " << numeros[i] << std::endl; // É menos código que na versao anterior nao é? =D } return 0; }Pode que o conceito de ponteiros seja muito avançado para seu nível atual, relaxe, não queime a cabeça com isso, só não esqueça de usar o índice para trocar entre variáveis de um array, porque você tem muitas variáveis e não uma só. Ponteiros acho que é uma das armas mais poderosas da programação, porem muitos tem dificuldade de aprender o que é. Quando chegar lá e sua cabeça começar a queimar, lembre que um ponteiro nada mais é que uma variável que aponta outra variável, ou seja que guarda a direção de outra variável, isso vai simplificar muito aquele montão de teoria que você vai aprender sobre tema de ponteiros.
  2. A ver si entendo... você esta desenvolvendo um programa para uma empresa e não sabe como vai fazê-lo, é isso? E como te deram esse trabalho? Preciso de um. kkkkk você precisa aprender a manipular o tempo em C++ ou C. Para C++ si não te importa usar C++11 você pode usar std::cronos, caso contrario você pode usar time.h (Em C++ ctime). Para mas informação ler aqui: http://pt.cppreference.com/w/cpp/chrono Ademais você vai precisar de uma base de dados para gestionar tudo isso. Para poder controlar a validade de um produto você precisa saber data de fabricação por exemplo, e medir o tempo passado. É um trabalho bem grande isso. da uma olhada aqui também: http://www.cplusplus.com/reference/ctime/ Vou te explicar assim por encima como vai isso de manipular o tempo na programação já seja essa em C, C++ ou qualquer outro linguagem. você precisa saber o que é Era UNIX, basicamente é o tempo em segundos que passou desde 1 de janeiro de 1970 a meia noite. Com a função time() que pertence a biblioteca time.h(ctime em C++), obtemos o tempo em segundos, que devemos guardar em uma variável do tipo time_t, que será algum tipo de inteiro super grande sem signo que vai guardar em segundos quanto tempo passou desde 1 de janeiro de 1970 até agora ou uma data que você estipular usando uma estrutura "tm". Sendo assim um exemplo seria mais fácil de entender pode ser... time_t timer; // variável que vai guardar o tempo em segundos que passou desde 1 de janeiro de 1970 a meia noite time(&timer); // A função time é a função que guarda o tempo em timer.já temos em segundos o tempo passado em segundos desde 1970 como falei, porem isso ainda não é suficiente. Agora vamos precisar saber o tempo em segundos desde 1970 até a data de criação do produto, para isso use a estrutura "tm", isso serve para calcular algo como tempoPassado= timer - produto, que vai gerar a diferença entre as datas em segundos desde uma a outra para saber si passou a validade. Logo você precisa saber quanto tempo é em segundos a validade do produto para saber si o tempoPassado é maior que o prazo de validade. Para fazer tudo isso você tem que praticar com as funções de time.h ou usar a cronos do c++11. Espero que tenha entendido, é um tema não muito complicado, porem você deve conhecer essas funções. Aqui você pode ver um exemplo simples usando a função time e a função difftime junto com a estrutura "tm" para calcular a diferença, esse exemplo é praticamente quase tudo o que você precisa para seu calculo, e não só esse si não qualquer outro. Aprenda esses mecanismos. ;)
  3. #include <iostream> using namespace std; int main(){ string data = "21/02//1977"; string subString = "//"; int pos = NULL; if ( (pos = data.find( subString )) != NULL ) { cout << "Encontrado \"" << subString << "\" na posiçao numero: " << pos+1 << endl; }else{ cout << "Nao foi encontrado \"" << subString << "\" na data." << endl; } getchar(); return 0; }
  4. Sim... você pode fazer de mil formas diferentes, C++ é diferente de C, você pode usar os mecanismos de C ou as 1000 formas de fazer a mesma coisa em C++. Tudo é questão de praticar e conhecer as funções de ambos linguagens. Particularmente eu gosto de usar C++ por que tem solução para tudo. por exemplo str::find que devolve si tem 2 barras"//" no texto ou 3.... Si não encontrar devolve 0, si encontrar devolve um ponteiro a essa primeira barra. Então é fazer um if ( data.find("//") != NULL ) {/*Encontrado barra dupla*/}. O que seria equivalente a falhar a leitura. Ler sobre find aqui http://www.cplusplus.com/reference/string/string/find/ A função membro find() é só uma das "mil" possibilidades que tem C++, você tem que conhecê-las as funções que estão disponíveis para C++ para trabalhar com elas, si você a usar al menos uma vez essas funções você sabe do que são capazes, assim que pratique muito.
  5. NULL digamos que é um tipo de dato genérico, depende da variável que vai adotar ele. Tipo si fizer int n = NULL; então n vai ser n= 0, porque se trata de um inteiro. Si for uma variável tipo bool, seria bool b = false, e si fosse char, seria formatado a nulo '\0'(primeira letra da tabela asc2). Em outras palavras é a mesma coisa que 0, ou seja para dar um valor inicial. Nos ponteiros, quando criamos um, se recomenda que esse aponte a NULL, ou seja a "nada", para assim evitar acidentes.
  6. Por que incluir tantas bibliotecas si com uma só resolve? #include<stdio.h> int main(){ int a[13], i, item, centinela = 0; printf ( "Entre com os dados na matriz\n" ); for ( i = 0; i < 13; i++ ){ scanf ( "%d%*c", &a[i] ); } printf ( "Entre com o elemento a ser buscado\n" ); scanf ( "%d%*c", &item ); for ( i = 0; i < 13; i++ ){ if ( item == a[i] ){ centinela = 1; break; } } if ( centinela == 0 ) printf ( "Elemento não encontrado\n" ); else printf ( "Elemento encontrado na posicao=%d", i ); getchar(); return 0; }Não saia incluindo tantas bibliotecas, só devemos incluir si realmente fazem falta. Como você pode ver com uma apenas fizemos tudo.
  7. #include <iostream> #include <time.h> #include <stdlib.h> int main() { srand(time(NULL)); int jogadas; std::cout << "Digite o Numero De Jogadas " ; std::cin >> jogadas; for ( int i = 0; i < jogadas; i++ ) { std::cout << "Numero: " << (rand() % 6 + 1) << std::endl; } std::cin.ignore(); return 0; }
  8. vangodp

    Ler 20 Inteiros

    tem... Isso se chama arrays, ou vetores. Busque no google "vetores em C++" ou "vetores linguagem C".
  9. ok.. me alegro de ter ajudado. Ainda que não sei como kkk
  10. Vamos ver... #include <stdio.h> #include <stdlib.h> int main (){ int m[10][10] = { { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 }, { 11,12,13,14,15,16,17,18,19,20 }, { 21,22,23,24,25,26,27,28,29,30 }, { 31,32,33,34,35,36,37,38,39,40 }, { 41,42,43,44,45,46,47,48,49,50 }, { 51,52,53,54,55,56,57,58,59,60 }, { 61,62,63,64,65,66,67,68,69,70 }, { 71,72,73,74,75,76,77,78,79,80 }, { 81,82,83,84,85,86,87,88,89,90 }, { 91,92,93,94,95,96,97,98,99,100 } }; int contadorSaltos = 0; int acumulador = 0; int iniciarImprimir = 0; int i; printf( "%d", m[0][0] ); for ( i = 0; i < 10*10; i++ ){ if ( i == contadorSaltos ){ contadorSaltos += 3; if ( iniciarImprimir == 1 ){ printf( "=%d\n%d", acumulador, m[0][i] ); acumulador = 0; }else{ iniciarImprimir++; } }else{ printf( "%+d", m[0][i] ); } acumulador += m[0][i]; } getchar(); return 0; }Serve isso?
  11. Ficar checando cada caso errado que existe acho que é muito mais custoso que fazer o mesmo para quando esteja correto. Agora é coisa sua si quer faze-lo ou não. Poder sim se pode, com c++ você pode tudo.
  12. De nada companheiro, só espero que você resolva seu problema. Si tiver muita duvida me adicione no skype e te poderei ajudar melhor, é que as vezes por fórum é meio difícil. Lá no Skype me chamo igual.
  13. conforme você descreveu seu problema você tem que armazenar DD/MM/AAAA em uma ou mais variáveis para poder validar elas. Porem acho que você não se decide na forma correta de armazenar elas. você não pode comprovar as si as barras estao invertidas com um for si DD/MM/AAAA for inteiros e chars, para isso você tem que usar um string. Por outro lado você pode separar tudo em variáveis de forma que logo na entrada fique: int dia = DD char barra1 = / primeira barra mes = MM char barra2 = / segunda barra int ano = AAAA Nesse caso não é possível usar um loop for já que todas estão separadas, não da para usar for. Outra forma de fazer é guardar inteiro o DD/MM/AAAA em um string como no segundo exemplo que eu coloquei. Tipo: string dataAtual = "DD/MM/AAAA"; Mas aí o problema é que isso são todos chars agrupados baixo uma mesma variável (string), na qual sim é possível fazer uso de um bucle for pois as barras estariam nas posições dataAtual[2] e dataAtual[5]. Então decida-se si a sua entrada é um string ou si prefere tomar todo o grupo como variáveis por separado. Si você se decidir por usar strings, você vai ter muito maios complexidade, pois terá que separar os números das barras, fazer conversões de tipo e mil raios mais. Outra coisa que você não esta levando em conta, é que isso do for não aparece no seu enunciado, ou ao menos eu não vejo... //Escrever um Programa que recebe uma data no formato 'DD/MM/AAAA' (dia/mês/ano), //verifica se as barras estão na posição correta, se o dia está entre 1 e 31 (inclusive), se o //mês está entre 1 e 12 e retorna um valor da seguinte forma: Todos os exemplos que coloquei fazem justo o que você pediu ao principio. Aí eu pergunto.... Que você quer fazer? O que você quer aplicar? O meu código já esta 100% pronto, si a Data não for correta ele não vai tragar não, ele vai dar um aviso "no".
  14. então no for em vez de fazer i++ faça i+=3. exemplo: for( int i = 0; i < TAM; i += 3)... Isso fará saltar de 3 em 3 números. É isso? Pensando bem acho que é i += 2, porque a posição zero soma também não? bom... de toda forma é isso aí, brinque com o 3º parâmetro de for que você encontra a resposta.
  15. #include <iostream> using namespace std; int main () { string data = "21/10/2014"; //2 barras int nBarras = 0; //numero de barras deve ser 2 for( unsigned int i = 0; i < data.length(); i++){ if ( data[i]=='/' ){ nBarras++; } } if( nBarras == 2 ){ //si tiver 2 barras no string mostra ok cout << "Check ok!" << endl; }else{ //...si nao "no". XD cout << "no!" << endl; } cin.ignore(); return 0; }Isso?
  16. introduzir a data normalmente: 12/05/2015 #include <iostream> using namespace std; int main () { int dia; int mes; int ano; char barra1; char barra2; std::string entrada; std::cout << "Digite a Data Nesse Formato DD/MM/AAAA: " ; cin >> dia >> barra1 >> mes >> barra2 >> ano; int levelCheck = 0; ( dia > 0 ) ? levelCheck++ : levelCheck = levelCheck ; ( dia <= 31 ) ? levelCheck++ : levelCheck = levelCheck ; ( mes > 0 ) ? levelCheck++ : levelCheck = levelCheck ; ( mes <= 12 ) ? levelCheck++ : levelCheck = levelCheck ; ( barra1 == '/' ) ? levelCheck++ : levelCheck = levelCheck ; ( barra2 == '/' ) ? levelCheck++ : levelCheck = levelCheck ; if( levelCheck == 6 ){ cout << "Check ok!" << endl; }else{ cout << "no!" << endl; } cout << dia << "-" << mes << "-" << ano << endl; cin.ignore(); return 0; }si você intercalar tipos básicos na hora de ler com cin, ele vai saber exatamente onde tem que ir cada tipo. Como se trada de ler 12/05/2015 você na realidade tem intcharintcharint, então ao fazer cin >> int >> char >> int >> char >> int; o cin sabe exatamente onde vai cada um, isso não funciona com cin >> int >> int porem funciona com cin >> char >> char. Isso é por que no caso do char sabemos que só entra uma letra, si temos 2 letras o cin é suficientemente inteligente como para por cad aletra em um char, porem no caso de int o numero pode variar no tamanho, tipo 0, 12, 12123... Então o cin não sabe como separar ele já que poderia is separado de varias formas como n1=1 e n3=2123, n1=12 e n2=123... Acho que só funciona com 2 chars, floats, doubles, ints, strings... não funciona, só si estiverem intercalados mesmo. Uma função mais potente que cout para isso é sscanf porem nesse caso não acho que seja útil, outras formas é trabalhar com templates e sobrecarga de operadores etc etc. Espero que seja útil o exemplo.
  17. vangodp

    loop infinito

    Isso é normal... você não deu a condição para que o loop pare. for (int qt_cartas=0; qt_cartas=2; ++qt_cartas)Nessa linha não a vejo ao menos essa condição. Em vez disso você colocou qt_cartas=2. Não seria qt_cartas < 2? Olhe o que acontece... prove os 2 for e veja a diferença, quando testar um deixe o outro como comentário. #include <stdio.h> #define LIMITE 20 int main ( void ) { //correto for ( int qt_cartas = 0; qt_cartas<LIMITE; printf ( "%d ", qt_cartas ), ++qt_cartas ); //incorreto //for ( int qt_cartas = 0; qt_cartas=2 ; printf ( "%d ", qt_cartas ), ++qt_cartas ); return 0; } for funciona assim: fo ( inicialização; condição de parada; pós-decremento ) E você o esta usando ele como: fo ( inicialização; asignação; pré-decremento ) Pense nisso... Falta a "condição de parada"
  18. não to entendendo... você se ta explicando muito mal. Conforma você esta falando o que da para entender é que na primeira linha "7 2 0 0 4 1 0 5 4" eu pego o "720" e faço 7+2+0. É isso? Ou é 720+041+ 054?? Em todo caso isso não bate com seu resultado, por isso pergunto. Si nos esclarecer isso podemos te ajudar.
  19. vangodp

    ME AJUDEM :CC

    para fazer isso você tem que imprimir letra por letra ao contrario e usando un for duplo. você estava imprimindo a frase completa ela nunca vai dar a volta usando printf("%s",matriz[x]);O %s imprime ele normalmente nesse sentido ->, fazer que o for vaia al contrario não adianta, você só vai conseguir imprimir a ultima palavra primeiro, depois a antipenultuma e assim sucessivamente até chegar na primeira frase. você entraria: Chocolate é Muito Bom e sairia: Bom Muito Chocolate é A forma mais correta de fazer isso é: #include<stdio.h> #include<locale.h> #include<string.h> #define N_MAX_FRASES 5 //numero maximo de frases int main() { char matriz[N_MAX_FRASES][100], n = 1; int x, i; int ch; setlocale ( LC_ALL, "Portuguese" ); for ( x = 0; x < N_MAX_FRASES; x++ ) { printf ( "Informe o %iº elemento da matriz:", n++ ); scanf( "%99[^\n]", matriz[x] ); //le todos os chars que vc quiser, porem não permite que entre mais de 100 na matriz(99+'\n'=100). O resto fica no buffer e é liberado pelo seguinte scanf. Resultado... Leitura segura e portável! Não existe nenhum outro método mais eficiente, si dizem que sim, te estão roubando o dinheiro!!! while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ); //limpar buffer } for ( i = 0; i < N_MAX_FRASES; i++ ){ for ( x = strlen ( matriz[i] )-1; x >= 0; x-- ) { printf ( "%c", matriz[i][x] ); } printf ( "\n"); } return 0; }
  20. amigo.. você já declarou um double la no começo do main. ou seja isso: double f, P; e isso double f = (double)a*b; você fez double f 2 vezes, esse é o erro kkk Acho que nem faz falta o f. Porque você pode fazer diretamente: #include <iostream> using namespace std; #define imprimir cout<< int main() { int a, b; double p = 256.50; double f, P; imprimir "Altura?: "; cin >> a; imprimir "\nComprimento?: "; cin >> b; cout << "A area do terreno e: " << a*b << endl; cout << "O preço do terreno e: "<< (a*b)*p << endl; return 0; }Sobre o "imprimir"... nem ligue. É brincadeirinha kkk
  21. vangodp

    Pilhas / Palíndromosq

    Tem muitas formas. Depende o que você vai usar, strings (classe) ou C_strings (estilo C). uma bem facil é usar a funçao strrev(). #include <string.h> #include <stdio.h> char palavra[100]; int main() { printf ( "Frase? " ); gets ( palavra ); printf ( "Normal es: %s \n", palavra ); printf ( "inrverso : %s \n\n", strrev ( palavra ) ); }E também você pode fazer que o bucle for conte de traz para frente. É só você fazer algo como: #include <iostream> using namespace std; int main () { string s = "Alo mundo"; for ( int i = s.length()-1; i != -1; i-- ) { cout << s[i]; } cin.ignore(); return 0; }
  22. já sabe... Escreva o programa, utilizando apenas laços de repetição e validando a entrada. 100% boa sorte >_<.
  23. mais eles já tão separados.. não entendo =/
  24. aqui você tem os 3 arquivos junto com um projeto de codeblocks. Tenta compilar, si da problemas avise. ;)
  25. Valeu... Pode deixar. Visitarei seu blog/fórum com certeza. Muito obrigado.
×
×
  • Criar Novo...