#include <math.h>
#include <stdio.h>
const float eps=0.0001;
float F(double x){
return cos(2.0/x)-2*sin(1.0/x)+1.0/x;
}
float Func(double a, double b)
{
float x=(a+b)/2;
float y=F(x);
if (fabs(y)<eps) return x;
else if (F(a)*y<0) Func(a,x);
else Func(x,b);
}
int main()
{
float a, b;
printf("a = ");
scanf("%f",&a);
printf("b = ");
scanf("%f",&b);
if (F(a)*F(b)<0) printf("x = %f\n",Func(a,b));
else printf("Нет сходимости\n");
return 0;
}
Пример - в прилагаемом файле.
PS. Без анализа деления на 0.
Не совсем понял всех условий, например "все значения функций должны быть перенаправлены в качестве параметров", по этому если это условие не выполнено - объясни мне что это такое и я переделаю.
Не делал итераторы цикла динамическими ибо это не имеет смысла, остальные переменные я использовал как указатели.
Тестировал на GNU GCC, всё работает, писал на чистой Си.
Мой вариант решения:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Создание нашей матрицы
int** NewMatrix(int *row, int* col)
{
int** matrix = new int*[*col];
for(int i = 0; i < *col; ++i)
{
matrix[i] = new int[*row];
}
return matrix;
}
//удаление матрицы
void DestroyMatrix(int **matrix, int *col)
{
for(int i = 0; i < *col; ++i)
{
delete[]matrix[i];
}
delete[]matrix;
}
//заполнение матрицы случайными числами
int ** Random(int**matrix, int* col, int *row)
{
srand(time(0));
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
matrix[i][j] = rand()%10;
}
}
return matrix;
}
//вывести матрицу на экран
void ShowMatrix(int**matrix, int* col, int *row)
{
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
//функция сдвигает крайние элементы по кольцу
int **Roll(int**matrix, int *col, int *row)
{
int **mx = NewMatrix(row,col);
//копирование элементов с верхней строки в последний столб
for(int i = 0; i < *col; ++i)
{
mx[i][*col-1] = matrix[0][i];
}
//копирование последнего столба в последнюю строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[*col-1][i] = matrix[j][*col-1];
}
//копирование последней строки в первый столб
for(int i = 0; i < *col; ++i)
{
mx[i][0] = matrix[*col-1][i];
}
//копирование первого столба в первую строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[0][i] = matrix[j][0];
}
//копирование остальных элементов в середине матрицы
for(int i = 1; i < *col-1; ++i)
{
for(int j = 1; j < *row-1; ++j)
{
mx[i][j]=matrix[i][j];
}
}
//удаление лишней матрицы
DestroyMatrix(matrix,col);
return mx;
}
int main()
{
int *row = new int(5);
int *col = new int(5);
int **mx = NewMatrix(row,col);
mx = Random(mx,col,row);
ShowMatrix(mx,col,row);
mx = Roll(mx,col,row);
printf("\nRolling...\n\n");
ShowMatrix(mx,col,row);
DestroyMatrix(mx,col);
delete row;
delete col;
system("pause");
}
Поделитесь своими знаниями, ответьте на вопрос:
Записать команду (с комментарием) пересылки в регистр-аккумулятор содержимого ячейки памяти, которая расположена в сегменте данных с начальным адресом 2000Н и имеет эффективный адрес, равный сумме содержимого регистра ВХ и числа 0001Н. Определить метод адресации. Рассчитать физический адрес ячейки памяти, если (ВХ) ← <0010Н>
Записать команду (с комментарием) пересылки в
регистр-аккумулятор содержимого ячейки памяти,
которая расположена в сегменте данных с начальным
адресом 2000Н и имеет эффективный адрес, равный
сумме содержимого регистра ВХ и числа 0001Н.
Определить метод адресации.
Рассчитать физический адрес ячейки памяти, если (ВХ) ← <0010Н>