that_one_nigga_you_k

raylib com digitar

May 6th, 2024
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.74 KB | None | 0 0
  1. #include <raylib.h>
  2. #include <vector>
  3. #include <iostream>
  4.  
  5. enum estados{
  6.     enfiar,
  7.     ordenar
  8. };
  9.  
  10. // Função para mesclar os dois subvetores
  11. void merge(std::vector<int>& arr, int l, int m, int r) {
  12.     int i, j, k;
  13.     int n1 = m - l + 1;
  14.     int n2 = r - m;
  15.  
  16.     // Cria vetores temporários
  17.     std::vector<int> L(n1), R(n2);
  18.  
  19.     // Copia os dados para os vetores temporários L[] e R[]
  20.     for (i = 0; i < n1; i++)
  21.         L[i] = arr[l + i];
  22.     for (j = 0; j < n2; j++)
  23.         R[j] = arr[m + 1 + j];
  24.  
  25.     // Mescla os vetores temporários de volta para o vetor arr[l..r]
  26.     i = 0; // Índice inicial do primeiro subvetor
  27.     j = 0; // Índice inicial do segundo subvetor
  28.     k = l; // Índice inicial do subvetor mesclado
  29.     while (i < n1 && j < n2) {
  30.         if (L[i] <= R[j]) {
  31.             arr[k] = L[i];
  32.             i++;
  33.         } else {
  34.             arr[k] = R[j];
  35.             j++;
  36.         }
  37.         k++;
  38.     }
  39.  
  40.     // Copia os elementos restantes de L[], se houver
  41.     while (i < n1) {
  42.         arr[k] = L[i];
  43.         i++;
  44.         k++;
  45.     }
  46.  
  47.     // Copia os elementos restantes de R[], se houver
  48.     while (j < n2) {
  49.         arr[k] = R[j];
  50.         j++;
  51.         k++;
  52.     }
  53. }
  54.  
  55. // Função principal que ordena arr[l..r] usando merge()
  56. void mergeSort(std::vector<int>& arr, int l, int r) {
  57.     if (l < r) {
  58.         // Encontra o meio
  59.         int m = l + (r - l) / 2;
  60.  
  61.         // Ordena a primeira e a segunda metade
  62.         mergeSort(arr, l, m);
  63.         mergeSort(arr, m + 1, r);
  64.  
  65.         // Mescla as metades ordenadas
  66.         merge(arr, l, m, r);
  67.     }
  68. }
  69.  
  70. int main() {
  71.     // Inicializa o Raylib
  72.     InitWindow(800, 600, "Merge Sort Visualization");
  73.     estados momento = enfiar;
  74.  
  75.     // Cria um vetor de inteiros
  76.     std::vector<int> arr;
  77.  
  78.     // Loop principal do jogo
  79.     while (!WindowShouldClose()) {
  80.         BeginDrawing();
  81.         ClearBackground(BLACK);
  82.  
  83.         // Exibe instruções na tela
  84.         DrawText("Digite um número (0 para ordenar): ", 10, 10, 20, WHITE);
  85.  
  86.         // Verifica se uma tecla foi pressionada
  87.         if (momento == enfiar && IsKeyPressed(KEY_ENTER)) {
  88.             // Obtém o texto digitado pelo usuário
  89.             char texto[10] = {0};
  90.             int textoLength = 0;
  91.             while (textoLength < 9) {
  92.                 int key = GetKeyPressed();
  93.                 if ((key >= 48 && key <= 57) || key == KEY_BACKSPACE || key == KEY_ENTER) {
  94.                     if (key == KEY_ENTER)
  95.                         break;
  96.                     if (key == KEY_BACKSPACE && textoLength > 0) {
  97.                         texto[--textoLength] = '\0';
  98.                     } else {
  99.                         texto[textoLength++] = (char)key;
  100.                     }
  101.                 }
  102.             }
  103.  
  104.             // Converte o texto para um número inteiro
  105.             int numero = atoi(texto);
  106.            
  107.             // Adiciona o número ao vetor, exceto se for 0 (que indica para ordenar)
  108.             if(numero != 0)
  109.                 arr.push_back(numero);
  110.             else
  111.                 momento = ordenar;
  112.         }
  113.  
  114.         // Desenha o vetor na tela
  115.         for (int i = 0; i < arr.size(); i++) {
  116.             DrawText(std::to_string(arr[i]).c_str(), 10 + i * 40, 70, 20, WHITE);
  117.         }
  118.  
  119.         // Se o momento for "ordenar", ordena o vetor e imprime na tela
  120.         if (momento == ordenar) {
  121.             mergeSort(arr, 0, arr.size() - 1);
  122.             DrawText("Vetor ordenado: ", 10, 100, 20, WHITE);
  123.             for (int i = 0; i < arr.size(); i++) {
  124.                 DrawText(std::to_string(arr[i]).c_str(), 10 + i * 40, 130, 20, WHITE);
  125.             }
  126.         }
  127.  
  128.         EndDrawing();
  129.     }
  130.  
  131.     // Fecha a janela
  132.     CloseWindow();
  133.  
  134.     return 0;
  135. }
Add Comment
Please, Sign In to add comment