Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функцыя в С++ Dev\Visual http://www.cyberforum.ru/cpp-beginners/thread323137.html
Написать програму с использованием функцый 1) В котором из 3-х чисел сума непарных цыфр минимальная? Написать програму с использованием рекурсии 2)Найти значение выражения...
C++ Массив сортировка по возростанию с удалением ненужных элементов. Не как не могу разобраться.Необходимо в массиве произвести сортировку чисел в порядке возрастания причем лишнии элементы удаляются, первый элемент не изменяется. Вот что я немного набрасал из того... http://www.cyberforum.ru/cpp-beginners/thread323122.html
однонаправленный циклический список C++
Здравствуйте, помогите с теорией, дано задание: Сравнить сложность добавления элемента в начало, конец и середину однонаправленного циклического списка. За первый элемент считать элемент, на...
На какой отметке остановится мотоциклист через определенное время? C++
Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью vкилометров в час. На какой отметке он остановится через t часов? ...
C++ Генерация PNG (проблема) http://www.cyberforum.ru/cpp-beginners/thread323059.html
//test3.cpp //---------------------------------------------------------- // #pragma pack(1) #include <stdio.h> #include <stdlib.h> struct _IHDR {
C++ Заменить каждый нулевой элемент главной диагонали максимальным элементом побочной диагонали Доброго времени суток. Имеется задача: Дан вещественный массив А. Заменить каждый нулевой элемент главной диагонали максимальным элементом побочной диагонали. Подсчитать количество нулевых... подробнее

Показать сообщение отдельно
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,248
20.06.2011, 16:10
Цитата Сообщение от 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);
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.