С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 12
1

Алгоритм (псевдокод) одномерного динамического массива

10.07.2010, 16:30. Показов 8865. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть проблемы такова:
Задан массив – А(10). Получить из него массив В, состоящий из элементов массива А, которые меньше 0.
Массивы создаются с использованием операций NEW и DELETE. Ввод исходных данных: реальный размер массивов и их значения. Обращение к элементам массива – через косвенную адресацию.

(да и ведь динамические масивы нельзя при создании инициализировать - тут тоже много непонтяного(( )

Перерыл кучу ссылок, книгу Павлоской, но более-менее работоспосбных идей так и не появилось(
Код хочу написать сам, знать бы только алгоритм)
Помогите пожалуйста)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2010, 16:30
Ответы с готовыми решениями:

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

Объявление динамического одномерного массива.
БИЛЕТ №14 3. Составьте программу, в которой объявляется динамический одномерный массив...

Из динамического одномерного массива в статический
Здравствуйте! Я хотел бы попросить вас показать на данном примере, как изменится код программы, в...

Удаление динамического одномерного массива
Я в шоке оказывается надо еще удалять массив из памяти когда его создаешь. Всегда писал на шарпе...

12
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.07.2010, 16:49 2
Создаешь два массива. int*A, int*B; Вводишь кол-во элем в первом массиве. Вводишь кол-во элем во втором массиве. Пишешь A=new int[кол-во элем в первом]. B=new int[кол-во элем во втором].
А затем цикл. От 0 до кол-во элем в первом введите значение элем массива. Потом от 0 до кол-во элем во втором введите значение элем массива.
Косвенная адрессация это ->

Хотя. Можно только A. Потом заполняешь массив. Если i-ый элемент массива меньше 0, счетчик++. Потом B=new int[счетчик]. Затем цикл от 0 до кол-во элем в первом массиве. если a[i]<0 то b[i]=a[i]. Ну и далее... Вроде так
1
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 12
10.07.2010, 16:55  [ТС] 3
Цитата Сообщение от Lavroff Посмотреть сообщение
Создаешь два массива. int*A, int*B; Вводишь кол-во элем в первом массиве. Вводишь кол-во элем во втором массиве. Пишешь A=new int[кол-во элем в первом]. B=new int[кол-во элем во втором].
А затем цикл. От 0 до кол-во элем в первом введите значение элем массива. Потом от 0 до кол-во элем во втором введите значение элем массива.
Косвенная адрессация это ->

Хотя. Можно только A. Потом заполняешь массив. Если i-ый элемент массива больше 0, счетчик++. Потом B=new int[счетчик]. Ну и далее... Вроде так
Ещё вопрос ... каким образом в таких случаях массив заполняется? (второй вариант)
0
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:01 4
andreip, я себе вижу эту задачу так:
1. Вывод на экран запроса на ввод размера массива (можно не делать, т.к. у вас даже явно задано значение). Запись значения в переменную size
2. Выделение памяти для массива А, используя переменную size в качестве размера массива.
3. Вывод на экран запроса на ввод элементов массива (не более, size штук).
4. Запись значений в массив А.
5. Обнуление переменной size.
6. Проход по значениям массива А: если элемент меньше нуля - инкрементируем переменную size.
7. Выделение памяти для массива B, используя переменную size в качестве размера массива.
8. Проход по значениям массива A с переносом положительных в массив B.
9. Печать массива B
1
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
10.07.2010, 17:05 5
Цитата Сообщение от andreip Посмотреть сообщение
Задан массив – А(10).
Размер массива А известен - 10 элементов. Значит, динамически выделять ему память не нужно, объявляешь так:
C++
1
2
const int size=10;
int A[size];
В цикле проходишь по всему массиву А и считаешь число элементов, удовлетворяющих условию.
Потом выделяешь память операцией new для массива В с числом элементов, которое ты подсчитал на предыдущем этапе.
Цитата Сообщение от andreip Посмотреть сообщение
через косвенную адресацию
- пример:
C++
1
2
for(int i=0; i<size; ++i)
    *(B+i)=*(A+i)
В конце не забудь освободить память, выделенную для массива В, операцией delete[].
1
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 12
10.07.2010, 17:08  [ТС] 6
Всем спасибо!
Идей предостаточно, буду писать)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.07.2010, 17:14 7
Что-то мозг от жары совсем не варит... Попытался написать по своему же псевдокоду. Вот что вышло:

Что тут не так?
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
#include <iostream>
int main()
{
    int*A;
    int*B;
    int sizeA, count=0;
    std::cout<<"Enter size of A\n";
    std::cin>>sizeA;
    A=new int[sizeA];
    for(int i=0;i<sizeA;i++)
    {
        std::cout<<"Enter "<< i <<" ii element of array\n";
        std::cin>>A[i];
        if(A[i]<0)
            count++;
    }
    B=new int[count];
    for(int i=0;i<sizeA;i++)
    {
        if(A[i]<0)
            B[i]=A[i];
    }
    for(int i=0;i<count;i++)
        std::cout<<"Massiv: "<< B[i] <<' ';
    std::cout<<"\n";
    delete[] A;
    delete[] B;
    return 0;
}
0
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:16 8
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
B[i]=A[i];
ошибка в этой строчке (Массив B может быть меньше, чем исходный)
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
10.07.2010, 17:18 9
Что тут не так?
C++
1
2
3
4
5
for(int i=0, j=0;i<sizeA;i++)
{
        if(A[i]<0)
             B[j++]=A[i];
}
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.07.2010, 17:20 10
MikeSoft, Да. И как тогда быть? А то я что-то ноль сейчас совсем(

Добавлено через 52 секунды
Nameless One, Спасибо.)
0
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:22 11
Цитата Сообщение от Lavroff Посмотреть сообщение
MikeSoft, Да. И как тогда быть? А то я что-то ноль сейчас совсем(
Использовать дополнительную переменную-индекс.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
10.07.2010, 17:24 12
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
#include <iostream>
 
int main(){
    const int SIZE = 10;
    int * arr, * negatives, neg_count;
    
    arr = new int [ SIZE ];
    neg_count = 0;
    for ( int i = 0; i < SIZE; ++i ){
        std::cout << "ARRAY[" << i << "] = ";
        std::cin >> arr[i];
        if ( arr[i] < 0 )
            ++neg_count;
    }
    
    if ( ! neg_count ) {
        std::cerr << "No negative elements!" << std::endl;
        delete [] arr;
        return 1;
    }
    
    negatives = new int [ neg_count ];
    int * pNeg = negatives;
    for ( int i = 0; i < SIZE; ++i )
        if ( arr[i] < 0 )
            *pNeg++ = arr[i];
    
    std::cout << "Negative elements:" << std::endl;
    for ( int i = 0; i < neg_count; ++i )
        std::cout << negatives[i] << " ";
    std::cout << std::endl;
    
    delete [] arr;
    delete [] negatives;
    
    return 0;
}
1
Эксперт С++
3954 / 1809 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:29 13
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
//---------------------------------------------------------------------------
#include <iostream.h>
//---------------------------------------------------------------------------
int main()
{
  int size = 0, count = 0, j = 0;
  cout << "Enter array size: ";
  cin >> size;
  int *A = new int[size];
 
  for (int i = 0; i < size; i++) {
    cout << "Enter elementh (" << i << "/" << size << "): ";
    cin >> A[i];
    if (A[i] < 0) count++;
  }
 
  int *B = new int[count];
  for (int i = 0; i < size; i++) {
    if (A[i] < 0) {
      B[j++] = A[i];
    }
  }
 
  for (int i = 0; i < count; i++) {
    cout << B[i] << " ";
  }
 
  delete []A;
  delete []B;
 
  return 0;
}
//---------------------------------------------------------------------------
0
10.07.2010, 17:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2010, 17:29
Помогаю со студенческими работами здесь

Обработка одномерного динамического массива
создать одномерный динамический массив произвольного размера.Заполнить его случайным...

Сортировка динамического одномерного массива
void Sort(int *l, int n) { for (*(l + 1) = 0; *(l + 1)&lt;n - 1; *(l + 1)++) for (*(l + 2) = *(l...

Список на основе одномерного динамического массива
Добрый вечер! Кто может привести в пример структуру такого списка? (на основе одномерного...

Некорректный вывод одномерного динамического массива
хай гайс написал на кьюти сортировщик действительных чисел массива по убыванию. с положительными...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru