Вывести на печать все пары индексов массивов, для которых выполняется условие - 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; }
Объяснение кода листинга программы
- Объявлены три функции:
init
,print
иcalcAndPrintIndices
. - В функции
main
пользователь вводит размеры массивовa
иb
. - Выделяется память под массивы
a
,b
иindeces
. - Массивы
a
иb
инициализируются случайными значениями от 0 до 9. - Выводятся массивы
a
иb
на экран. - В функции
calcAndPrintIndices
происходит поиск пар индексов, для которых (a[i]*b[i])>10. - Выводится на экран найденная пара индексов.
- В функции
sumPairs
происходит подсчет суммы произведений найденных пар. - Выводится на экран количество найденных пар и их сумма.
- Выделяемая память освобождается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д