Ir ao conteúdo

isrnick

Membro Pleno
  • Posts

    1.558
  • Cadastrado em

  • Última visita

Tudo que isrnick postou

  1. Também pode usar SendInput() para controlar o mouse, incluindo clicar e mover.
  2. Em C++ é fácil, dá pra seguir os mesmos passos do código do @Brazilian student em Python: #include <iostream> #include <vector> #include <string> #include <cmath> using namespace std; int main() { vector<string> heart; string nome = "Amor"; for(int y=39; y>-39; y--){ string linha = ""; for(int x=-39; x<39; x++){ if (pow(pow(x*0.05, 2.0) + pow(y*0.1, 2.0) - 1.0, 3.0) - pow(x*0.05, 2.0)*pow(y*0.1,3) <= 0){ linha.push_back(nome[(x - y) % nome.length()]); } else { linha.push_back(' '); } } if (linha.find_first_not_of(" ") != string::npos){ heart.push_back(linha); } } for (auto lin : heart){ cout << lin << endl; } return 0; }
  3. Outro jeito: #include <stdio.h> int main() { int i, j; for (i=0; i<10; i++){ for (j=0; j<10; j++){ if(i<=j) printf("*"); else printf(" "); } printf("\n"); } printf("\n"); for (i=0; i<10; i++){ for (j=0; j<10; j++){ if(i>=9-j) printf("*"); else printf(" "); } printf("\n"); } return 0; }
  4. @Mauro Britivaldo Posição é relativa ao ponto de origem escolhido para o plano cartesiano XY, você pode escolher qualquer ponto no espaço como origem, escolhendo outro ponto diferente de A como origem as coordenadas do ponto B em relação a esta origem seriam diferentes, o que significa que o vetor de posição do ponto B mudaria, ou seja o vetor de posição de um ponto (como qualquer vetor) depende de 2 pontos: O próprio ponto e o ponto onde está a origem. Note também que na nova origem os vetores u e v não mais seriam equipolentes/iguais ao vetor de posição do ponto B, logo é impossível dizer que u e v pertencem ao ponto B. Aí você vai dizer que na nova origem os vetores u e v pertencem a outro ponto? Como qualquer ponto pode ser escolhido como origem, então u e v pertencem a todos os infinitos pontos do plano? Isso seria o mesmo que dizer que eles não pertencem a nenhum ponto...
  5. Sim, precisa. A "enrolação" se chama rigor matemático. Existe uma definição matemática dizendo exatamente o que é um vetor. Me mostre uma fonte confiável que defina que vetores pertencem a 1 ponto, e que pode-se dizer que "vetor x é um vetor do ponto Y", e que todos os vetores paralelos e de mesma magnitude e sentido pertencem ao mesmo ponto, como você está afirmando.
  6. O operador de comparação == tem precedência sobre o operador lógico &&, então este if não vai funcionar corretamente, imagino que você queria fazer: if ((verde[1] && verde[4] && verde[7]) == HIGH) { vitoria(); // chama a função de vitória } Mas não sei que valor HIGH tem, seria 1? Ou 0? Ou 10?... Então eu preferiria simplesmente fazer: if (verde[1] && verde[4] && verde[7]) { vitoria(); // chama a função de vitória } E você pode fazer ciclos para comparar colunas, linhas, e um if para cada diagonal assim: // Verifica linhas; for(i=0; i<3; i++){ if(verde[i*3] && verde[i*3+1] && verde[i*3+2]){ vitoria(); } } // Verifica Colunas: for(i=0; i<3; i++){ if(verde[i] && verde[i+3] && verde[i+6]){ vitoria(); } } // Verifica Diagonal Principal: if(verde[0] && verde[4] && verde[8]){ vitoria(); } // Verifica Diagonal Secundária if(verde[2] && verde[4] && verde[6]){ vitoria(); } adicionado 12 minutos depois Isso tudo assumindo que os valores guardados no vetor verde são 0 (=falso) quando verde não jogou na posição, e algo diferente de 0 (=verdadeiro) quando verde já jogou nada na posição.
  7. O Vector((3, 2)) da imagem é apenas uma abreviação de Vector((0, 0), (3, 2)), é assumido que o vetor parte de um ponto na origem, logo sempre é necessária a existência de 2 pontos indicando início e fim do vetor para obter um vetor. Nova definição matemática por @Mauro Britivaldo. Publica a tese e fica famoso.
  8. @Matheus Maldi Como só vai guardar int ou char e nunca os dois ao mesmo tempo na struct pode usar uma união. typedef struct { union{ int int_value; char char_value; }; bool is_int; } int_or_char; Para que int_value e char_value usem o mesmo local da memória.
  9. Claramente não é. Se quer definir relacionando pontos terá que dizer que u = . Não há como descrever um vetor com apenas 1 ponto. ?? Não entendi. O vetor v não tem relação alguma com o ponto B.
  10. Então a solução que postei não funciona pois os números podem ter mais de 1 dígito. Mas você tem um problema maior, não há como diferenciar pois caracteres são números, ou seja o caractere 'A' na verdade é o número 65 (consulte a tabela ASCII para ver números correspondentes de cada caractere). Seria necessário usar uma struct com uma flag para indicar se é para tratar como int ou char... #include <stdio.h> typedef struct intorchar{ int i; char ischar; } intc; int main() { intc M[20][20]; M[0][0].i = 'A'; M[0][0].ischar = 1; M[0][1] = (intc){'B', 1}; M[0][2].i = 10; M[0][2].ischar = 0; M[0][3] = (intc){20, 0}; M[0][0].ischar ? printf("%c\n", M[0][0].i) : printf("%d\n", M[0][0].i); M[0][1].ischar ? printf("%c\n", M[0][1].i) : printf("%d\n", M[0][1].i); M[0][2].ischar ? printf("%c\n", M[0][2].i) : printf("%d\n", M[0][2].i); M[0][3].ischar ? printf("%c\n", M[0][3].i) : printf("%d\n", M[0][3].i); return 0; }
  11. Os números sempre tem só 1 dígito? Se sim, então pode converter para o respectivo caractere na hora de imprimir, por exemplo transformar um 7 em um '7' e sempre imprimir como caractere. Pra fazer essa conversão basta somar o dígito ao caractere '0'. printf("%c", M[i][j] < 10 ? M[i][j] + '0' : M[i][j]); Aí tem que se perguntar se existe a necessidade dos dígitos estarem na matriz na forma numérica, pois poderiam já estar como o caractere e não precisaria fazer essa conversão para imprimir.
  12. Veja os 2 vetores u e v no espaço 2D abaixo: Tem 4 pontos no plano: A (0, 0) B (2, 3) C (-2, 0) D (0, 3) Mas os vetores u e v são ambos definidos com: u = 2 i + 3 j v = 2 i + 3 j B é o único ponto em que as coordenadas coincidem com as magnitudes das projeções dos vetores na direção dos vetores unitários i e j . Observe também que o vetor v não tem relação alguma com o ponto B.
  13. A função pow recebe parâmetros do tipo double e retorna um valor do tipo double, mas você está armazenando numa variável int, então ocorre uma conversão de double para int, e dependendo do valor retornado pela função um vai obter um valor diferente no int. https://en.cppreference.com/w/c/numeric/math/pow Por exemplo, digamos que o retorno foi algo próximo de 25 (pois existe uma margem de erro quando se calcula com números de ponto flutuate), como 24.9999995, a parte inteira desse número é 24 então se pegar só isso vai resultar em 24, mas se a conversão é feita arredondando para cima então obterá 25, então depende de como o compilador implementa essa conversão. Então você tem 2 opções: Usar variáveis double ao invés de int, ou então fazer e usar sua própria função para calcular exponenciação de números inteiros.
  14. Lembre-se que a operação de multiplicação nada mais é do que várias somas do mesmo número. (0) E que potenciação são várias multiplicações do mesmo número. Então podemos fazer uma função f(n) tal que: Logo, pode resolver o exercício usando a operação de soma em ciclos (while, for, ou do-while) para ir calculando f(n) somando f(n-1) a sí próprio a vezes, até chegar em f(b) (ou seja quando n=b) obtendo o resultado da potência.
  15. Vetor não é um ponto... Vetor tem direção, sentido e magnitude, enquanto um ponto é apenas uma posição no espaço. O vetor u acima pode ser descrito de forma descomposta na direção dos vetores unitários i, j, k como: E as magnitudes x, y e z das decomposições do vetor u coincidem numericamente com as coordenadas do ponto A no espaço, mas o vetor u não é igual ao ponto A.
  16. struct vetor{ float x; float y; float z; }; typedef struct vetor Vetor; float escalar(Vetor* v1, Vetor* v2); x, y e z representam as magnitudes das projeções do vetor sobre as 3 dimensões X, Y e Z, e calcular o produto escalar é simples:
  17. Com o código indentado corretamente fica mais fácil de ver onde está o erro. O problema é que estava faltando o else para dizer que o com mês menor ou igual a 0 ou maior que 12, ou ano menor ou igual a 0 a data não é válida. #include <stdio.h> #include <stdlib.h> int main() { int dia, mes, ano; printf("*VERIFICACAO DE DATA VALIDA* \n"); printf("\n"); printf("DIGITE UM DIA: "); scanf("%d", &dia); printf("DIGITE UM MES: "); scanf("%d", &mes); printf("DIGITE UM ANO: "); scanf("%d", &ano); if(mes>0&&mes<=12 && ano>0){ if((mes==2) && (dia>0&&dia<=28 &&)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else if((mes==4||mes==6||mes==9||mes==1) && (dia>0 && dia<=30)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else if((mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) && (dia>0 && dia<=31)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else{ printf("%d/%d/%d NAO EH VALIDA", dia, mes, ano); } } else{ //<---Faltava esse else aqui printf("%d/%d/%d NAO EH VALIDA", dia, mes, ano); } return 0; } Ainda está faltando considerar os anos bissextos, quando fevereiro tem 29 dias.
  18. isrnick

    C Algorítmo MDC linguagem c

    Para MDC entre 2 números use o algoritmo de Euclides: int mdc (int a, int b){ int temp; while (b != 0){ temp = b; b = a % b; a = temp; } return a; } E para mais números, pode fazer o mdc do terceiro número com o resultado do mdc entre os 2 números, e continua fazendo isso pega o resultado e faz o mdc com o próximo número, para quantos números tiver.
  19. Sim, como o @Mauro Britivaldo apontou usar %s limita a ler apenas 1 palavra digitada, então se você digitar uma frase (como por exemplo um endereço completo, ou um nome com sobrenomes) não vai servir pois só vai obter a primeira palavra digitada. No caso poderia usar o outro tipo de especificador de string %[ , e usar assim %[^\n] (= ler e guardar qualquer caractere que não seja o caractere nova linha '\n'), assim vai ler tudo até encontrar um caractere nova linha '\n', ou seja pega tudo que tiver até o fim da linha e guarda no vetor de char. scanf(" %[^\n]", endereco);
  20. Coloque um espaço antes do % nos scanfs com %s, para descartar caractere o '\n' (nova linha) e qualquer outro caractere de espaço vazio (espaço, tabulação, etc) que tiver sobrado dos scanfs anteriores na entrada padrão (stdin). E para vetores (como nesses 2 vetores de char do seu programa) não vai & antes do nome do vetor, pois usando o nome diretamente já obtém um endereço de memória. Ex: scanf(" %s", endereco);
  21. Coloque um espaço antes do %c para descartar o caractere '\n' que ficou sobrando do scanf anterior na entrada padrão (stdin): scanf(" %c", &le );
  22. 'f' e 'k' são caracteres e devem ser armazenados em uma variável do tipo char. No seu programa a variável le é do tipo float, corrija isto. E para ler caractere no scanf precisa usar o especificador %c (o especificador %f é para ler números float).
  23. Não testei, mas lendo o código por alto notei esse problema: Você usou gets na hora de pedir para o usuário digitar o nome do jogador, então o usuário pode digitar nome e sobrenome da pessoa, e isso significa que terá 1 espaço no meio do nome, como em "Joao Santos". Então você salva o nome no arquivo fazendo: fprintf(p," %s %s %c %f %i ",i->nome,i->posicao,i->escalacao,i->salario,i->numero); Só que na hora de ler você faz: fscanf(p,"%s %s %c %f %i",name,position,&lineup,&salary,&num) Usando %s para ler o nome, mas como o nome tinha espaço entre Joao e Santos, o nome lido será apenas "Joao", e aí bagunça todo o resto da leitura do scanf pois a posição agora virou "Santos", a escalação agora é a primeira letra da posição, e nem vai ler o salário e o número. Então minha sugestão é: No fprintf escrever os dados no arquivo, use outro caractere para separar os dados que não seja espaço, por exemplo pode usar ponto-e-vírgula ( ; ) para separar, ficando assim: fprintf(p,"%s;%s;%c;%f;%i\n",i->nome,i->posicao,i->escalacao,i->salario,i->numero); (Obs: Arquivos com extensão .CSV usam ponto-e-vírgula (ou então vírgula) como separador de colunas da tabela, então você poderia até abrir seu arquivo no excel ou libreoffice e os dados ficariam separados nas colunas da tabela). Fazendo isto você pode trocar especificador de string %s pelo outro especificador de string %[ no fscanf, limitando para ler todos os caracteres até encontrar um ; , ou seja ficando assim %[^;] (ler e guardar todo caractere que for diferente de ; ). fscanf(p," %[^;];%[^;];%c;%f;%i%*c",name,position,&lineup,&salary,&num) Assim vai ler a string inteira entre os ponto-e-vírgula, incluindo os espaços que existirem.
  24. Os nomes das bibliotecas padrão da linguagem C dão dicas do que elas fazem: stdio.h -> "STD I/O" é abreviação de "Standard Input and Output" , que significa "Entrada e Saída Padrão", logo essa biblioteca disponibiliza várias recursos para lidar com os métodos mais comuns de entrada e saída de dados do programa, por exemplo funções para ler dados digitados pelo usuário (scanf) ou para imprimir texto na tela (printf), e também funções para lidar com leitura e escrita de arquivos (fread e fwrite), entre outras. stdlib.h -> "STD LIB" é abreviação de "Standard Library", que significa "Biblioteca Padrão", é uma biblioteca bem genérica que fornece vários recursos diferentes mas que são usados relativamente frequentemente, por exemplo conversão de string contendo digitos para um número, alocação/reserva de espaço na memória, geração de números aleatórios, finalização forçada do programa, entre outros. conio.h -> "CON I/O" é abreviação de "Console Input and Output", que significa "Entrada e Saída do/para Console", mas essa biblioteca não é uma biblioteca padrão da linguagem C, ela é específica para o sistema operacional Windows, ou seja em outros SOs ela não existe, logo usando ela seu programa será restrito ao ambiente Windows. E esta biblioteca fornece recursos extras específicos para o console "Prompt de Comando" (cmd.exe) do Windows, por exemplo detecção de quando o usuário apertou uma tecla, limpeza da tela, entre outros. (Em geral recomendamos não usar conio.h a menos que seja uma aplicação bem específica.)
  25. isrnick

    C digite uma data valida

    "Entre com a data no seguinte formato DD/MM/AAAA: "

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!