×
Ir ao conteúdo
  • Cadastre-se

Lucca Rodrigues

Membro Pleno
  • Posts

    1.043
  • Cadastrado em

  • Última visita

Reputação

1.047

Sobre Lucca Rodrigues

  • Data de Nascimento 03/09/2001 (20 anos)

Informações gerais

  • Cidade e Estado
    Londrina/PR
  • Sexo
    Prefiro não dizer
  1. @Vitor Nata Zanetta Santos Você inicializou menor com 0, então se inserir apenas valores maiores que zero, menor vai continuar com valor 0. Você pode atribuir o primeiro elemento de `p` às variáveis `menor` e `maior` para inicializar. Faça isso na primeira passagem pelo loop: use if para verificar se o valor do índice `i` é 0. Aliás... Vetores em C começam pelo índice 0, e o último elemento tem índice N-1. for(i = 0; i < q; i++) { } `q` ou `soma` tem que ser do tipo ponto flutuante pra que o resultado da operação seja um ponto flutuante. float soma = 0.0f; Caso contrário, vai ser uma média com valor inteiro.
  2. @Talyson Maia Pesquise em inglês, é mais fácil de achar. https://gcc.gnu.org/onlinedocs/cpp/Object-like-Macros.html#Object-like-Macros Ou então, em português: O corpo da macro termina no final da linha onde se encontra "#define". Você pode continuar a definição em várias linhas, se necessário, usando barra invertida. Quando a macro for expandida, no entanto, tudo estará em uma linha.
  3. @Kaua__ Sim é tudo Windows. GetStdHandle() GetConsoleMode() SetConsoleMode() FlushConsoleInputBuffer() WaitForSingleObject()
  4. @Kaua__ Pode tentar a WaitForSingleObject(), desativando MOUSE_INPUT e WINDOW_INPUT com SetConsoleMode(), já que quer entrada somente do teclado. Os retornos que te interessam para Wait() são: WAIT_OBJECT_0 - O estado do objeto especificado é sinalizado. WAIT_TIMEOUT - O intervalo de tempo limite decorrido e o estado do objeto não são sinalizados. Então se o segundo argumento de Wait() for 10000 (10 segundos) e o retorno for WAIT_TIMEOUT, o usuário não digitou nada nesse período, mas se for WAIT_OBJECT_0, então você pode chamar scanf() ou alguma outra função. int x; DWORD fdwMode, fdwOldMode, ret; HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); // Salvando modo atual GetConsoleMode(hStdIn, &fdwOldMode); // Desativando MOUSE_INPUT e WINDOW_INPUT fdwMode = fdwOldMode & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT); SetConsoleMode(hStdIn, fdwMode); // Descarta registros de entrada no buffer antes de chamar Wait() FlushConsoleInputBuffer(hStdIn); printf("Insira um valor inteiro: "); if ((ret = WaitForSingleObject(hStdIn, 10000)) == WAIT_TIMEOUT) { printf("\nSe passaram 10 segundos!"); } else if (ret == WAIT_OBJECT_0) { scanf(" %d", &x); printf("Valor inserido: %d", x); } // Restaura o modo original SetConsoleMode(hStdIn, fdwOldMode);
  5. @lauro viana cada se tem um fimse, e você se esqueceu de alguns // 3 se e só 2 fimse se media >= 7 entao escreval("aluno aprovado!") senao se media
  6. @Larissa Maia Se sabe a definição de um vetor, então teria ao menos uma ideia de como trabalhar com ele: um conjunto de espaços de memória contíguos. E veja, qualquer um desses elementos pode ser referenciado com o nome do vetor seguido pelo número de posição do elemento entre colchetes. vet[0] - elemento de índice 0 (primeiro elemento) vet[1] - elemento de índice 1 (segundo elemento) Como acessar todos os elementos em sequência para fazer a comparação? Um loop, como mostrou o colega @Danilo Namitala . Lembrando que sua função recebe o vetor gabarito e o vetor resposta. Mostre o que tentou fazer até então.
  7. @LucasrodriguesP Fica mais enxuto com if. Inclusive se as instruções depois dos case's forem iguais, pode resumir: switch (letra1) { case 'a': case 'e': case 'i': case 'o': case 'u': cout << "isso eh vogal"; break; default: cout << "isso eh consoante"; } Mas ainda dá mais linhas que usar if.
  8. @LucasrodriguesP Você tem que comparar letra1 com cada vogal, e não simplesmente colocar uma vírgula e as demais vogais como fez instintivamente acredito eu. if (letra1 == 'a' || letra1 == 'e' || letra1 == 'i' || letra1 == 'o' || letra1 == 'u') cout <<"vogal"; else cout<<"consoante"; Não. Você pode recorrer ao default: switch (letra1) { case 'a': cout << "isso eh vogal"; break; case 'e': cout << "isso eh vogal"; break; case 'i': cout << "isso eh vogal"; break; case 'o': cout << "isso eh vogal"; break; case 'u': cout << "isso eh vogal"; break; default: cout << "isso eh consoante"; } Se o controle não for transferido pra nenhum case, será transferido para default.
  9. @Lipeco A memória alocada foi pra ponteiro1, um vetor dinâmico. ponteiro2 aponta pra segunda posição do vetor, então ponteirodePonteiro[0][0] seria equivalente a ponteiro1[1], e ponteirodePonteiro[0][3] seria equivalente a ponteiro1[4]. Se a memória alocada fosse pra ponteirodePonteiro, então precisaria inicializar, pensei que fosse isso que tentava fazer. De certa forma, não precisa de ponteirodePonteiro, você pode fazer um ponteiro apontar pra mesma posição de memória que ponteiro1 ou ponteiro2 sem problemas, vai conseguir acessar os valores da mesma forma.
  10. @Lipeco Exibir o que? ponteirodePonteiro recebeu o endereço de ponteiro2, mas você não alocou memória pra ele, não é uma matriz dinâmica. // Matriz dinamica int i; int** mat = (int**)malloc(rows * sizeof(int*)); for(i = 0; i < rows; i++) { mat[i] = (int*)malloc(cols * sizeof(int)); } // Desalocando for (i = 0; i < rows; i++) { free(mat[i]); } free(mat); E mesmo assim não haveria como exibir nada sem antes inicializar ou coisa do tipo. O que está tentando exibir?
  11. @Gabrielbxs O que espera que façamos? É seu trabalho. 🤪 Tentou começar? Já recebeu dicas do colega acima... Use o botão Code para postar o que já fez.
  12. @Ilanez Santos Tentou começar? Use o botão Code pra postar o que já fez.
  13. @Arthur160 CapturaTelaInvertida() continua do tipo inteiro: Tem que retornar HBITMAP. Isso fica dentro da função. O retorno da função não é salvo em nenhum HBITMAP, você não tem que deletar nada. Dê uma lida no código que eu tinha escrito, talvez te ajude a entender: #define ID_IMAGE 1 #include <stdio.h> #include <stdlib.h> #include <windows.h> HWND hWnd; HBITMAP hbit; int WindowX(void); int WindowY(void); HBITMAP GetScreenShotInvertedColor(void); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) { hWnd = GetConsoleWindow(); hbit = GetScreenShotInvertedColor(); MSG msg; WNDCLASSW wc = {0}; wc.lpszClassName = L"Edit control"; wc.hInstance = hInstance; wc.hbrBackground = CreateSolidBrush(RGB(0,0,0)); wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(0, IDC_ARROW); RegisterClassW(&wc); CreateWindowW(wc.lpszClassName, L"Inverter", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER, 0, 0, WindowX(), WindowY(), 0, 0, hInstance, 0); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND bk; switch (msg) { case WM_CREATE: { bk = CreateWindowW(L"Static", L"", WS_CHILD | WS_VISIBLE | SS_BITMAP, 0, 0, WindowX(), WindowY(), hwnd, (HMENU) ID_IMAGE, NULL, NULL); SendMessage(bk, STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) hbit); SetWindowLong(hwnd, GWL_STYLE, WS_POPUP); ShowWindow(hwnd, SW_MAXIMIZE); ShowWindow(hWnd, SW_MINIMIZE); //won't hide the window without SW_MINIMIZE ShowWindow(hWnd, SW_HIDE); } break; case WM_CLOSE: { MessageBeep(MB_OK); if (MessageBox(hwnd, "Really quit?", "Inverter", MB_OKCANCEL) == IDOK) { DestroyWindow(hwnd); } else { return 0; } } break; case WM_DESTROY: { // Fechar o programa PostQuitMessage(0); // Fechar a console PostMessage(hWnd, WM_CLOSE, 0, 0); } break; } return DefWindowProcW(hwnd, msg, wParam, lParam); } int WindowX(void) { RECT desktop_rect_; HWND desktop_ = GetDesktopWindow(); GetWindowRect(desktop_, &desktop_rect_); return desktop_rect_.right; } int WindowY(void) { RECT desktop_rect_; HWND desktop_ = GetDesktopWindow(); GetWindowRect(desktop_, &desktop_rect_); return desktop_rect_.bottom; } HBITMAP GetScreenShotInvertedColor(void) { int x1, y1, x2, y2, w, h; x1 = GetSystemMetrics(SM_XVIRTUALSCREEN); y1 = GetSystemMetrics(SM_YVIRTUALSCREEN); x2 = GetSystemMetrics(SM_CXVIRTUALSCREEN); y2 = GetSystemMetrics(SM_CYVIRTUALSCREEN); w = x2 - x1; h = y2 - y1; HDC hScreen = GetDC(NULL); HDC hDC = CreateCompatibleDC(hScreen); HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, w, h); HGDIOBJ old_obj = SelectObject(hDC, hBitmap); BitBlt(hDC, 0, 0, w, h, hScreen, x1, y1, NOTSRCCOPY); SelectObject(hDC, old_obj); DeleteDC(hDC); ReleaseDC(NULL, hScreen); return hBitmap; } alt+f4 pra fechar 🤪
  14. @Cambalinho ptr[15] = valor;
  15. @Cambalinho ptr++ faz com que o ponteiro aponte pra posição seguinte na memória. Se tem um vetor dinâmico como aquele tal `pixels`, pode indexar para acessar cada um dos elementos. Se `valor` for um endereço, então ok. Daí sim, altera o valor apontado pelo ponteiro.

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

Como ganhar dinheiro montando computadores!

MINICURSO GRÁTIS!

Como ganhar dinheiro montando computadores!

CLIQUE AQUI E INSCREVA-SE AGORA MESMO!