[text] ger

Viewer

  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. /*
  4. Дана строка из четырех десятичных цифр. Если остаток от деления произведения первых
  5. двух цифр на третью цифру равен четвертой цифре, то поменять местами вторую и
  6. третью цифры. Иначе заменить четвертую цифру дополнением до 5 (если это возможно).
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <ctype.h>
  11. #include <string.h>
  12. #include <locale.h>
  13.  
  14. void clear_input() {
  15.     int c;
  16.     while ((c = getchar()) != '\n' && c != EOF) {}
  17. }
  18.  
  19. int char_to_int(char x) {
  20.     return x - '0';
  21. }
  22.  
  23. char int_to_char(int x) {
  24.     return x + '0';
  25. }
  26.  
  27. int main() {
  28.  
  29.     setlocale(LC_ALL, "rus");
  30.     setlocale(LC_NUMERIC, "eng");
  31.  
  32.     char str[4], str1[4];
  33.  
  34.     unsigned flag = 1, tmp = 1;
  35.     while (tmp) {
  36.  
  37.         while (flag) {
  38.             printf("Введите строку из 4 цифр без пробелов:\n");
  39.             scanf("%s", &str);
  40.              if (!isdigit(str[0]) || !isdigit(str[1]) || !isdigit(str[2]) ||
  41.                 !isdigit(str[3])) {
  42.                 printf("Повторите ввод.\n");
  43.             }
  44.             else { flag = 0; }
  45.         }
  46.  
  47.         strcpy(str1, str);
  48.  
  49.         int x1 = char_to_int(str1[0]) * char_to_int(str1[1]);
  50.         size_t size = sizeof(str1) / sizeof(*str1);
  51.  
  52.         if (char_to_int(str1[2]) != 0 && x1 % char_to_int(str1[2]) == char_to_int(str1[3])) {
  53.             char temp = str1[size + 1];
  54.             temp = str1[2];
  55.             str1[2] = str1[1];
  56.             str1[1] = temp;
  57.  
  58.         }
  59.         else if (char_to_int(str1[3]) < 5) {
  60.             str1[3] = int_to_char(5);
  61.         }
  62.  
  63.         __asm {
  64.             mov al, str[0];
  65.             mov bl, str[1];
  66.             mov cl, str[2];
  67.             mov dl, str[3];
  68.             sub al, 48;
  69.             sub bl, 48;
  70.             mul bl;
  71.             sub cl, 48;
  72.             sub dl, 48;
  73.             cmp cl, 0;
  74.             je ELIF;
  75.             div cl;
  76.             cmp ah, dl;
  77.             jne ELIF;
  78.             add cl, 48;
  79.             add bl, 48;
  80.             mov str[1], cl;
  81.             mov str[2], bl;
  82.             jmp EXIT;
  83.         ELIF:
  84.             cmp dl, 5;
  85.             jae EXIT;
  86.             mov str[3], 53;
  87.         EXIT: nop;
  88.         }
  89.  
  90.         printf("Результат работы программы на языке Си: %s\n", str1);
  91.         printf("Результат работы программы на ассемблере: %s\n\n", str);
  92.  
  93.         clear_input();
  94.  
  95.         printf("Хотите продолжить?\n0 - Нет\n1 - Да\n");
  96.  
  97.         int term = 1;
  98.         while (term == 1) {
  99.             if (scanf("%d", &tmp) != 1 || (tmp != 0 && tmp != 1)) {
  100.                 printf("Введено неверное значение\n");
  101.                 printf("Хотите продолжить?\n0 - Нет\n1 - Да\n");
  102.                 clear_input();
  103.             }
  104.             else {
  105.                 term = 0;
  106.                 flag = 1;
  107.             }
  108.         }
  109.     }
  110.  
  111.  
  112.     exit(0);
  113. }

Editor

You can edit this paste and save as new:


File Description
  • ger
  • Paste Code
  • 24 Mar-2023
  • 3.14 Kb
You can Share it: