Подсчитать общее количество простых чисел среди элементов массивов X (50) и Y (12х5) - C (СИ)
Формулировка задачи:
помогите написать или исправить мою прогу на си
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int masX(int *,int);
int masY(int *,int, int);
int main()
{
int X[50], Y[12][5], itog, prX, prY;
srand (time(0));
prX=masX(&X[0],50);
prY=masY(&Y[0][0],12,5);
itog=prY+prX;
printf("Kolichestvo prostih chisel:%d", itog);
return 0;
}
int masX (int*p,int n)
{
int X[50];
int d,i,j,pr_chx;
for (i=0;i<50;i++)
X[i]=rand()%101-50;
for (i=0;i<50;i++)
{
for (j=2;j<49;j++)
{
if (X[i]%j!=0) continue;
else d++;
}
if (d==0) pr_chx++;
}
return pr_chx;
}
int masY (int*p,int n,int m)
{
int Y[12][5];
int d,i,j,k,pr_chy;
for (i=0;i<12;i++)
{
for (j=0;j<5;j++)
{
Y[i][j]=rand()%101-50;
}
}
for (i=0;i<12;i++)
{
for (j=0;j<5;j++)
{
for (k=2;k<49;k++)
{
if (Y[i][j]%k!=0) continue;
else d++;
}
}
if (d==0) pr_chy++;
}
return pr_chy;
}Решение задачи: «Подсчитать общее количество простых чисел среди элементов массивов X (50) и Y (12х5)»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>
int isSimple(int);
int masX(int *, int);
int masY(int **, int, int);
void showMasX(int *, int);
void showMasY(int **, int, int);
void generateMasX(int *, int);
void generateMasY(int **, int, int);
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "RU");
int itog, prX, prY;
int *X = (int *)calloc(50, sizeof(int));
int **Y = (int **)calloc(12, sizeof(int *));
for(int i=0; i<12; ++i){
Y[i] = (int *)calloc(5, sizeof(int));}
generateMasX(X, 50);
generateMasY(Y, 12, 5);
printf("Массив X:\n");
showMasX(X, 50);
printf("Матрица Y:\n");
showMasY(Y, 12, 5);
prX = masX(X, 50);
prY = masY(Y, 12, 5);
itog = prY +prX;
printf("Количество простых чисел: %d\n", itog);
for(int i=0; i<12; ++i){
free(Y[i]);}
free(Y);
free(X);
printf("Нажмите любую клавишу для выхода\n");
_getch();
return 0;
}
int isSimple(int p)
{
for(int i=2; i*i<p; ++i){
if(p % i == 0){
return 0;}
}
return 1;
}
int masX(int *x, int n)
{
int sum = 0;
for(int i=0; i<n; ++i){
if(isSimple(x[i])){
++sum;}
}
return sum;
}
int masY(int **y, int n, int m)
{
int sum = 0;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
if(isSimple(y[i][j])){
++sum;}
}
}
return sum;
}
void showMasX(int *x, int n)
{
for(int i=0; i<n; ++i){
printf("%d ", x[i]);
}
printf("\n");
}
void showMasY(int **y, int n, int m)
{
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
printf("%d ", y[i][j]);
}
printf("\n");
}
}
void generateMasX(int *x, int n)
{
srand(time(NULL));
for(int i=0; i<n; ++i){
x[i] = rand() % 101;
}
}
void generateMasY(int **y, int n, int m)
{
srand(time(NULL));
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
y[i][j] = rand() % 101;
}
}
}
Объяснение кода листинга программы
Код представляет собой программу, которая подсчитывает количество простых чисел в двух массивах. Список функций и их назначение:
isSimple(int p)- проверяет, является ли числоpпростым.masX(int *x, int n)- подсчитывает количество простых чисел в массивеx.masY(int **y, int n, int m)- подсчитывает количество простых чисел в матрицеy.showMasX(int *x, int n)- выводит элементы массиваxчерез пробел.showMasY(int **y, int n, int m)- выводит элементы матрицыyчерез пробел.generateMasX(int *x, int n)- генерирует случайные числа в заданном диапазоне и заполняет ими массивx.generateMasY(int **y, int n, int m)- генерирует случайные числа в заданном диапазоне и заполняет ими матрицуy. В функцииmain()создаются два массива:Xи матрицаY. Затем с помощью функцийgenerateMasX()иgenerateMasY()эти массивы заполняются случайными числами. После этого выводятся на экран с помощью функцийshowMasX()иshowMasY(). Затем с помощью функцийmasX()иmasY()подсчитывается количество простых чисел в массивеXи матрицеYсоответственно. Результаты сохраняются в переменныхprXиprY. Наконец, суммаprXиprYсохраняется в переменнойitog, и выводится на экран с помощьюprintf(). После этого освобождаются все выделенные динамические памяти и программа завершается.