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

Массив удаление. - C++

Восстановить пароль Регистрация
 
Луиза
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 9
20.06.2011, 13:59     Массив удаление. #1
Помогите решить эти 2 задачки, мне это не как не дается.
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить 5 первых элементы массива.
4) Добавить в конец массива 3 новых элемента.
5) Распечатать полученный массив.

1. Написать функцию, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VASSUV
MiThEoN
 Аватар для VASSUV
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 403
Записей в блоге: 2
20.06.2011, 14:09     Массив удаление. #2
первая
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
#include <iostream>     
#include <cstdlib>  
using namespace std;   
#define CONST 15
int main()
{
    setlocale( 0,"russian");
    int i;
    int a[CONST];
    int n = CONST;
    /*1*/
    for(i = 0; i < n; i ++ )
         a[i] = rand();
 
    /*2*/      
    for(i = 0; i < n; i ++ )
         cout<<a[i]<<"  ";
    cout<<endl;
 
    /*3*/
    for(i = 5; i < n; i ++)
        a[i-5] = a[i];
    n -= 5;
 
    /*4*/
    for(i = n; i < n + 3; i++)
        a[i] = rand();
    n +=3;
             
    /*5*/      
    for(i = 0; i < n; i ++ )
         cout<<a[i]<<"  ";
    system("pause");
    return 0; 
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
20.06.2011, 14:55     Массив удаление. #3
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
void main(void) {
    int  arr[15];
    int  i = 0;
    int size = sizeof(arr) / sizeof(int);
 
    for(i = 0; i < size; i++)
        arr[i] = 5 + rand() % 20;
 
 
    for(i= 0; i < size; i++)
        printf("%d, ", arr[i]);
 
    puts("\ndelete first - 5 element");
 
    int del = 5;
    memcpy(arr, arr +del, (size - del) * sizeof(int));
    size -= 5;
 
    for(i = 0; i < size; i++)
        printf("%d, ", arr[i]);
 
    puts("\nadditem-3 new element");
 
    int _new[] = { 2000, 3000, 4000 };
    memcpy(arr + size, _new, sizeof(_new));
    size += 3;
    for(i = 0; i < size; i++)
        printf("%d, ", arr[i]);
}
Луиза
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 9
20.06.2011, 15:39  [ТС]     Массив удаление. #4
Супер!! Спасибо!!!Спасибо!!!
voral
345 / 325 / 46
Регистрация: 16.03.2008
Сообщений: 1,696
20.06.2011, 16:10     Массив удаление. #5
Цитата Сообщение от xAtom Посмотреть сообщение
C
1
2
3
4
5
...
int del = 5;
memcpy(arr, arr +del, (size - del) * sizeof(int));
size -= 5;
...
Интересно. Как к этому преподаватель отнесется. Визуально все выглядит правильно. Фактически Ни чего не удалено. Т.е. при профильном обучении это плохо - память остается неосвобожденной в то время когда не нуна Просто перезаписано и в переменной сохранена правая граница массива. С таким же успехом можно было бы сделать так:
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 <stdio.h>
#define MAXSIZE 15
void main(void) {
        int  arr[MAXSIZE+3];
        int  i = 0;
        int left=0,right=MAXSIZE-1;
 
        for(i = 0; i < right; i++)
                arr[i] = 5 + rand() % 20;
 
 
        for(i= left; i < right; i++)
                printf("%d, ", arr[i]);
 
        puts("\ndelete first - 5 element");
 
        left=5;
        for(i= left; i < right; i++)
                printf("%d, ", arr[i]);
 
        puts("\nadditem-3 new element");
 
        for(i = 0; i < 3; i++)
                arr[i+right+1] = 5 + rand() % 20;
            
        right+=3;
        for(i= left; i < right; i++)
                printf("%d, ", arr[i]);
}
А если вывод на экран убрать в функцию. А последние 3 элемента добавить в первом цикле фактически. То программа будет весьма короткая, визуально выдвавать правильный результат.

Добавлено через 4 минуты
Т.е. если правильность проверяют по отображенным на экране, то прокатит и так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#define MAXSIZE 15
int  arr[MAXSIZE+3];
void printArr(int begin, int end)
{
    int  i;
    for(i= begin; i < end; i++)
        printf("%d, ", arr[i]);
}
void main(void)
{
    int  i;
    for(i = 0; i < MAXSIZE; i++)
        arr[i] = 5 + rand() % 20;
 
    printArr(0,MAXSIZE);
 
    puts("\ndelete first - 5 element");
    printArr(5,MAXSIZE);
 
    puts("\nadditem-3 new element");
    printArr(5,MAXSIZE+3);
}
Yandex
Объявления
20.06.2011, 16:10     Массив удаление.
Ответ Создать тему
Опции темы

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