Вывести на печать все пары индексов массивов, для которых выполняется условие - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Стрессия, выживаем как можем...

Задание:

Задать 2 динамические одномерные массива а и b, размерностью n. Вывести на печать все пары индексов, для которых (a[i]*b[i])>10. Подсчитать число пар и сумму этих произведений.
#include <stdio.h>
#include <stdlib.h>
//прототипы функций
int *mem (int n);
void vvod (int *mas1, int n);
void pr (int *mas1, int *mas2, int n);
void show(int *mas1, int n);
 
void main()
{
    int n, rez;
    int*mas1, *mas2;
    printf ("\n Vvod razmera massivov:");
    scanf ("%d", &n);
    mas1=mem (n);
    mas2=mem (n);
    printf ("\n Vvod elementov massiva 1");
    vvod(mas1,n);
    printf ("\n Vvod elementov massiva 2");
    vvod(mas2,n);
    printf("\n Isx massivy:");
    show(mas1, n);
    show(mas2, n);
    free(mas1);
    free(mas2);
    //rez=pr(mas1,mas2, n); 
}
 
int*mem (int n)
{
    int *m;
    m=(int*)calloc(n, sizeof (int));
    return m;
}
 
void vvod (int*mas, int n)
{
    for (int i=0; i<n; i++)
    scanf ("%d", mas +i);
}
 
void pr (int*mas1, int*mas2, int n)
{
    int a=0, par=0, sum=0;
    for (int i=0; i<n; i++)
    {
        a=(*(mas1+i))*(*(mas2+i));
        if (a>10)
        {
            printf("%5d", i);
            par++;
            sum+=a;
        }
    }
    printf ("\nSumma proizvedenij=%5d", sum);
    printf("\nKoli4estvo par=%5d", par);
}
 
void show (int mas, int n)
{
    for (int i=0; i<=n; i++)
        printf ("%5d", (mas+1));
}

Решение задачи: «Вывести на печать все пары индексов массивов, для которых выполняется условие»

textual
Листинг программы
/* Задать 2 динамические одномерные массива а и b, размерностью n.
Вывести на печать все пары индексов, для которых (a[i]*b[i])>10.
Подсчитать число пар и сумму этих произведений. */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/* инициализация массивов */
void init(int *arr, const int size);
/* вывод на экран */
void print(int *arr, const int size);
/* выводит на печать все пары индексов, для которых (a[i]*b[i])>10 */
/* индексы запоминаются в результирующий массив */
void calcAndPrintIndices(int *arr1, int *arr2, const int size, int *resultArr,
    int *sizeResult);
/* подсчитывает сумму произведений пар, у которых индексы указаны в indeces */
int sumPairs(int *arr1, int *arr2, int *indeces, const int sizeIndeces);
 
int main(void)
{
    int sizeA, sizeB;     /* размеры динамиечских массивов */
    int *a, *b, *indeces; /* динамические массивы a, b и массив индексов */
    int minSize;          /* меньший из размеров массивов */
    int indecesNumber;    /* количество индексов, для которых выполняется условие */
    do
    {
        printf("Enter a size: ");
        scanf("%d", &sizeA);
        printf("Enter b size: ");
        scanf("%d", &sizeB);
        /* обработка неверных данных */
        if (sizeA <= 0 || sizeB <= 0)
            printf("Incorrect input. Size must be greater than 0\n");
    } while (sizeA <= 0 || sizeB <= 0);
 
    minSize = sizeA < sizeB ? sizeA : sizeB; /* вычисляем наименьший размер */
 
    /* выделение памяти */
    a = malloc(sizeA * sizeof(*a));
    b = malloc(sizeB * sizeof(*b));
    indeces = malloc(minSize * sizeof(*indeces));
 
    /* инициализация массивов */
    srand(time(NULL)); /* инициализируем ГПСЧ */
    init(a, sizeA);
    init(b, sizeB);
 
    /* вывод массивов на экран */
    printf("A(%2d): ", sizeA);
    print(a, sizeA);
    printf("B(%2d): ", sizeB);
    print(b, sizeB);
 
    /* запоминаем все пары и выводим их на экран */
    printf("Pair of indeces for which (a[i]*b[i])>10: ");
    calcAndPrintIndices(a, b, minSize, indeces, &indecesNumber);
    printf("\nAmount: %d\n", indecesNumber);
 
    /* подсчитываем сумму произведений пар */
    printf("Multiply of this pairs: %d\n",
        sumPairs(a, b, indeces, indecesNumber));
 
    /* освобождение памяти */
    free(a);
    free(b);
    free(indeces);
    return 0;
}
 
void init(int *arr, const int size)
{
    int i;
    for (i=0; i < size; i++)
        arr[i] = rand() % 10;
}
 
void print(int *arr, const int size)
{
    int i;
    for (i=0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}
 
void calcAndPrintIndices(int *arr1, int *arr2, const int size, int *resultArr,
    int *sizeResult)
{
    int i, index = 0;
    for (i=0; i < size; i++)
        if (arr1[i] * arr2[i] > 10)
        {
            printf("%d ", i);
            resultArr[index++] = i;
        }
    /* запоминаем количество индексов, которые подошли под условие задачи */
    *sizeResult = index;
}
 
int sumPairs(int *arr1, int *arr2, int *indeces, const int sizeIndeces)
{
    int i, result = 0;
    for (i=0; i < sizeIndeces; i++)
        result += (arr1[indeces[i]] * arr2[indeces[i]]);
    return result;
}

Объяснение кода листинга программы

  1. Объявлены три функции: init, print и calcAndPrintIndices.
  2. В функции main пользователь вводит размеры массивов a и b.
  3. Выделяется память под массивы a, b и indeces.
  4. Массивы a и b инициализируются случайными значениями от 0 до 9.
  5. Выводятся массивы a и b на экран.
  6. В функции calcAndPrintIndices происходит поиск пар индексов, для которых (a[i]*b[i])>10.
  7. Выводится на экран найденная пара индексов.
  8. В функции sumPairs происходит подсчет суммы произведений найденных пар.
  9. Выводится на экран количество найденных пар и их сумма.
  10. Выделяемая память освобождается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы