Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 24
1

Сравнение одномерного и двумерного массивов

21.04.2019, 17:19. Показов 2108. Ответов 4

Задание: Массив 5х100 найти средние арифметические значения всех элементов каждой строки матрицы, которые являются простыми числами.
Моя идея: задать двумерный массив,заполняющийся случайными числами. Создать одномерный массив,содержащий простые числа, сравнить оба массива. Делать это нужно построчно,как я понимаю. Если в двумерном массиве попадаются простые числа, записать их в динамический массив, посчитать количество, потом найти среднеарифметическое каждой строки и записать в отдельный массив.
Но я совершенно не понимаю,как это можно сделать. Что-то пыталась сообразить, но не получается. Помогите, пожалуйста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <math.h>
#include <Windows.h>
#include <stdbool.h>
 
int main()
{
    const size_t M = 5;
    const size_t N = 100;
    srand(time(NULL));
 
    int a[M][N];
    int b[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
 
    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        a[i][j] = rand()%100+1;
    }
    //view
    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        printf("%d\t",a[i][j]);
        printf ("\n");
 
    }
 
void f(int a[], size_t m, size_t n )
{
    for( size_t i = 0; i < m; i++ )
    {
        for( size_t j = 0; j < n; j++ ){
            //a[i * n + j ] = i * n + j;
            int f=0;
            int k=1;
            int b[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
            while((k<=m)&&(f=0)){
                if(a[i][j]==b[k]) f==1;
                else k++;
            }
        }
 
    }
}
 
 
    printf("Позиции простых элементов и они сами:\n");
    f(int *a , M, N );
 
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2019, 17:19
Ответы с готовыми решениями:

Составление одномерного массива из главной диагонали двумерного
Помогите пожалуйста с задачей: Написать функцию, которая получала бы двумерный динамический массив...

Сравнение 2х массивов строк
Задача Есть массив №1 в котом 13 строк прогоняя его через функцию надо сравнить с массивом №2...

Сравнение строковых массивов
Здравствуйте! Задача такая Написать функцию, печатающую строку-вопрос (ее аргумент), принимающую...

Сравнение значений элементов 3-х массивов
Psych Up's Eigenvalues Мой код: #include &lt;stdio.h&gt; int main(){ int n1,n2,n3,i,j,k; int ch=0;...

4
Мозгоправ
1729 / 1023 / 468
Регистрация: 01.10.2018
Сообщений: 2,136
Записей в блоге: 2
21.04.2019, 22:16 2
Лучший ответ Сообщение было отмечено wakizashiii как решение

Решение

Цитата Сообщение от wakizashiii Посмотреть сообщение
Моя идея: задать двумерный массив,заполняющийся случайными числами.
Против этого спорить не буду. Остальное - уж как-то слишком сложно и, главное, ненадёжно.
Вы полагаете, что числа в исходном массиве в диапазоне 1..100. Откуда такая уверенность? В задаче об этом ничего не сказано. Следовательно массив с простыми числами может быть достаточно большим. Неподъёмно большим.

Поэтому можно сделать гораздо проще.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int is_prime(int);  // прототип функции проверки числа на простоту
    /* ... */
 
    int arr[5][100];
    /* ... */
 
    int i, j, sum, qty;
    for (i = 0; i < 5; ++i) {
        sum = qty = 0;  // сумма и количество простых чисел
        for (j = 0; j < 100; ++j)
            if (is_prime(arr[i][j])) {
                sum += arr[i][j];
                ++qty;
            }
        printf("среднее арифметическое по строке %d равно %lf\n", i, (double)sum / qty);
    }
К этой радости остаётся только дописать функцию is_prime(), которая будет возвращать 0, если число не простое. Погуглите на эту тему: есть реализации попроще, есть побыстрее, на любой вкус.
1
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 24
22.04.2019, 10:51  [ТС] 3
L0M, написала функцию для поиска простых чисел, но она почему-то неправильно работает,хотя эта функция с просторов интернета везде помечена как верный ответ для подобных задач. Подскажите,пожалуйста, в чем проблема? уже разные вариации испробовала
C
1
2
3
4
5
6
7
8
9
10
11
   int is_prime(int n)
    {
        int i;
        if (n <= 1) return false;
 
            for (i=2; i<=sqrt(n); i++){ // c i<n, i<=n/2 тоже некорректно работает 
                if ((n % i) == 0) return false;
            return true;}
 
 
    }
0
21 / 17 / 4
Регистрация: 31.05.2016
Сообщений: 67
22.04.2019, 11:29 4
А если переставить закрывающую операторную скобку?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int is_prime(int n)
    {
        int i;
        if (n <= 1) return false;
 
            for (i=2; i<=sqrt(n); i++)
              { 
                if ((n % i) == 0) return false;
              }
            return true;
 
 
    }
1
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 24
22.04.2019, 12:48  [ТС] 5
Lady C,заработало! Спасибо большое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2019, 12:48

Сравнение массивов в одну строку
Можно ли массивы int a, b на Си присвоить как a=b или сравнить a==b

Сравнение двух массивов чисел в эксель
Приветствую всех. Нужна помощь с экселем. Есть два массива чисел, нужно найти и похожесть в...

Сравнение двух массивов - двумерного и одномерного
Как сравнить каждое значение двумерного массива, со всеми значениями одномерного массива, на...

Произведение одномерного и двумерного массивов
В общем, есть пример Σ(Ai * Bij) * X + Σ(Ci) * Y И следующие условия - Реализуйте вычисление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.