Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42

Найти наименьшее общее кратное всех элементов в выделенной области матрицы

03.03.2011, 14:09. Показов 2278. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи. Нужна помощь в реализации матрица, которая имеет фигуру, которая движется по определенному закону. Что имеем: закон движения такой

извиняюсь за груботу работы - плохой из меня художник. итак: на пересечении x и y - есть точка a(x0;y0);
её мы задаем в качестве точки отсчета. нужно для каждого элемента из области определения этой фигуры(т.е. все закрашенные) найти наименьшее общее кратное всех элементов в выделенной области. размер матрицы вводится, координаты точки отсчета тоже.
матрица НЕ обязательно 4x4. закон движения такой: от первого столбца все элементы включаются до столбца y. потом разветвление. вчера долго бился и не смог нормально реализовать. вот то, что получилось:

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
#include <stdio.h>
#include <conio.h>
/* номер 14 */
 
int main()
{
    int i,j,N,M,x,y,k,a[100][100],b[100];
    printf("Vvedite N,M: ");
    scanf("%d%d",&N,&M);
    printf("Vvedite x,y: ");
    scanf("%d%d",&x,&y);
    for (i = 1; i <= N; i++)
        for (j = 1; j <= M; j++) {
            printf("\nVvedite a[%d][%d]: ",i,j);
            scanf("%d",&a[i][j]);
        }
    for (j = 1; j <= y; j++)
        b[j]=a[x][j];
    i=x;
    for (j = y+1; j <= 10; j++) 
    {
        b[j]=a[i-1][j];
        k=j; }
    for (k=k+1,j=y+1; j<=M; j++,k++) 
         b[k]=a[i+1][j];
    for (i = 1; i <= N; i++)
        printf("b[%d]=%d\n",i,b[i]);
    getch();
    return 0;
}
Заранее большое спасибо.

Добавлено через 12 часов 50 минут
извиняюсь за некорректность: фигуру, которая задается по определенному закону.

 Комментарий модератора 
Прикрепляйте картинки к сообщениям.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2011, 14:09
Ответы с готовыми решениями:

Найти наименьшее общее кратное всех чисел, введенных с клавиатуры
Всем привет, вообщем мне нужно с помощью функции поиска НОК(Наименьшее общее кратное) 2 чисел, найти НОК всех введенных чисел с клавиатуры,...

Найти НОК (наименьшее общее кратное) чисел N и M
Задание : Найти НОК (наименьшее общее кратное) чисел N и M , числа должен вводить пользователь и нельзя делить на 0 и на негативные числа .

Найти НОК (наименьшее общее кратное) чисел a и b
Помогите пожалуйста решить задачу. Найти НОК (наименьшее общее кратное) чисел a и b.

8
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
03.03.2011, 20:55
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

различные мелкие проверки я думаю сами напишите)
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
57
58
59
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "vector"
/* номер 14 */
int NOK(int a, int b);
int main()
{
    int N,M,x,y,a[100][100];
    printf("Vvedite N,M: ");
    scanf("%d%d",&N,&M);
    printf("Vvedite x,y: ");
    scanf("%d%d",&x,&y);
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("\nVvedite a[%d][%d]: ",(i + 1), (j + 1));
            scanf("%d",&a[i][j]);
        }
    }
    int tmpX = (x - 1) - 1;
    int tmpY = (y - 1) + 1;
    std::vector <int> vect;
    while ((tmpY < M) && (tmpX >= 0)) {
        vect.push_back(a[tmpX--][tmpY++]);
    }
    tmpX = (x - 1) + 1;
    tmpY = (y - 1) + 1;
    while ((tmpY < M) && (tmpX < N)) {
        vect.push_back(a[tmpX++][tmpY++]);
    }
    for (int i = 0; i < y; ++i) {
        vect.push_back(a[x - 1][i]);
    }
 
    int result = vect[0];
 
    for (int i = 1; i < vect.size(); ++i) {
        if (result >= vect[i]) {
            result = NOK(result, vect[i]);
        } else {
            result = NOK(vect[i] ,result);
        }
    }
    
    for (int i = 0; i < vect.size(); i++)
        printf("b[%d]=%d\n",(i + 1), vect[i]);
 
    printf("NOK = %d\n",result);
    getch();
    return 0;
}
int NOK (int a, int b) {
 
    int result = a;
    while(result % b != 0) {
        result +=a;
    }
    return result;
}
1
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
03.03.2011, 22:53  [ТС]
дико извиняюсь, но сие чудо нужно написать на си и без использования пространства имен.
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
03.03.2011, 23:22
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
57
58
59
60
61
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
 
/* номер 14 */
int NOK(int a, int b);
int main()
{
    int N,M,x,y,a[100][100], b[100], it = 0;
    printf("Vvedite N,M: ");
    scanf("%d%d",&N,&M);
    printf("Vvedite x,y: ");
    scanf("%d%d",&x,&y);
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("\nVvedite a[%d][%d]: ",(i + 1), (j + 1));
            scanf("%d",&a[i][j]);
        }
    }
    int tmpX = (x - 1) - 1;
    int tmpY = (y - 1) + 1;
    
    while ((tmpY < M) && (tmpX >= 0)) {
        b[it++] = (a[tmpX--][tmpY++]);
    }
    tmpX = (x - 1) + 1;
    tmpY = (y - 1) + 1;
    while ((tmpY < M) && (tmpX < N)) {
        b[it++] = (a[tmpX++][tmpY++]);
    }
    for (int i = 0; i < y; ++i) {
        b[it++ ]= (a[x - 1][i]);
    }
 
    int maxindex;
    int result = b[0];
 
    for (int i = 1; i < it; ++i) {
        
        if (result >= b[i]) {
            result = NOK(result, b[i]);
        } else {
            result = NOK(b[i] ,result);
        }
    }
    
    for (int i = 0; i < it; i++)
        printf("b[%d]=%d\n",(i + 1), b[i]);
 
    printf("res =%d\n",result);
    getch();
    return 0;
}
int NOK (int a, int b) {
 
    int result = a;
    while(result % b != 0) {
        result +=a;
    }
    return result;
}
1
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
04.03.2011, 22:06  [ТС]
мм.. а можно комментарии к тексту ? а то принцип действия не очень понятен ( заранее большое спасибо.
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
04.03.2011, 23:14
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
 
/* номер 14 */
int NOK(int a, int b);
int main()
{
    int N,M,x,y,a[100][100], b[100], it = 0; //b[] массив числе из матрицы, которые входят в область определения
    printf("Vvedite N,M: ");
    scanf("%d%d",&N,&M);
    printf("Vvedite x,y: ");
    scanf("%d%d",&x,&y);
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("\nVvedite a[%d][%d]: ",(i + 1), (j + 1));
            scanf("%d",&a[i][j]);
        }
    }
    //движение вверх после тожки х, у 
    //формируется массив элементов матрицы, которые вошли в область определения
    int tmpX = (x - 1) - 1; 
    int tmpY = (y - 1) + 1;
    
    while ((tmpY < M) && (tmpX >= 0)) {
        b[it++] = (a[tmpX--][tmpY++]);
    }
    //движение вниз после тожки х, у
    tmpX = (x - 1) + 1;
    tmpY = (y - 1) + 1;
    while ((tmpY < M) && (tmpX < N)) {
            b[it++] = (a[tmpX++][tmpY++]);
    }
    
    //добавляются в массив все элементы матрицы строки X до столбца Y
    for (int i = 0; i < y; ++i) {
            b[it++ ]= (a[x - 1][i]);
    }
    
    // после этого мы имеем массив элементов матрицы, которые вошли в облась определения
    // кол-во эл-тов массива it-1
    int maxindex;
    // допустим НОК  result = 1ому элементу массива
    int result = b[0];
 
    for (int i = 1; i < it; ++i) {
            // если result >= текущего эл-та массива 
            // то передаём его в функцию 1ым параметром иначе 2ым
            if (result >= b[i]) {
                    result = NOK(result, b[i]);
            } else {
                    result = NOK(b[i] ,result);
            }
    }
    
    for (int i = 0; i < it; i++)
        printf("b[%d]=%d\n",(i + 1), b[i]);
 
        printf("res =%d\n",result);
    getch();
    return 0;
}
// функция определения наименьшего общего кратного для двух чисел
int NOK (int a, int b) { 
    // т.к. 1ый параметр большее число
    // допускаем что оно и есть искомое НОК (result)
    int result = a;
    while(result % b != 0) { 
        result +=a; //прибавляем к result болшее число, до тех пор пока наш результат не поделится без остатка на меньшее число
                    //пример a = 4 b = 3 -> до вкхода в цикл result = 4
                    // 1ая итерация result = 8 - оно не делится без остатка на 3 поэтому
                    // 2ая итерацая result = 12 - всё ОК - возвращаем найденное НОК
    }
    return result;
}
единственное - я не помню, что делается если отрицательный эл-т. если память не изменяет их берут по модулю - тогда добавите обработку отрицательных чисел при заполнении матрицы
0
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
04.03.2011, 23:33  [ТС]
извиняюсь за весьма вероятно глупый вопрос, но вот эти строки меня с толку сбивают напрочь:

C
1
2
tmpX = (x - 1) + 1;
tmpY = (y - 1) + 1;
зачем делать минус один, а потом плюс один у tmpx ? нам же нужно только tmpx=x+1;

еще вопрос: у вас написана функция для поиска нок у двух чисел. суть задачи же: найти наименьшее общее кратное для всех чисел из области определения(т.е. для всех одновременно)
или я чего-то не допонимаю и функция не возвращает минимальное нок из двух элементов проверяя как пары наш массив b[] ?
0
26 / 26 / 12
Регистрация: 18.02.2011
Сообщений: 51
04.03.2011, 23:47
не совсем, т.к. пользователь вводи номер столбца и строки начиная с 1 а не с нуля, а массивы у нас все сформированы с 0,:
1 2 3
4 9 3
4 5 6
х = 2, у =2 значит это девятка но в массиве индексы будут на 1 меньше т.е. a[x-1][y-1] = 9
это что касается минуса в скобках.
x = (..) -1 строка перед строкой, введённым пользователем
x = (..) +1 строка после

Функция возвращает НОК двух чисел, но кто сказал, что её нельзя использовать для массива чисел?
пример работы (псеводкодом):

массив : 2 5 20 4
res = 2
1ая итерация
res = НОК (5,res) -> res = 10
2ая итерация
res = НОК (20, res) -> res = 20
3тья итерация
res = НОК (res, 4) -> res = 20

как видите, хоть функция и возвращает НОК двух чисел, но с пом неё можно посчитать НОК массива, за счёт того, что именно мы туда передаём
1
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
05.03.2011, 16:46  [ТС]
N=4, M=4
x=1, y=3

ошибка программы, что весьма странно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2011, 16:46
Помогаю со студенческими работами здесь

Найти наименьшее общее кратное набора из N целых чисел, лежащих в диапазоне от 1 до 1000
Найти наименьшее общее кратное набора из N целых чисел, лежащих в диапазоне от 1 до 1000. Под наименьшим общим кратным набора чисел...

Найти количество отрицательных элементов в выделенной области
Вечер добрый! Нужна помощь: написал программу для решения следующей задачи(прикреплена фотография). После ввода массива с клавиатуры в...

Найти наименьшее общее кратное всех элементов массива
Дан массив из 10 элементов. Необходимо написать программу, которая вычисляет наименьшее общее кратное всех элементов массива. Помогите...

Найти наименьшее общее кратное элементов целочисленного массива
Помогите решить задачку Описать функцию NOKN(A,N) целого типа, находящую наименьшее общее кратное элементов целочисленного массива A...

Вывести на экран 5 случайных элементов массива и найти наименьшее общее кратное
Вывести на экран 5 случайных эл-ов массива и найти наименьшее общее кратное. Желательно с комментариями


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru