close

Вход

Забыли?

вход по аккаунту

?

15ПрилВ (2)

код для вставкиСкачать
Текст программы
КОД 2.cpp:определяет точку входа для консольного приложения.
Симметричная квадратная матрица А порядка n задана последовательностью n(n+1)/2
чисел, аналогично правой треугольной матрице (см.задачу 716). Кроме этой
последовательности дан вектор b с n элементами.
Найти вектор А*b
задача 716.
Правая треугольная матрица А порядка n задана в виде последовательности n(n+1)/2
чисел, сначала идет n элементов первой строки, затем n-1 элемент второй строки ,
начиная со второго элемента, и т.д. (из последней n-й строки берется только n-й элемент).
Кроме этой последовательностидан вектор b с n элементами. Найти вектор Аb.
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include <ctype.h>
#include <stdlib.h>
int r(int a, int f, int k);//a - ограничение по максимальному// f - на ввод переменных(0 тока
положительные без 0 и 1 когда можно все)// k - количество знаков
void f1(int *s, int *b, int n)
{
int i,j, *a;
a=(int*)calloc(n*n,sizeof(int));
for(i = 0; i < 1; i++)
for(j = i; j < n; j++)
a[i*n+j] = 0;
printf("\nЗаполняем матрицу a");
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
printf("\n[%d][%d]= ",i+1,j+1);
a[i*n+j]=r(10000,1,6);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
a[i*n+j]=a[j*n+i];
}
}
printf("\nЗаполняем матрицу b");
for(i=0;i<n;i++)
{
printf("\n[%d]= ",i+1);
b[i]=r(10000,1,6);
}
printf("\nМатрицы");
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
22
int k=0;
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%7d",a[i*n+j]);
s[k]=a[i*n+j];
k++;
}
printf(" |%7d",b[i]);
}
_getch();
free(a);
}
void f2(int *s,int *b, int *c, int n)
{
int i,j, *a;
a=(int*)calloc(n*n,sizeof(int));
int k=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i*n+j]=s[k];
k++;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i]+=a[i*n+j]*b[j];
}
}
free(a);
}
void f3(int *c, int n)
{ int k=0;
int i;
printf("Полученый ответ:");
for(i=0;i<n;i++)
{
printf("\n%7d",c[i]);
}
_getch();
}
void f4(void)
{
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
23
printf("Задача:\n\nСимметричная квадратная матрица А порядка n задана
последовательностью n(n+1)/2 чисел, аналогично правой треугольной матрице (см.задачу
716). Кроме этой последовательности дан вектор b с n элементами. Найти вектор
А*b\n\nЗадача 716.Правая треугольная матрица А порядка n задана в виде
последовательности n(n+1)/2 чисел, сначала идет n элементов первой строки, затем n-1
элемент второй строки , начиная со второго элемента, и т.д. (из последней n-й строки
берется только n-й элемент). Кроме этой последовательностидан вектор b с n элементами.
Найти вектор Аb.");
_getch();
}
void f5(void)
{
printf("Выполнил:\n Караваев Сергей (ТК - 11)");
_getch();
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
int i, v, *a, *b, *c, fl=0,n,j,k=0;
while(1)
{
system("cls");
printf("Меню"
"\n1 Ввод данных"
"\n2 Решение задачи"
"\n3 Вывод решения"
"\n4 Задача"
"\n5 Кто выполнил"
"\n6 Выход");
printf("\nВаш выбор: ");
v=r(6,0,1);
system("cls");
switch(v)
{
case 1:
printf("Размерность матрицы:");
n=r(100,0,3);
a=(int*)calloc(n*n,sizeof(int));
//for(i=0; i<n; i++) a[i]=(int*)calloc(n,sizeof(int));
b=(int*)calloc(n,sizeof(int));
f1(a,b,n);
fl=1;
break;
case 2:
if (fl>0)
{
c=(int*)calloc(n,sizeof(int));
f2(a,b,c,n);
fl=2;
}
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
24
else
{
printf("Не заданы начальные параметры");
_getch();
}
break;
case 3:
if (fl>1)
{
printf("Начальные данные: ");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
printf("%4d",a[k]);
k++;
}
printf(" | %4d",b[i]);
}
printf("\n");
f3(c,n);
}
else
{
if (fl==0)
{
printf("Не введены данные и не
произведено решение");
_getch();
}
else
{
printf("Не произведено решение");
_getch();
}
}
break;
case 4:
f4();
break;
case 5:
f5();
break;
case 6: return 0;
}
}
}
int r(int a, int f, int k) //Функиция защиты от некорректного ввода
{
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
25
//Объявления переменных
int c, num, i = 0,f1=0;
char str[80]; //str - массив для записи числа
while ( (( c = _getch()) != 13)||(i==0)) //Все вводимые числа записываются в
массив до нажатия Enter(13 по ASCII)
//Защита не позволяет записать 0 на 0 позицию массива (т.к. это не
рационально и не разумно)
{
if (i<k)
{
if (i==0)
{
if (f>0)
if ((c=='-')&&(f1<1))
{
f1++;
_putch( c );
}
if (c!=48) //под 0
{
if ( isdigit( c ) )
{
str[i++] = (char) c;
_putch( c );
}
}
if ((f>0)&&(c==48))
{
if ( isdigit( c ) )
{
str[i++] = (char) c;
_putch( c );
}
}
} else
{
if ( isdigit( c ) )
{
str[i++] = (char) c;
_putch( c );
}
}
}//---------------------------------------------------//Backspace
if ((c==8)&&((i>0)||(f1==1)))
{
if (i>0) i--;
else f1--;
printf("\b");
printf(" ");
printf("\b");
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
26
}
}
str[i] = '\0'; //Записывает конечный элемент массива
num = atoi( str ); //Преобразование массива в число
if (num>a) //Так как тип integer не безграничный, то данное условие
проверяет на переполнение
{
printf("\nСлишком большое число, введите заново.\n");
num=r(a,f,k);
}
if (f1==1)
num=num-2*num;
return num; //Возврат числа
}
Лист
Изм. Лист
№ докум.
Подпись Дата
ТПЖА.12116-01 12 01
27
Документ
Категория
Программирование, Базы данных
Просмотров
19
Размер файла
48 Кб
Теги
15прилв
1/--страниц
Пожаловаться на содержимое документа