Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 2
Регистрация: 19.12.2011
Сообщений: 19

Передача динамических массивов в функции

19.03.2012, 00:09. Показов 1461. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требования:Программа должна демонстрировать два варианта доступа к элементам массивов во вспомогательной функции: с помощью приведенного индекса и с использованием двух индексов для матриц.Необходимый объем памяти под массив указателей и элементы матрицы выделять динамически.Главная функция должна осуществлять несколько вызовов вспомогательной функции (которая выполняет основной алгоритм) с передачей массивов с разным количеством элементов. Заполнение массивов и отображения результатов выполняет главная функция.

Дана прямоугольная матрица вещественных чисел порядка m*n . Установить, имеется ли в данной матрице хотя бы одна строка, в которой расположены подряд не менее К элементов, равных заданному числу Х. Вывести исходную матрицу и индекс найденной строки с комментарием.

Помогите,пожалуйста,с задачкой. Алгоритм понятен (ниже), но не понятно,как использовать двойные указатели и одинарные. и как работать с ними во вспомогательных функциях.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int count; 
int x=5;
int k=3;
bool yes = false; 
for (int i=0; i<n; i++){    
count = 0; 
for (int j=0; j<m; j++){ 
if (a[i][j] == x){ 
count++; 
if (count == k) { 
yes = true; 
break;} 
 } 
  else count = 0; 
  } 
  if (yes) break;
} 
if (yes) cout << i << " - Найденная строка"; 
     else cout << endl << " Не имеется."; 
getch(); 
getch(); 
return 0; 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2012, 00:09
Ответы с готовыми решениями:

Передача динамических массивов в функции. А точнее отдельных частей
Вопрос до жути простой, но мне не понять. К примеру я хочу передать в функцию отдельно одну строку, сумму элементов которой мне надо...

Способы передачи параметров в функции. Реализация динамических двумерных массивов
в программе написать функции для сортировки массива. Подсчитать количество перестановок элементов массива при выполнении сортировки;

Разработать программу, содержащую две функции: • функция обработки одномерных динамических массивов согласно варианту за
Написал первую часть, но с ошибками, нужно дописать вторую и исправить код, но не знаю как, только начинаю программировать, соответственно...

2
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
19.03.2012, 01:08
Подойдет?
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
bool rowHasNOfK(int *array, int size, int n, int k) {
  for (int i = 0; i < size; ++i) {
    if (array[i] == k) {
      int counter = 0;
      for (; i < size && array[i] == k; ++i)
        ++counter;
      if (counter >= n) return true;
    }
  }
  return false;
}
 
int matrixHasNOfK(int **matrix, int height, int width, int n, int k) {
  for (int i = 0; i < height; ++i)
    if (rowHasNOfK(matrix[i], width, n, k))
      return i;
  return -1;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  int N = rand() % 2 + 2;
  int K = rand() % 5;
  
  int width = 25 + rand() % 5;
  int height = 10 + rand() % 5;  
  int **matrix = new int*[height];
 
  for (int i = 0; i < height; ++i) {
    matrix[i] = new int[width];
    for (int j = 0; j < width; ++j)
      std::cout << (matrix[i][j] = rand() % 5) << " ";
    // debug:
    if (rowHasNOfK(matrix[i], width, N, K)) std::cout << "| has at least " << N << " of " << K;
    std::cout << std::endl;
  }
  
  int i = matrixHasNOfK(matrix, height, width, N, K);
  std::cout << "Matrix " << ((i > -1) ? "has "
    : "don't have ") << N << " of " << K << " at index " << i << "." << std::endl;  
 
  for (int i = 0; i < height; ++i)
    delete [] matrix[i];
   delete [] matrix;
  return 0;
}
1
1 / 1 / 2
Регистрация: 19.12.2011
Сообщений: 19
23.03.2012, 02:27  [ТС]
вот свой вариант написал, может кому пригодится)

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <iomanip> 
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
using namespace std;
 
void action(double**,int, int, int, int);
void action(double*,int, int, int, int);
 
void main(void) {
    _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    int n, m, i, j, x;
    int k=3;
    // Ввод размерности матрицы
    cout << "Введите размер матрицы(n*m),где (n>=3):"<<endl;
    cin >> n;
    cin >> m;
    
    cout<<"Введите Х:"<<endl;
    cin>>x;
 
    // Инициализация и ввод матрицы
    double **A = new double*[n];                
    for (i=0; i<n; i++) 
        A[i] = new double[m];               
    double *B = (double*) new double[n*m];
 
    cout <<"Введите матрицу "<<n<<"*"<<m<<":"<<endl;
    for(i=0;i<n;i++)
      for(j=0;j<m;j++) 
          cin>>A[i][j];
 
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            B[i*m+j]=A[i][j];
 
    // Вывод матрицы и результатов
    system("cls");
    cout <<"Исходная матрица:"<<endl;
    for (i=0; i<n; i++)
    {
      for (j=0; j<m; j++) 
          cout << setiosflags(ios::left) << setw(6) << setprecision(2) << A[i][j];
      cout << endl;
    }
    system("pause");
    
    action(A,n,m,x,k);
    action(B,n,m,x,k);
    
    // Удаление
    //for (i=0; i<N; i++) delete A[i];
    delete[] A;
    delete[] B;
}
 
void action(double **A, int N, int M, int x, int k) {
    int length;
    int count=0;
     cout<<"**A"<<endl;
    for (int i=0; i<N; i++) 
    {
        length=0; 
        for (int j=0; j<M; j++) 
        {
            if (A[i][j]==x)
            { 
                 length++; 
                 while((A[i][j+1]==x) && (j+1<M))
                 {
                     j++; 
                     length++;
                 }
                 if(length>=k)
                 {   
                     count++; 
                     cout<< "Индекс найденной строки=" << i << " длина серии="<< length <<endl;
                     length=0;
                 }
            }
         }
    }
    cout<<"Количество серий="<<count<<endl;
}
 
 
void action(double *A, int N, int M, int x,int k){
    int length;
    int count=0;
    cout<<"*В"<<endl;
    for (int i=0; i<N; i++) 
    {
        length=0; 
        for (int j=0; j<M; j++) 
        {
            if (A[i*M+j]==x)
            { 
                 length++; 
                 while((A[i*M+j+1]==x) && (j+1<M))
                 {
                     j++; 
                     length++;
                 }
                 if(length>=k)
                 {   
                     count++; 
                     cout<< "Индекс найденной строки=" << i << " длина серии="<< length <<endl;
                     length=0;
                 }
            }
         }
    }
    cout<<"Количество серий="<<count<<endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2012, 02:27
Помогаю со студенческими работами здесь

Передача массивов в функции
Допустим имеется ниже приведенный код: void func(int **g) { //Что то изменяем в g } int main() { int ** g;

Передача массивов в функции
Добрый вечер, дорогие друзья. Прошу у вас помощи с программой: Методические указания Ввод и вывод массива, а также три пункта...

Передача массивов в качестве параметров функции
Задав динамический двумерный массив вещественных данных (матрицу А размером NxN), реализовать его обработку, как указано в варианте....

Передача в функции массивов типа char - ошибка
Мне нужно передать в функцию 2 массива типа char (не string)и сделать в функции некоторую их обработку. Функция типа void. Но почему-то...

Передача функции с двумерным массивов в качестве параметра
Всем доброго времени суток. У меня проблема следующего плана. Есть некая функция void Get_from_file(Rect rectangle, int sizeY) из...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru