Лабораторная работа по Си функции

Цель работы

Изучение правил составления и написания функций и интерфейса функционального модуля

Лабораторное задание

Составить программу, которая выполняет следующие действия:
а) ввод исходных массивов;
б) вывод исходных массивов;
в) обработку массивов в соответствии с заданием;
г) вывод результатов с соответствующими комментариями.
Пункты а), б), в), г) оформить в виде функций. Глобальные данные в программе не использовать.
Выполнить программу и оценить правильность ее работы.
В программе необходимо определить указатели. Все обращения к элементам массивов (одномерных и двумерных) производить с помощью указателей.
a). Задан массив А(20). Определить знакопеременную сумму а– а2 + а3 – а4 + ….
б). Просуммировать элементы матрицы Х(6,8), сумма индексов которых равна заданной константе К.


Описание метода решения задачи

Исходная программа лабораторной работы разбивается на 7 функций:

1)Ввод массива а[20]
2)Ввод матрицы х[6][8]
3)Вывод массива а[20]
4)Вывод матрицы х[6][8]
5)Выполнение расчетов для массива а[20] и вывод результата
6)Выполнение расчетов для матрицы x[6][8] и вывод результата
7)Главная функция в которой реализуются предыдущие в следующей последовательности: 1,3,5,2,4,6.

Листинг

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale>
void In(double a[20], int size)
{
      int i;
      for(i = 0; i < size; i++)
      {
            a[i] =rand()%(9999+9999)-9999;
            a[i]=a[i]/100;
      }
}
void In2(double x[6][8],int y,int z)
{
      int i,j;
      for(i=0; i<y; i++){
            for(j=0; j<z; j++){
                  x[i][j]=rand()%(9999+9999)-9999;
                  x[i][j]=x[i][j]/100;
            }
      }
}
void Out(double a[20],int size)
{
      for (int i = 0; i < size; i++)
            printf ("A[%d]=%2.2f \n",i,a[i]);
}
void Out2(double x[6][8],int y,int z)
{
      printf ("\n");
      for(int i=0; i<y; i++){
            for(int j=0; j<z; j++){
                  printf("%7.2f",x[i][j]);
            }
            printf("\n");
      }
}
void task(double a[20],int size)
{
      double      *pa=&a[0],s=0;
      for (int i = 0; i < size; i++)
      {
            if (i % 2 == 0) s+= *pa;
            else s-= *pa;
            pa++;
      }
      printf("\nЗнакопеременная сумма элементов массива равна: %3.2f\n", s);
}
void task2(double x[6][8], int y, int z)
{
      double s1=0;
      const unsigned k=3;
      double *px=&x[0][0];
      for(int i=0; i<y; i++)
      {    
            for(int j=0; j<z; j++)
            {
                  if ((i+j)==k) s1+=*px;
                  px++;
            }
      }
      printf("\n сумма~%.2f",s1);
}
      void main()
      {
            setlocale(LC_ALL, "Russian");
            double a[20],x[6][8];
            In(a,20);
            Out(a,20);
            task(a,20);
            In2(x,6,8);
            Out2(x,6,8);
            task2(x,6,8);
            getch();

      }

Пояснительный текст к программе

Переменные а[20],x[6][8]­­­­­ — это массив А и матрица Х заполняемые в ходе программы.
Переменные i,j — это переменные с помощью которых происходит обращение к элементам массивов.
Константа k — сумма координат.

Указатели *pа — на массив а, *px — на матрицу x

Результаты работы программы

Расчет суммы вручную

S=- 99.58 – (84.68) + (-36.65) – (-34.97) + 91.70 - 57.25 + 14.79 – (-6.39) +
+(- 30.35) - (-55.33) + (-42.94) – (-18.52) + (-67.16) – 68.28 + (-0.38) –
- (-95.08) + (-70.04) – 19.43 + (-51.72) – (-45.63) = -266.05
S1=-98.46 – 45.52 -36.98+76.74=-104.22
Результат части А=-8359
Результат части Б=39069

Комментариев нет:

Отправить комментарий