Advertisement
Guest User

Untitled

a guest
May 5th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.68 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <tchar.h>
  4. #include <locale.h>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7. #include <string.h>
  8. #include <math.h>
  9. #include <ctype.h>
  10. int chk(char txt[10000])
  11. {
  12.     int c = strlen(txt);
  13.     int k = 0;
  14.     int t = 0;
  15.     int z = 0;
  16.     for (int i = 0; i<c; i++)
  17.     {
  18.         if (txt[i] >= 48 && txt[i] <= 57)
  19.         {
  20.             k = k + 1;
  21.         }
  22.         if (txt[i] == ',' && i != 0 && t <= 1)
  23.         {
  24.             t++;
  25.         }
  26.         if (txt[i] == '-' && i == 0 && z<1)
  27.         {
  28.             z++;
  29.         }
  30.     }
  31.     int p = k + t + z;
  32.     if (z == p)
  33.         return -1;
  34.     return k + t + z;
  35. }
  36. int chkplus(char txt[10000])
  37. {
  38.     int c = strlen(txt);
  39.     int k = 0;
  40.     int t = 0;
  41.     int z = 0;
  42.     for (int i = 0; i<c; i++)
  43.     {
  44.         if (txt[i] >= 48 && txt[i] <= 57)
  45.         {
  46.             k = k + 1;
  47.         }
  48.     }
  49.     return k;
  50. }
  51. int entermas(int size, float** massiv)
  52. {
  53.     int i, j;
  54.     char ns[] = "abcdefghijklmno";
  55.     for (i = 1; i <= size; i++)  // цикл по строкам
  56.     {
  57.         for (j = 1; j <= size; j++)  // цикл по столбцам
  58.         {
  59.             printf("a[%i][%i] = ", i, j);
  60.             scanf("%s", &ns);
  61.             while (strlen(ns) != chk(ns))
  62.             {
  63.                 printf("Вы ввели недопустимые символы. ");
  64.                 scanf("%s", &ns);
  65.             }
  66.             float t = atof(ns);
  67.             if (i == j)
  68.                 massiv[i][j] = t - 1;
  69.             else
  70.                 massiv[i][j] = t;
  71.         }
  72.     }
  73.     return 0;
  74. }
  75. int sqr(int size, float** massiv, float** sqr)
  76. {
  77.     int i, j, z;
  78.     float k = 0;
  79.     for (int z = 1; z <= size; z++)
  80.     {
  81.         for (int i = 1; i <= size; i++)
  82.         {
  83.             k = 0;
  84.             for (int j = 1; j <= size; j++)
  85.             {
  86.                 k = k + massiv[z][j] * massiv[j][i];
  87.                 sqr[z][i] = k;
  88.             }
  89.         }
  90.     }
  91.     return 0;
  92. }
  93. int printmasA(int size, float** massiv)
  94. {
  95.     float t;
  96.     printf("\n        A=");
  97.     for (int i = 1; i <= size; i++)
  98.     {
  99.         printf("|");
  100.         for (int j = 1; j <= size; j++)
  101.         {
  102.             printf(" %7.2f ", massiv[i][j]);
  103.         }
  104.         printf("|\n          ");
  105.     }
  106.     return 0;
  107. }
  108. int save_matr(int n, float** matr2)
  109. {
  110.     char s[81], word[] = " ";
  111.     printf("Пожалуйста, введите имя файла: ");
  112.     scanf("%s", &s);
  113.     if (strchr(s, '.') == NULL)
  114.         strcat(s, ".txt");
  115.     FILE *f = fopen(s, "w");
  116.     if (f == NULL)
  117.     {
  118.         printf("Ошибка открытия.\n");
  119.         return 1;
  120.     }
  121.     for (int i = 1; i <= n; i++)
  122.         for (int j = 1; j <= n; j++)
  123.         {
  124.             fprintf(f, "%7.2f ", matr2[i][j]);
  125.             if (j == n)
  126.                 fprintf(f, "%s\n", word);
  127.         }
  128.     fclose(f);
  129.     return 0;
  130. }
  131. int amount(FILE *f)
  132. {
  133.     float d = 0;
  134.     int amount = 0;
  135.     while (!feof(f))
  136.     {
  137.         fscanf_s(f, "%f", &d);
  138.         amount++;
  139.     }
  140.     return amount;
  141. }
  142. int sqrt(int n)
  143. {
  144.     int i = 1;
  145.     while (i*i <= n)
  146.     {
  147.         i++;
  148.     }
  149.     i = i - 1;
  150.     return i;
  151. }
  152. int spellcheck(char *a, int n)
  153. {
  154.     int ggwp = 0;
  155.     int spaces = 0, comas = 0;
  156.     for (int i = 0; i < strlen(a); i++)
  157.     {
  158.         if (!((isdigit(*(a + i))) || (isspace(*(a + i))) || (*(a + i) == ',')))
  159.             ggwp++;
  160.         if (isspace(*(a + i)))
  161.             spaces++;
  162.         if (*(a + i) == ',')
  163.             comas++;
  164.         if (((i > 0) && (*(a + i) == ',') && (!isdigit(*(a + i - 1))) && (!isdigit(*(a + i + 1)))) || (*(a) == ',') || (*(a + strlen(a) - 1) == ','))
  165.             ggwp++;
  166.     }
  167.     if (((spaces + 1) != (n*n)) || (comas != (n*n)))
  168.         ggwp++;
  169.     return ggwp;
  170. }
  171. int read_matr(float** A)
  172. {
  173.     char s[81], word[] = " ";
  174.     int error = 0, s1 = 0, s2 = 0;
  175.     printf("Пожалуйста, введите имя файла: ");
  176.     scanf("%s", &s);
  177.     if (strchr(s, '.') == NULL)
  178.         strcat(s, ".txt");
  179.     FILE *f;
  180.     char* strchk = (char*)malloc(1024);
  181.     if ((f = fopen(s, "r")) != NULL) {
  182.         int n = 2; //сюда нужно как-то впихнуть порядок матрицы вместо двойки. Сделаешь - дальше буду пытаться что-то делать.
  183.         if (spellcheck(fgets(strchk, 2000, f), n) == 0) {
  184.             fseek(f, 0, SEEK_SET);
  185.             while (fscanf(f, "%f", &*(*(A + s1) + s2)) != EOF) {
  186.                 if (s2 < n - 1) {
  187.                     s2++;
  188.                 }
  189.                 else {
  190.                     s2 = 0;
  191.                     s1++;
  192.                 }
  193.             }
  194.         }
  195.         else {
  196.             error = 1;
  197.             printf_s("   [ERROR] В файле что-то неводомое!\n   ");
  198.         }
  199.     }
  200.  
  201.  
  202.     fclose(f);
  203.     free(A);
  204.     free(strchk);
  205.     return 0;
  206. }
  207. int  main()
  208. {
  209.     setlocale(LC_ALL, "Russian");
  210.     printf("4.18. Дана квадратная матрица A порядка n.\n");
  211.     printf("Получить матрицу (А-E)^2+C, где E – единичная матрица порядка n,\n");
  212.     printf("а элементы матрицы C вычисляются по формуле 1/(i+j+1)\n");
  213.     int n, k = 0, z = 0;
  214.     char ns[] = "Горы, горы, горы, горы", svar[] = "Горы, горы, горы, горы";
  215.     printf("Пожалуйста, выберете вариант записи матрицы нажатием соответствующей клавишы:\n   1) Из файла\n   2) С консоли\n");
  216.     while (strlen(svar) != chkplus(svar))
  217.     {
  218.         printf("Пожалуйста, вводите только 1 или 2: ");
  219.         scanf("%s", &svar);
  220.         if (chkplus(svar) != strlen(svar))
  221.             printf("Вы ввели недопустимые символы. \n");
  222.         else
  223.         {
  224.             k = atoi(svar);
  225.             while ((k != 1) && (k != 2))
  226.             {
  227.                 printf("Вы ввели неверное число.\n");
  228.                 printf("Пожалуйста, вводите только 1 или 2: ");
  229.                 scanf("%s", &svar);
  230.                 k = atoi(svar);
  231.             }
  232.         }
  233.     }
  234.     printf("\nk = %i\n", k);
  235.     if (k == 1)
  236.     {
  237.         printf("Пожалуйста, выберете вариант записи матрицы нажатием соответствующей клавишы:\n   1) Запись в файл\n   2) Чтение из файла\n");
  238.         do
  239.         {
  240.             scanf("%s", &svar);
  241.             if (chkplus(svar) != strlen(svar))
  242.                 printf("Вы ввели недопустимые символы. \n");
  243.             else
  244.             {
  245.                 z = atoi(svar);
  246.                 while ((z != 1) && (z != 2))
  247.                 {
  248.                     printf("Вы ввели неверное число.: ");
  249.                     printf("Пожалуйста, вводите только 1 или 2: ");
  250.                     scanf("%s", &svar);
  251.                     z = atoi(svar);
  252.                 }
  253.             }
  254.         } while (chkplus(svar) != strlen(svar));
  255.     }
  256.     printf("z = %i\n", z);
  257.     if (z == 1) //ЗДЕСЬ ЗАПИСЬ В ФАЙЛ
  258.     {
  259.         do
  260.         {
  261.             printf("Пожалуйста, введите размерность квадратной матрицы: ");
  262.             scanf("%s", &ns);
  263.             n = atoi(ns);
  264.             if ((chkplus(ns) != strlen(ns)) || n == 0)
  265.                 printf("Вы ввели не натуральное число или недопустимые символы. \n");
  266.             else
  267.                 n = atoi(ns);
  268.         } while ((strlen(ns) != chkplus(ns)) || n == 0);
  269.         float** a = (float**)malloc(n*n*sizeof(float));
  270.         for (int i = 1; i <= n; i++)
  271.             a[i] = new float[n];
  272.         entermas(n, a);
  273.         printmasA(n, a);
  274.         float** b = (float**)malloc(n*n*sizeof(float));
  275.         for (int i = 1; i <= n; i++)
  276.             b[i] = new float[n];
  277.         sqr(n, a, b);
  278.         printmasA(n, b);
  279.         save_matr(n, b);
  280.         free(a);
  281.     }
  282.     if (z == 2)//ЗДЕСЬ ЧТЕНИЕ В ФАЙЛ
  283.     {
  284.         float** a = (float**)malloc(n*n*sizeof(float));
  285.         for (int i = 1; i <= n; i++)
  286.             a[i] = new float[n];
  287.         read_matr(a);
  288.         free(a);
  289.     }
  290.     if (k == 2)//А ЗДЕСЬ КОНСОЛЬ
  291.     {
  292.         do
  293.         {
  294.             printf("Пожалуйста, введите размерность квадратной матрицы: ");
  295.             scanf("%s", &ns);
  296.             n = atoi(ns);
  297.             if ((chkplus(ns) != strlen(ns)) || n == 0)
  298.                 printf("Вы ввели не натуральное число или недопустимые символы. \n");
  299.             else
  300.                 n = atoi(ns);
  301.         } while ((strlen(ns) != chkplus(ns)) || n == 0);
  302.         float** a = (float**)malloc(n*n*sizeof(float));
  303.         for (int i = 1; i <= n; i++)
  304.             a[i] = new float[n];
  305.         entermas(n, a);
  306.         float** b = (float**)malloc(n*n*sizeof(float));
  307.         for (int i = 1; i <= n; i++)
  308.             b[i] = new float[n];
  309.         sqr(n, a, b);
  310.         printmasA(n, b);
  311.     }
  312.     system("pause");
  313.     return 0;
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement