Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdio.h>
- #include <tchar.h>
- #include <locale.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- #include <math.h>
- #include <ctype.h>
- int chk(char txt[10000])
- {
- int c = strlen(txt);
- int k = 0;
- int t = 0;
- int z = 0;
- for (int i = 0; i<c; i++)
- {
- if (txt[i] >= 48 && txt[i] <= 57)
- {
- k = k + 1;
- }
- if (txt[i] == ',' && i != 0 && t <= 1)
- {
- t++;
- }
- if (txt[i] == '-' && i == 0 && z<1)
- {
- z++;
- }
- }
- int p = k + t + z;
- if (z == p)
- return -1;
- return k + t + z;
- }
- int chkplus(char txt[10000])
- {
- int c = strlen(txt);
- int k = 0;
- int t = 0;
- int z = 0;
- for (int i = 0; i<c; i++)
- {
- if (txt[i] >= 48 && txt[i] <= 57)
- {
- k = k + 1;
- }
- }
- return k;
- }
- int entermas(int size, float** massiv)
- {
- int i, j;
- char ns[] = "abcdefghijklmno";
- for (i = 1; i <= size; i++) // цикл по строкам
- {
- for (j = 1; j <= size; j++) // цикл по столбцам
- {
- printf("a[%i][%i] = ", i, j);
- scanf("%s", &ns);
- while (strlen(ns) != chk(ns))
- {
- printf("Вы ввели недопустимые символы. ");
- scanf("%s", &ns);
- }
- float t = atof(ns);
- if (i == j)
- massiv[i][j] = t - 1;
- else
- massiv[i][j] = t;
- }
- }
- return 0;
- }
- int sqr(int size, float** massiv, float** sqr)
- {
- int i, j, z;
- float k = 0;
- for (int z = 1; z <= size; z++)
- {
- for (int i = 1; i <= size; i++)
- {
- k = 0;
- for (int j = 1; j <= size; j++)
- {
- k = k + massiv[z][j] * massiv[j][i];
- sqr[z][i] = k;
- }
- }
- }
- return 0;
- }
- int printmasA(int size, float** massiv)
- {
- float t;
- printf("\n A=");
- for (int i = 1; i <= size; i++)
- {
- printf("|");
- for (int j = 1; j <= size; j++)
- {
- printf(" %7.2f ", massiv[i][j]);
- }
- printf("|\n ");
- }
- return 0;
- }
- int save_matr(int n, float** matr2)
- {
- char s[81], word[] = " ";
- printf("Пожалуйста, введите имя файла: ");
- scanf("%s", &s);
- if (strchr(s, '.') == NULL)
- strcat(s, ".txt");
- FILE *f = fopen(s, "w");
- if (f == NULL)
- {
- printf("Ошибка открытия.\n");
- return 1;
- }
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= n; j++)
- {
- fprintf(f, "%7.2f ", matr2[i][j]);
- if (j == n)
- fprintf(f, "%s\n", word);
- }
- fclose(f);
- return 0;
- }
- int amount(FILE *f)
- {
- float d = 0;
- int amount = 0;
- while (!feof(f))
- {
- fscanf_s(f, "%f", &d);
- amount++;
- }
- return amount;
- }
- int sqrt(int n)
- {
- int i = 1;
- while (i*i <= n)
- {
- i++;
- }
- i = i - 1;
- return i;
- }
- int spellcheck(char *a, int n)
- {
- int ggwp = 0;
- int spaces = 0, comas = 0;
- for (int i = 0; i < strlen(a); i++)
- {
- if (!((isdigit(*(a + i))) || (isspace(*(a + i))) || (*(a + i) == ',')))
- ggwp++;
- if (isspace(*(a + i)))
- spaces++;
- if (*(a + i) == ',')
- comas++;
- if (((i > 0) && (*(a + i) == ',') && (!isdigit(*(a + i - 1))) && (!isdigit(*(a + i + 1)))) || (*(a) == ',') || (*(a + strlen(a) - 1) == ','))
- ggwp++;
- }
- if (((spaces + 1) != (n*n)) || (comas != (n*n)))
- ggwp++;
- return ggwp;
- }
- int read_matr(float** A)
- {
- char s[81], word[] = " ";
- int error = 0, s1 = 0, s2 = 0;
- printf("Пожалуйста, введите имя файла: ");
- scanf("%s", &s);
- if (strchr(s, '.') == NULL)
- strcat(s, ".txt");
- FILE *f;
- char* strchk = (char*)malloc(1024);
- if ((f = fopen(s, "r")) != NULL) {
- int n = 2; //сюда нужно как-то впихнуть порядок матрицы вместо двойки. Сделаешь - дальше буду пытаться что-то делать.
- if (spellcheck(fgets(strchk, 2000, f), n) == 0) {
- fseek(f, 0, SEEK_SET);
- while (fscanf(f, "%f", &*(*(A + s1) + s2)) != EOF) {
- if (s2 < n - 1) {
- s2++;
- }
- else {
- s2 = 0;
- s1++;
- }
- }
- }
- else {
- error = 1;
- printf_s(" [ERROR] В файле что-то неводомое!\n ");
- }
- }
- fclose(f);
- free(A);
- free(strchk);
- return 0;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- printf("4.18. Дана квадратная матрица A порядка n.\n");
- printf("Получить матрицу (А-E)^2+C, где E – единичная матрица порядка n,\n");
- printf("а элементы матрицы C вычисляются по формуле 1/(i+j+1)\n");
- int n, k = 0, z = 0;
- char ns[] = "Горы, горы, горы, горы", svar[] = "Горы, горы, горы, горы";
- printf("Пожалуйста, выберете вариант записи матрицы нажатием соответствующей клавишы:\n 1) Из файла\n 2) С консоли\n");
- while (strlen(svar) != chkplus(svar))
- {
- printf("Пожалуйста, вводите только 1 или 2: ");
- scanf("%s", &svar);
- if (chkplus(svar) != strlen(svar))
- printf("Вы ввели недопустимые символы. \n");
- else
- {
- k = atoi(svar);
- while ((k != 1) && (k != 2))
- {
- printf("Вы ввели неверное число.\n");
- printf("Пожалуйста, вводите только 1 или 2: ");
- scanf("%s", &svar);
- k = atoi(svar);
- }
- }
- }
- printf("\nk = %i\n", k);
- if (k == 1)
- {
- printf("Пожалуйста, выберете вариант записи матрицы нажатием соответствующей клавишы:\n 1) Запись в файл\n 2) Чтение из файла\n");
- do
- {
- scanf("%s", &svar);
- if (chkplus(svar) != strlen(svar))
- printf("Вы ввели недопустимые символы. \n");
- else
- {
- z = atoi(svar);
- while ((z != 1) && (z != 2))
- {
- printf("Вы ввели неверное число.: ");
- printf("Пожалуйста, вводите только 1 или 2: ");
- scanf("%s", &svar);
- z = atoi(svar);
- }
- }
- } while (chkplus(svar) != strlen(svar));
- }
- printf("z = %i\n", z);
- if (z == 1) //ЗДЕСЬ ЗАПИСЬ В ФАЙЛ
- {
- do
- {
- printf("Пожалуйста, введите размерность квадратной матрицы: ");
- scanf("%s", &ns);
- n = atoi(ns);
- if ((chkplus(ns) != strlen(ns)) || n == 0)
- printf("Вы ввели не натуральное число или недопустимые символы. \n");
- else
- n = atoi(ns);
- } while ((strlen(ns) != chkplus(ns)) || n == 0);
- float** a = (float**)malloc(n*n*sizeof(float));
- for (int i = 1; i <= n; i++)
- a[i] = new float[n];
- entermas(n, a);
- printmasA(n, a);
- float** b = (float**)malloc(n*n*sizeof(float));
- for (int i = 1; i <= n; i++)
- b[i] = new float[n];
- sqr(n, a, b);
- printmasA(n, b);
- save_matr(n, b);
- free(a);
- }
- if (z == 2)//ЗДЕСЬ ЧТЕНИЕ В ФАЙЛ
- {
- float** a = (float**)malloc(n*n*sizeof(float));
- for (int i = 1; i <= n; i++)
- a[i] = new float[n];
- read_matr(a);
- free(a);
- }
- if (k == 2)//А ЗДЕСЬ КОНСОЛЬ
- {
- do
- {
- printf("Пожалуйста, введите размерность квадратной матрицы: ");
- scanf("%s", &ns);
- n = atoi(ns);
- if ((chkplus(ns) != strlen(ns)) || n == 0)
- printf("Вы ввели не натуральное число или недопустимые символы. \n");
- else
- n = atoi(ns);
- } while ((strlen(ns) != chkplus(ns)) || n == 0);
- float** a = (float**)malloc(n*n*sizeof(float));
- for (int i = 1; i <= n; i++)
- a[i] = new float[n];
- entermas(n, a);
- float** b = (float**)malloc(n*n*sizeof(float));
- for (int i = 1; i <= n; i++)
- b[i] = new float[n];
- sqr(n, a, b);
- printmasA(n, b);
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement