Ir ao conteúdo
  • Cadastre-se

1freakday

Membro Pleno
  • Posts

    667
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. #include <iostream> #include <winsock.h> using namespace std; typedef class Relogio { private: bool ativo; int segundos;//0.60 int min;//0.60 int hora; public: /* Prototipo vazio */ Relogio(): segundos(0), ativo(false){ } /* Prototipo que ja inicializa */ Relogio(int seg){ iniciar(seg); } /* Adiciona ciclo de segundo */ void ciclo(){ if(!ativo){ cout << "Relogio inativo!" << endl; return; } if(segundos+1 >= 60){ segundos=0; min++; } else segundos+=1; if(min >= 60){ segundos = 0; min = 0; hora++; } } /* Inicia em 'seg' */ void iniciar(int seg){ segundos = seg; ativo = true; } /* Reseta 'seg' e pausa */ void parar(){ segundos = 0; ativo = false; } /* ... */ void pausar(){ ativo = !ativo; } /* Imprimir o relogio */ void mostrar(){ cout << "Timer: "<< hora << ":" << min << ":" << segundos << endl; } }Relogio; int main(){ Relogio *rel = new Relogio(0); while(1){ system("cls"); rel->ciclo(); rel->mostrar(); Sleep(1000); } } Nenhum mistério quanto a isso. P.S: Sem threads, você só poderá manipular o relógio, nada mais.
  2. Tem como postar parte do código? Pois o printf pode ser usado de várias formas, como: printf("ABCabc",...);
  3. Bom dia, as bibliotecas usadas: winsock.h e iostream(ou stdio.h), no seu caso. 'Parsing' é um algorítimo para separar determinado conteúdo de um conteúdo mais amplo, a partir da análise sintática. Ele tem a finalidade de tornar possível a separação de dados de um determinado local sendo arquivo, site, etc., e assim é possível armazenar em uma estrutura de dados. Segundo Exemplo: Temos um programa que adicionada sites ao banco de dados, a partir de um arquivo de texto, com os seguintes dados: 1 [BeginSite] 2 AddSite:'www.google.com' 3 AddSite:'www.etc.com' 4 AddSite:'www.blabla.com' 5 [EndSite] Veja, temos um arquivo de dados com 5 linhas, mas esses dados ainda estão irregulares, pois eles não vão se auto adicionar no banco de dados. Precisamos utilizar um parser para determinar o que adicionar no banco de dados. Portanto, na linha 1 estamos informando que iremos começar a adicionar os dados de sites, e na linha 5 finalizamos a adição de dados, e o parser pode voltar a descansar na matrix. Nessas 2 linhas(1 e 5), o parser vai buscar pelo caractere [ , e verificando com um vetor cheio de códigos pré-definidos, e assim é possível identificar que tipo de argumento é esse. Exemplo em C: const char *codigos[] = {"[BeginSite]", "[EndSite]", "AddSite"}; //...segmentos //na linha 1 if(strcmp(linha, codigo[0]) == 0){ //BeginSite encontrado - começar a adicionar sites } //na linha 5 else if(strcmp(linha, codigo[1]) == 0){ //EndSite encontrado - finalizar adição de sites } Na linha 2,3,4 temos uma variável chamada AddSite, ela sera responsável para 'dizer' ao parser quando vamos adicionar um site no banco de dados. Após AddSite temos dois símbolos importantes para a logica, que é ':'(dois pontos), que separa a variável AddSite, do resto da linha. E temos ' (apostrofo), é usado para destacar o valor da variável AddSite, no caso destaca o dado em si, o site a ser adicionado, o único que precisamos. Resumindo, nosso parser tem que passar nas seguintes etapas: 1 - Identificar onde começa as variáveis AddSite ( começa a partir de BeginSite) 2 - Procurar uma variável AddSite 3 - Procurar o site da variável AddSite, na linha selecionada (www.google.com) Depois, os dados recebidos são enviados para uma struct, ou em qualquer banco da dados. P.S: Lembrando que BeginSite, AddSite, etc, são informações fictícias, elas não são especiais, são apenas texto em um arquivo. Podendo ser substituídas por qualquer palavra. Eu não vou ficar enchendo de texto, por que a prática vale 1000 linhas, enfim, o parser se resume a apenas obter algum dado de um texto.
  4. Boa noite, como disse agora a pouco em outro tópico, é necessário que você poste algo seu, um código para podermos lhe ajudar, sem isso, ainda mais que é um TCC, fica complicado para nos ajudar a te ajudar() Acredito que você precisa planejar, e não apenas supor utilizar determinada linguagem, escolher a linguagem é fundamental para continuar o planejamento, se não você ira ficar estagnado. Portanto, se for utilizar C, você pode utilizar um sistema simples no console (não há GUI em C), para cadastrar as informações no 'sistema', no cadastro ha várias opções para adicionar os dados do malote, com struct é possível salvar os dados, até mesmo em uma arquivo bin, para mais tarde recuperar tais informações. No quesito de selecionar dois conteúdos para inserir como parte do conteúdo do malote, você pode previamente, mostrar uma lista já criada e padronizada, para selecionar vários items dessa lista. Antes de qualquer coisa, desculpe se não postei nenhum código como exemplo, pois não sei qual seu objetivo, muito menos tenho autorização para tal. Enfim, usando uma estrutura de dados, como struct, é possível salvar os dados, e então você cria as funções essenciais para cadastrar/remover/mostrar os conteúdos do malote, não há muito segredo na hora de fazer, o problema é o planejar.
  5. Boa noite, então, primeiro você precisa mostrar algum código, antes de lhe ajudarmos, se não estamos limitados a apenas um texto chato e que não ajuda tanto quanto um código exemplar. Também precisamos saber o que você já sabe, pois podemos lhe fornecer um conteúdo que possa ser fácil para completar a atividade e principalmente ser compreendido. Minha sugestão é utilizar uma matriz para armazenar as informações dos barcos, como: int mapaTotal_Jogador[3][3]={{1,1,1}, {0,2,2}, {3,0,0}}; //0 = Local vazio //1 = Navios porta avioes //2 = Navio medio - 2 casas //3 = Navio pequeno - uma casa //Nas coordenadas (y,x) ou mapaTotal_Jogador[y][x] : //(0,0) + (0,1) + (0,2) esta o porta avioes(1) //Em (1,1) + (1,2) esta o medio(2) //Em (2,0) esta o pequeno(3) Se o usuário escolher a coordenada certa, ele pode acertar um navio, caso contrario é feito outras tentativas. Na logica do acertar o navio, eu recomendo alterar o valor no mapaTotal_Jogador, para um valor especifico, como 4, onde você, identifica se foi afundado ou não, na hora de mostrar o mapa na tela.
  6. Boa noite, sim é possível, e também será complicado. Dessa vez não vou apresentar códigos. Digo a você, como também disse a outro usuário, o qual queria um código para obter endereço de um CEP, seu código seria semelhante ao dele. A unica diferença está no parser, pois a maior parte do conteúdo de uma pagina de site é escrita em HTML, e seria aonde você tem que buscar a área do texto, tal área deve ser determinada antes de se obter a pagina pelo socket. Assim você pode cortar o texto para salvar em um arquivo .txt, o único problema, é que um site como o bbc, estão sempre mudando, então você sempre precisa alterar o parser, para não ficar dando problema. Exemplo de um site: <html> ... header <body> <h1> Noticia ABC </h1> ... area com o conteúdo da noticia </body> <html> Na parte verde, é o local onde sera feito a separação da noticia selecionada, do restante do site, com um parse simples, como um for, você pode obter o titulo Noticia ABC e depois você pode obter o resto da noticia, geralmente localizada em <p> ou <div>(Use um navegador para verificar o código de fonte do site) Enfim, você utilizara apenas um socket para a comunicação com o site, stdio(ou iostream para c++) para funções padrões, e talvez malloc se necessário. Nada mais que isso. Segue o tópico do outro usuário citado acima:
  7. Muito bom @isrnick , uma ideia, é que nas questões é preciso mostrar os valores positivos, você poderia colocar um printf nesse segmento: if (numero > 0){ contador = contador + 1; soma = soma + numero; printf("Numero Positivo: %d\n", numero); //aqui } @Rafael Nicolai Você está usando contador=+1; e contador=-1; de forma errada, o operador deve vir antes do simbolo =, se não você esta adicionando o valor 1 ao contador ou o valor -1; Use: contador+=1;//Soma o valor do contador com 1 contador-=1;//Subtraí o valor do contador com 1 Mas você esta no caminho certo! Como o @isrnick disse, você não precisa usar vetor, e sim juntar todas etapas em 1, e usar apenas uma variavel(float no caso).
  8. Sim, você esta certo, mas algumas pessoas devem compreender uma função, antes de aperfeiçoa-la, se ninguém recomendasse fflush, ninguém saberia de sua existência, e não haveria tantas resoluções, é claro que não é tão recomendado para programadores avançados, já que só trocar de scanf("%d", &num); para scanf(" %d", &num); ja resolve o problema.
  9. Muito bom, acredito que tudo foi resolvido, até tentei dar uma editada no código, mas acho que já tá otimizado o suficiente, segue minha edição, créditos APENAS de @Gustavo Andretto: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define REGISTRO_TAM 30 typedef struct registro { char nome[30]; float nota[2]; float media; } registro_t; void mostrar_menu(void); void inserir(registro_t*); void mostrar(registro_t*, int); int main(void) { registro_t vetor[REGISTRO_TAM]; memset(&vetor[0], NULL, sizeof(vetor)); int num = 1; while(num) { mostrar_menu(); //int num; recriado a cada 'volta' scanf("%d", &num); switch (num) { case 1: inserir(&vetor[0]); break; case 2: mostrar(&vetor[0],2); break; case 3: mostrar(&vetor[0],3); break; case 0: break; default: printf("TENTE NOVAMENTE"); } } return 0; } void mostrar_menu(void) { fflush(stdin); printf("\nCADASTRO DE ALUNOS\n"); printf(" 1 - Para adicionar alunos\n"); printf(" 2 - Para mostar nomes e medias\n"); printf(" 3 - medias maiores que 7\n"); printf(" 0 - Sair\n"); } void inserir(registro_t *vetor) { for (int i = 0; i < REGISTRO_TAM; i++) { if (strlen(vetor[i].nome) == 0) { printf("Entre com o nome do aluno e suas notas\n"); scanf(" %s %f %f", vetor[i].nome, &vetor[i].nota[0], &vetor[i].nota[1]); vetor[i].media = (vetor[i].nota[0] + vetor[i].nota[1]) / 2; break; } } } /* reutilizar função flag 2 = mostrar nomes e medias flag 3 = mostrar medias maiores que 7 */ void mostrar(registro_t *vetor, int flag) { printf("\n-------------\n");//para separar os resultados for (int i = 0; i < REGISTRO_TAM; i++) { if (strlen(vetor[i].nome) != 0) { if(flag == 2){ printf("\n Nome do aluno(%i): %s",i, vetor[i].nome); printf("\n media do aluno: %.2f\n\n", vetor[i].media); } else if(flag == 3 && vetor[i].media > 7){ printf("Media do Aluno(%i): %f\n",i, vetor[i].media); } } else break; } printf("-------------\n"); }
  10. Boa tarde, segue uma série de instruções para montar seu código. Uma dica antes: é sempre bom separar as etapas que estão na questão, facilita a montagem da logica do código. Segue: 1 - Entrada de 6 valores Nessa etapa você já deve ter um vetor de [6] (0...5) para armazenar os valores. Use um loop for para facilitar a estrutura do código, e otimizar. Caso não puder, tente organizar a entrada. Depois de declarar o vetor, você mostra uma mensagem pedindo o numero e usa o scanf(const char *,...) para armazenar no vetor. Se não puder usar for: scanf... vetor[0] = numero; scanf... vetor[1] = numero; ... 2 - Imprimir valores positivos Nessa etapa você precisa usar uma série de if (melhor usar for e if), para verificar se o índice x do vetor(vetor[x]) possui um valor positivo, sendo que o só o if verifica isso, e no caso de ser negativo, você usa o printf para mostrar o numero. if(vetor[0] > 0){ //positivo - mostrar numero } if(vetor[1] > 0){ //positivo - mostrar numero } //e assim vai... 2 - Imprimir média de valores positivos Nessa etapa você precisa usar uma série de if (melhor usar for e if), para verificar se o índice x do vetor(vetor[x]) possui um valor positivo, você usa uma variável para somar todos valores positivos, e no final você cria a média, subtraindo pelo numerador 6. Ex: //Media de 2 numeros positivos int mediaFinal = 0, vetor[2]; if(vetor[0] > 0){ mediaFinal+=vetor[0]; } if(vetor[1] > 0){ mediaFinal+=vetor[1]; } mediaFinal=mediaFinal/2; P.S: Como você não mandou nenhum código, nem nada, não posso lhe fornecer nenhum código, portanto, posso lhe oferecer um começo.
  11. Segue o código, acredito que no seu há algum erro: #include <stdio.h> #include <math.h> typedef struct{ int x; int y; }TPoint; int distancia(TPoint A, TPoint B) { return(sqrt((B.x-A.x) + (B.y-A.y)));//Esse calculo nao esta correto } int main(void) { int d; d = distancia((TPoint){0,0}, (TPoint){100,100}); //<--- magica feita por isrnick printf("A distancia é %d",d); }
  12. //Como seu typedef da struct é TPoint, você precisa declarar um objeto a partir desse type. //Como: //TPxy = struct type //TPoint = struct object typedef struct TPxy{ int x; int y; }TPoint;
  13. @Relry PeSan Essa função não é instável? Testei aqui a um tempo e não funcionou...
  14. Um pouco mais de simplificação: #include<stdio.h> #include<locale.h> int main() { //exercicio 6 setlocale(LC_ALL, "Portuguese"); float V0, H[10], g = 10; //Entrada printf("Insira a velocidade inicial do corpo em m/s:\n"); scanf("%f", &V0); //Já calcula e imprime(saida) printf("A tabela é: \n"); //Lembrando que i = 0 ja seria usado em H[i], então essa logica é possivel for(int i = 0; i < 10; i++, H[i]=(V0*(i+1))-(g * (i+1) * (i+1))/2){ printf("%f\n", H[i]); } }
  15. @MassakiMsk ignora o scanf, pois como ja há dados na entrada do buffer do sistema(stdin), o sistema fica enviando os mesmos dados para o scanf, então é preciso limpar o stdin antes de usar o scanf novamente.
  16. Tenta usar continue para retornar ao inicio do loop. Ex: //dentro do while... system("cls"); fflush(stdin); printf("Separador de Unidades:\n\n"); printf("Escolha um numero de 1 a 9999: "); valor = scanf("%d", &num); if(valor==0) { printf("\nValor Invalido!\n"); system("pause"); continue; } //etc...
  17. 1freakday

    exercício em c#

    @xkROOS para receber uma resposta mais rápida, sempre poste seu código, mesmo que rascunho, pois é contra as regras "dar o peixe pronto".
  18. Boa noite, então pelo que li no seu texto, vou dar minha opinião, não precisa considera-la . Então parece que você ta sem rumo, um pouco desnorteado, percebi que você falou, falou, falou, "criou desculpas", mas não senti que você esta tão empolgado com a programação em si, parece que você quer mais é praticar certo conhecimento em alguma área de TI. Portanto como resolver isso? Não é simples, pois perceba, você já tem 30 anos, e ainda não está na área e como você mesmo disse: " Eu desconheço completamente o mercado de TI ... ". 1 - Acredito que você pode começar a criar metas e submetas, para alcançar os objetivos da sua vida, seja programar, encontrar um curso que gosta semana que vem, trabalhar em uma empresa perto de você, etc.. Assim se você fazer alguma entrevista, e o entrevistador, pergunta-lo, você planeja seu futuro ? Sua resposta vai ser absolutamente sim, e dai já vai garantir maior confiança de tal. Pois "Planejamento é tudo que nos difere daqueles que dão desculpas em abstrato. Os famosos procrastinadores" 2 - Após ter um planejamento, seja de longo ou médio prazo, defina em qual área deseja atuar, pois eu sempre digo: "A vida não é cheia de Bill Gates e Steve Jobs, eles criaram a própria empresa, e mudaram o mundo, mas você não vai mudar o mundo tão fácil assim, não do dia pra noite, se fosse fácil, pra que trabalhar?". Então escolha uma área que lhe da 'prazer', eu vi você mencionar que tem conhecimento em programação, então creio que é bem possível que é essa área que deseja atuar. Comece a se envolver. 3 - Pesquise sobre a área, o salário, fique sempre informado, mas não se limite a apenas uma categoria, expanda seu horizonte, feito isso, já tá na hora de começar a estudar! SIM ESTUDAR, a vida não é feita de informações de esquina, você estuda, aprende e aplica/ensina determinado conhecimento. 4 - Para discernir entre os materiais reais ou irreais, você precisa aplicar o conhecimento que você adquiriu, ora, "se julgar a capacidade de um peixe subir uma arvore, o peixe não iria passar a vida achando que é *****"? , então se tal conhecimento não é real, uma inverdade, você saberá! 5 - Crie sempre cronogramas, relacionados as suas metas, atinja todos seus objetivos, e seja feliz, afinal, é para isso que você foi criado, se assim desejar.
  19. Na verdade não muda a lógica, mas como o sistema esta passando de uma variável char* para string é bom que ele reconheça esse type, pois string já é uma definição de c++ e não c. Mas se você retirar tal cast não vai mudar nada.
  20. Teste esse código( @MassakiMsk mudei de (char) para :(char *));
  21. Boa noite, não entendi muito bem sua Struct de pilha da musicas, não seria usado char Musicas[N] em vez de : int Musicas[N]; Pois você ta querendo usar int e o int é usado apenas para inteiros(numeros) e a função ImprimeMusicas(); esta imprimindo esses numeros. Troque esse int Musicas[N], por vetor de string, e armazene os nomes das musicas nele, simples.
  22. Olha, em varios metódos que conheço, não há muitas opções que não levem a gambiarras, porém é possível sim obter uma tecla que permite sair do jogo, porém o CTRL+C ja faz esse trabalho. Nas funções mais usadas tem o 'signal', você poderia utilizar para capturar teclas que informam ao sistema para fechar o console(programa), mas ele captura as teclas básicas como CTRL+C, etc, não sei se captura ESC. Enfim, com o signal, você poderia desviar a saída do programa, para uma determinada função. Outra alternativa seria usando uma thread que captura as teclas, e quando ela identificar que foi apertado ESC, você poderia identifica-la e sair do jogo. Exemplo de thread: #include <stdio.h> #include <conio.h> #include <windows.h> bool sair = false; int in = 0; //Captura ESC e Avisa... DWORD WINAPI thread(void* data) { while(1){ in = getch();//Armazena entrada if(in == 27){// 27 é ESC em ASCII in = 0; printf("ESC Apertado!\n"); sair = true;//flag para sair } } return 0; } int main() { HANDLE th = CreateThread(NULL, 0, thread, NULL, 0, NULL); while(!sair){ //nesse while é usado qualquer código if(in){//Enquanto nao for ESC vai receber os dados printf("%c\n",in); in = 0;//limpa entrada } } } Mas o problema dessa alternativa é que você precisa criar uma lógica de quando usar o thread, caso contrário, você vai perder dados para ele, quando você quiser usar scanf ou gets na função principal.
  23. Enfim, dei mais uma olhada e acho que agora ta tudo certo, o problema era devido a geração de cartas, onde você sempre escolhia as coordenadas que não fossem iguais, como x1 != x2 e y1 != y2, ou seja, se uma das duas forem diferentes, a coordenada ja não igual, portanto não precisa usar E mas sim OU '||'. A lógica ta no código: #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #define SIZE 6 void game (char deck[][SIZE]);//Execução do jogo void generate (char deck[][SIZE]);//Gerar cartas void table (char matrix[][SIZE]);//Mostrar cartas void request (char printable_deck[][SIZE], char deck[][SIZE]);//Operacao do jogador int main() { setlocale (LC_ALL, "Portuguese"); srand ((unsigned)time(NULL)); char deck[5][SIZE]={}; //Baralho que conterá as cartas game(deck); //Chama a função que dá início ao jogo return 0; } void game(char deck[][SIZE]) { char printable_deck[5][SIZE]={}; //Matriz que oculta as cartas generate (deck); table (deck); system ("pause"); system ("cls"); table (printable_deck); request (printable_deck, deck); } void generate (char deck[][SIZE]) { char cards[15]={'A','E','I','O','U','a','e','i','o','u','&','<','>','?','@'}; //Cartas disponíveis no jogo int n, x1, y1, x2, y2; for(n = 0; n < 15;){ x1=rand()%5; x2=rand()%5; y1=rand()%6; y2=rand()%6; if (deck[x1][y1]== 0 && deck[x2][y2]== 0) { //X1 = 2 , X2 = 2 //X1 = X2 //Y1 = 2, Y2 = 2 //NESSE CASO NÃO É CONTINUADO //MAS SE UM DOS DOIS FOREM DIFERENTES, JÁ NÃO É O MESMO LOCAL if (x1!=x2 || y1!=y2) { deck[x1][y1]=cards[n]; deck[x2][y2]=cards[n]; n++; } } } } void table (char matrix[][SIZE]) { int i, j; printf ("\n 1 2 3 4 5 6\n\n"); //Indice colunas for (i=0; i<5; i++){ printf (" %d ", i+1); //Indice cartas for (j=0; j<SIZE; j++) printf ("[%c] ", matrix[i][j]); printf ("\n\n"); } } void request (char printable_deck[][SIZE], char deck[][SIZE]) { int i, m, n; int x[2], y[2]; //O laço é de apenas uma tentativa?! for (i=0; i<=1; i++) { printf ("Qual a localização da carta desejada?" \ "\nLinha: "); scanf ("%d", &m); printf ("Coluna: "); scanf ("%d", &n); x[i]=m-1; y[i]=n-1; printable_deck[m-1][n-1]=deck[m-1][n-1]; system ("cls"); table (printable_deck); } if (deck[x[0]][y[0]]!=deck[x[1]][y[1]]) printf ("\n\nVocê errou! Tente novamente."); else { printf ("Parabéns! Você acertou.\n\n"); request (printable_deck, deck); } } crédito ao @MassakiMsk
  24. ~Você pode receber os dados via char, portanto, não poderá efetuar tais operações matemáticas com letras, mas se você quiser pode converter um char em um int, contanto que seja numero, usando funções como atoi(converte letra para inteiro) e use isdigit(para verificar se determinada letra é um numero)

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!