Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.86
andreip
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 12
10.07.2010, 16:30     Алгоритм (псевдокод) одномерного динамического массива #1
Суть проблемы такова:
Задан массив – А(10). Получить из него массив В, состоящий из элементов массива А, которые меньше 0.
Массивы создаются с использованием операций NEW и DELETE. Ввод исходных данных: реальный размер массивов и их значения. Обращение к элементам массива – через косвенную адресацию.

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

Перерыл кучу ссылок, книгу Павлоской, но более-менее работоспосбных идей так и не появилось(
Код хочу написать сам, знать бы только алгоритм)
Помогите пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2010, 16:30     Алгоритм (псевдокод) одномерного динамического массива
Посмотрите здесь:

Разработать алгоритм решения задачи обработки одномерного массива. C++
Объявление динамического одномерного массива. C++
Написать программу на языке С++, в которой алгоритм сортировки одномерного массива оформить в виде C++
Как создать шаблон класса одномерного динамического массива? C++
Написать библиотеку для обработки одномерного динамического массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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]. Ну и далее... Вроде так
andreip
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[счетчик]. Ну и далее... Вроде так
Ещё вопрос ... каким образом в таких случаях массив заполняется? (второй вариант)
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 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
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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[].
andreip
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 12
10.07.2010, 17:08  [ТС]     Алгоритм (псевдокод) одномерного динамического массива #6
Всем спасибо!
Идей предостаточно, буду писать)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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;
}
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:16     Алгоритм (псевдокод) одномерного динамического массива #8
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
B[i]=A[i];
ошибка в этой строчке (Массив B может быть меньше, чем исходный)
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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];
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2010, 17:20     Алгоритм (псевдокод) одномерного динамического массива #10
MikeSoft, Да. И как тогда быть? А то я что-то ноль сейчас совсем(

Добавлено через 52 секунды
Nameless One, Спасибо.)
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
10.07.2010, 17:22     Алгоритм (псевдокод) одномерного динамического массива #11
Цитата Сообщение от Lavroff Посмотреть сообщение
MikeSoft, Да. И как тогда быть? А то я что-то ноль сейчас совсем(
Использовать дополнительную переменную-индекс.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2010, 17:29     Алгоритм (псевдокод) одномерного динамического массива
Еще ссылки по теме:

Не работает алгоритм сортировки динамического массива C++
C++ Сортировка динамического одномерного массива
C++ Обработка одномерного динамического массива

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

Или воспользуйтесь поиском по форуму:
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3781 / 1765 / 85
Регистрация: 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;
}
//---------------------------------------------------------------------------
Yandex
Объявления
10.07.2010, 17:29     Алгоритм (псевдокод) одномерного динамического массива
Ответ Создать тему
Опции темы

Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru