Ir ao conteúdo
  • Cadastre-se

Lucca Rodrigues

Membro Pleno
  • Posts

    1.081
  • Cadastrado em

  • Última visita

Tudo que Lucca Rodrigues postou

  1. @Igor Caldas Se não puder alterar a string original, vai precisar de uma auxiliar, não tinha me atentado a isso O tamanho da string original já sabemos, mas se quiser alocar dinamicamente pra funcionar em todos os casos, pode fazer algo assim: char* substituir(char* s, char x, char y) { char* aux = (char*)malloc(strlen(s)+1); strcpy(aux, s); //printf("%s", aux); // Altere e retorne aux }
  2. @Igor Caldas Basta um loop percorrendo a string até encontrar o \0. O protótipo da função o enunciado já te deu: se (s[i] == x) s[i] = y. A lógica é essa.
  3. @isvkt Eu já te expliquei como fazer isso no seu outro tópico. // I already explained to you how to do this in your other topic. Por "desaparecer e aparecer" acho que você quer dizer minimizar e restaurar. Chame ShowWindow(), o primeiro argumento passado é um identificador para a janela do console e o segundo no seu caso poderia ser SW_SHOWMINIMIZED ou SW_SHOWNORMAL. Se quer mostrar a janela maximizada, o argumento poderia ser SW_SHOWMAXIMIZED, leia a documentação. Chame GetConsoleWindow() para obter o identificador de janela usado pelo console. // By "disappear and appear" I think you mean minimize and restore. Call ShowWindow(), the first argument is a handle to the console window and the second one in your case could be SW_SHOWMINIMIZED or SW_SHOWNORMAL. If you want to show the maximized window, the argument could be SW_SHOWMAXIMIZED, read the documentation. Call GetConsoleWindow() to retrieve the window handle used by the console.
  4. @Pedroga É EasyEDA mesmo, como o colega acima disse. Não sei se atualizou, mas quando eu usava não tinha opção de simulação nem nada, só servia pra construir esquemático e PCB.
  5. @immoraesz Complicada sua situação aqui no fórum Nada leu dos outros tópicos sobre como usar fgets(), e agora quer ajuda em um programa que não foi você que escreveu... Se algum colega quiser dar a resposta de bandeja novamente, fiquem a vontade, freguês satisfeito sempre volta De qualquer forma, se quiser se esforçar o mínimo, leia esse trecho e descubra o erro: Mesmo copiando o código, não conseguiu copiar direito.
  6. @isvkt Você não postou o código completo e não sabemos onde vai implementar essa lógica, e de qualquer forma ninguém vai implementar isso no seu código, esse é seu trabalho. // You didn't post the complete code and we don't know where you're going to implement this logic in it, anyway, no one is going to implement it in your code, that's your job. Veja: // Identificador para a stdin HANDLE console = GetStdHandle(STD_INPUT_HANDLE); printf("<Esperando teclar 2, 3 ou 4>\n"); while(1) { FlushConsoleInputBuffer(console); if(WaitForSingleObject(console, 1000) == WAIT_OBJECT_0) { // Houve um evento de entrada break; } // Etc } WaitForSingleObject() no código aguarda um evento de entrada por 1 segundo. Como pode tratar esse evento de entrada? Queremos que seja um evento do teclado, mais precisamente as teclas 2, 3 ou 4. Pode usar PeekConsoleInput(). Outra opção seria essa tal GetAsyncKeyState() que como já disse em outro tópico, é problemática. // WaitForSingleObject() in the code above waits for an input event for 1 second. How can you handle this input event? We want it to be a keyboard event, more precisely keys 2, 3 or 4. You can use PeekConsoleInput(). Another option would be GetAsyncKeyState() which, as I said in your other topic, is problematic. Ok, considerando que foi detectado um evento na entrada, foi um evento de pressionamento de tecla e essa tecla está entre 2 e 4, o que fazer? Pode usar getch(): // Okay, considering an input event was detected, it was a key event and that key is between 2 and 4, what to do next? You can use getch(): // ... printf("<Esperando teclar 1>\n"); while (getch() != '1'); break; // ... Enquanto não for pressionada a tecla 1, o loop persiste. Postei os códigos para Windows e Linux da getch() um pouco acima. // As long as key 1 is not pressed, the loop persists. I posted getch() codes for Windows and Linux a little above.
  7. @kalline Coluna = linha: diagonal principal Coluna > linha: acima da diagonal principal Coluna < linha: abaixo da diagonal principal
  8. @Manuel Eusebio Use o botão Code para postar o código... // Vetor estatico int vet[15]; // Vetor dinamico int* vet = (int*)malloc(15*sizeof(int));
  9. @Bernardo_1010101 Tentou começar? Mostre o que tentou fazer. A declaração da matriz é algo do tipo: int mat[20][20]; Pra buscar um valor na matriz, use dois loops: um controlando as linhas e outro, dentro do escopo deste primeiro, controlando as colunas.
  10. O problema é que a conio.h não faz parte da biblioteca padrão do C, e suas poucas funções podem ser implementadas em poucas linhas em Windows ou Linux. ENABLE_ECHO_INPUT (Windows): Os caracteres lidos pela função ReadFile ou ReadConsole são gravados no buffer de tela ativo à medida que são inseridos no console. Esse modo poderá ser usado somente se o modo ENABLE_LINE_INPUT também estiver habilitado. ENABLE_LINE_INPUT (Windows): A função ReadFile ou ReadConsole será retornada somente quando um caractere de retorno de carro for lido. Se esse modo estiver desabilitado, as funções serão retornadas quando um ou mais caracteres estiverem disponíveis. ECHO (Linux): Ecoar caracteres de entrada. ICANON (Linux): A entrada é disponibilizada linha por linha. Uma linha de entrada está disponível quando um dos delimitadores de linha é digitado (NL, EOL, EOL2; ou EOF no início da linha). Exceto no caso de EOF, o delimitador de linha é incluído no buffer retornado por read(). No modo não canônico, a entrada está disponível imediatamente (sem que o usuário precise digitar um caractere delimitador de linha), nenhum processamento de entrada é executado e a edição de linha é desabilitada. O buffer de leitura só aceitará 4095 caracteres; isso fornece o espaço necessário para um caractere de nova linha se o modo de entrada for alterado para canônico. Usando SetConsoleMode() em Windows e tcsetattr() em Linux, conseguimos desligar esses modos. Windows: int getch(void) { DWORD mode; int total = 0; int c = 0; HANDLE h = GetStdHandle(STD_INPUT_HANDLE); if(h == NULL) { // GetStdHandle() falhou return 0; } // Salvando GetConsoleMode(h, &mode); // Alterando SetConsoleMode(h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT)); ReadConsole(h, &c, 1, (LPDWORD)&total, NULL); // Restaurando SetConsoleMode(h, mode); if(total > 0) { if(c == '\r') c = '\n'; return c; } else { // não leu nada return 0; } } Linux: int getch(void) { struct termios oldMode, newMode; int ch; // Salvando tcgetattr(0, &oldMode); newMode = oldMode; newMode.c_lflag &= ~(ICANON | ECHO); // Alterando tcsetattr(0, TCSANOW, &newMode); ch = getchar(); // Restaurando tcsetattr(0, TCSANOW, &oldMode); return ch; } Dá uma olhada aqui.
  11. @kalline Não se forma uma matriz triangular equivalente da forma implementada nesse código, elemento nenhum da matriz estendida é afetado numericamente, se forma uma outra matriz. Se a entrada for: 1 1 2 3 3 2 1 2 3 2 3 1 3 2 1 4 Escolhendo a opção 3 (triângulo superior), a saída é: 1 2 3 1 2 1 Foi feita uma verificação: Se um elemento da matriz estiver abaixo da diagonal principal ou pertencer a mesma, são impressos espaços, quando na realidade deveriam ser impressos zeros abaixo da diagonal principal, e os termos acima da diagonal principal incluindo a mesma seriam afetados por um método numérico como a eliminação gaussiana por exemplo. Por eliminação gaussiana, considerando o vetor resultado {1,2,3,4}, a saída seria: 1 1 2 3 0 -1 -5 -7 0 0 2 -1 0 0 0 2 O método implementado no código pra formar uma matriz triangular inferior segue o mesmo esquema, só muda a verificação: se um elemento da matriz estiver acima da diagonal principal ou pertencer a mesma, são impressos espaços. Se a intenção é formar uma matriz diferente com zeros em certas posições, faça com que sejam impressos os zeros ao menos.
  12. @Pincipi Em JS acho que seria algo do tipo: function serasa() { let btn = document.querySelector('.btn') btn.click() } setInterval(serasa, 1000) Ctrl + Shift + C, passando o mouse em cima do botão deve aparecer algo como class="btn" ou algo do tipo, a string é o parâmetro de querySelector(). Não sei se funciona no seu caso, eu usava com um propósito parecido Em C dá pra sintetizar cliques do mouse, só que claro, seu cursor mexe, e tem que saber a posição do mouse na tela...
  13. @isvkt Falta muita informação. Como já te disse, poste o programa completo e compilável sempre que possível. Talvez possa usar a WaitForSingleObject() se for algo simples.
  14. @isvkt First you need to retrieve the window handle used by the console with GetConsoleWindow(), and then you can call ShowWindow() to minimize or maximize it, you can also hide it. You can close it with PostMessage() by putting the WM_CLOSE message into the window's message queue for processing, and the window can close properly as the message queue is cleared.
  15. @juxt As coisas parecem fora de ordem. Primeiramente tenha a matriz em mãos: for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { // 0 + rand() % ((9 + 1) - 1) eh a mesma coisa que rand() % 9 matriz[i][j] = rand() % 9; } } Depois peça os dados para o usuário: printf("Insira a quantidade de valores para efetuar a busca: "); scanf("%d", &k); printf("insira a sequencia de %d numeros a ser procurada na matriz: ", k); for (z = 0; z < k; z++) { scanf("%d", &s[z]); } Imprima a matriz: printf("\nMatriz\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%5d", matriz[i][j]); } printf("\n"); } E por último, procure os valores na matriz: for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { for (z = 0; z < k; z++) { if (matriz[i][j] == s[z]) { //contador = contador + 1; printf("\nnumero %d encontrado em [%d, %d]", s[z], i+1, j+1); } } } } E veja, quase não mudei nada em seu programa A saída é algo do tipo:
  16. Não colega, você não refez nada, copiou daqui. Seria impossível você ter feito esse código e não ter notado que duplicou a main() Se quer ajuda aqui no fórum, procure saber o que está fazendo.
  17. @EdwardZ Não deveria ter conseguido compilar: Está chamando merge() em mergeSort() sendo que a definição dessa primeira está abaixo da definição dessa segunda. Deixe a main() sempre como primeira, acima dela somente os protótipos e não terá problemas; O primeiro parâmetro de merge() é int* V, então você tem que passar um endereço na chamada da função se tratando de um int (&V), ou então se tiver um vetor, não precisa do &: V ou &V[0]; Na merge(), você declarou `tamanho` como um ponteiro, talvez por engano. Corrija tudo e tente visualizar o resultado, afinal não chamou printf(), não é surpresa que nada é impresso Aliás, não vai conseguir testar sem ao menos inicializar suas variáveis:
  18. Well, post the code you changed so we can see how it turned out. If you don't want the while condition to be false if you don't press the left mouse button before or during the evaluation of the condition, you can use an if statement inside the while scope, just like you did in the function that calls ExecControl().
  19. @isvkt Whenever possible, post the complete and compilable code. Makes it easier for those trying to help you. Yes, you do. But first of all, GetAsyncKeyState() returns 2 bits: the most significant indicates whether the key is pressed at the time of the call, and the least significant indicates whether the key has been pressed since the previous call to GetAsyncKeyState(): // Try clicking multiple times Sleep(1000); short x = GetAsyncKeyState(VK_LBUTTON); printf("MSB: %d\nLSB: %d\nWas the key pressed at the time of the call? %s\n" "Has the key been pressed since the previous call? %s\n", ((x >> 15) & 1) ? 1 : 0, (x & 1) ? 1 : 0, ((x >> 15) & 1) ? "Yes" : "No", (x & 1) ? "Yes" : "No"); If you are lucky enough to be able to click at the time of the function call, the output will be: Anyway, GetAsyncKeyState() doesn't always work, it can get "stuck" on modern computers if the user keeps pressing the key over and over repeatedly. The documentation also says: Now straight to the point: regarding the ExecControl() function, GetAsyncKeyState() does not wait for anything more than what it evaluates, and if none of the cases occurred to set any of the bits to 1, the result is 0. Well, 0 && X = 0, the while condition becomes false and control is transferred out of the loop without further ado. So yes, the function returns the control to where it was called, and if you want whatever is in the scope of the while of the ExecControl() function to be executed, you would have to find a way to press any of the two keys needed for it to work, or else fix the loop condition. Knowing this, can you fix it?
  20. @Diovani Facco De que te serve `teste`? Sim, no seu código caso seja encontrado o caractere espaço, são armazenados 3 espaços nas posições seguintes, sobrescrevendo o que tiver por lá. O que você pode fazer é mover os caracteres das posições seguintes antes para que não sobrescreva nada, começando do '\0' e decrementando o contador até que atinja o valor do índice `i`: if(s[i] == ' ') { for(k = strlen(s); k > i; k--) { // Movendo 3 posições para a direita s[k + 3] = s[k]; } for(j = 0; j < 4; j++) { s[i++] = ' '; } } TESTE TESTE\0 Primeiro loop: TESTE TESTE\0 \0 TESTE TESTE\0 E\0 TESTE TESTE\0TE\0 TESTE TESTESTE\0 TESTE TESTESTE\0 TESTE TESTESTE\0 Segundo loop: TESTE TESTESTE\0 TESTE ESTESTE\0 TESTE STESTE\0 TESTE TESTE\0
  21. @Carlos Gouveia Eletrônica 8ª Edição Volumes 1 e 2, Albert Malvino. É uma boa se quer aprender desde o início. Volume 1, começando no capítulo 6: Volume 2, começando no capítulo 21: Vai encontrar bastante coisa por lá
  22. Acredite, o autor vai usar isso sem sequer saber o que quer dizer, assim como vem usando fgets() sem saber de seu comportamento peculiar (o pessoal vem aqui querendo uma resposta curta sem ter que se esforçar pra entender). Estamos interessados no retorno de strcspn(), e na documentação é dito: No nosso caso, se um '\n' for encontrado, strcspn() retorna seu índice para que possamos atribuir um '\0', caso contrário, retorna o tamanho da string que seria a posição em que se encontra o terminador '\0'. De qualquer forma, é sempre bom testar o retorno de fgets(): E veja, se strcspn() = strlen(), provavelmente o usuário digitou mais do que deveria, e daí poderia ser efetuada uma leitura do que resta no fluxo.
  23. Não há nada de inesperado aqui, está na documentação da fgets(): Eu falei sobre isso no seu outro tópico, e mostrei um exemplo:
  24. strlen() é da string.h. O último caractere da string é o '\0', ele em si serve pra indicar o final da string. Na documentação da fgets() é dito: Se referindo ao índice, não há como garantir que subtrair 2 do valor retornado por strlen() funcionará em todos os casos: se o usuário digitar "dezenove caracteres", a saída será: Isso é porque foram digitados 20 caracteres ao todo, incluindo o '\n' do Enter teclado ao finalizar a leitura, mas só há espaço para 19 sem incluir o '\0', então o '\n' fica de fora, e por essa você não esperava O que se pode fazer é verificar se há um '\n' na penúltima posição da string após ler com fgets(). Caso haja, o substituímos por um '\0', e caso não haja, podemos ler o que resta no fluxo: char str[101]; if(fgets(str, sizeof(str), stdin) != NULL) { if(str[strlen(str) - 1] == '\n') { // '\n' na penultima posição da string str[strlen(str) - 1] = '\0'; } else { int ch; // Lendo o que ha de resto while((ch = fgetc(stdin)) != '\n' && ch != EOF); } } Teste imprimir str[strlen(str) - 1] após a leitura, funcionará em qualquer caso: E entende como isso funciona? O índice `i` é incrementado partindo de 0 até que seja encontrado o '\0' da string, de modo a imprimir todos os caracteres um a um. Manualmente, basta escolher um valor de índice: char str[] = "abcde"; // Imprime o caractere 'e' da string // Localizado na posicao de indice 4 printf("%c", str[4]); Não é assim que funciona, pelo menos não da forma que imagina. O valor decimal de '\0' é 0, como pode ver na tabela ASCII. Dessa forma você imprime o caractere na posição de índice 0.
  25. Eu uso esse site. Depois que pesquisar o transistor lá, clica no nome dele pro site mostra o datasheet, daí tem uma opção escrito "Transistor Equivalent Substitute" que mostra uma tabela com os equivalentes que o site tem registrado.

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!