Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 17:11   #1
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
Радость Удалять нулевые эл. массива

Ребята! Вот задали курсовую.
Заполняется одномерный массив числами с клавиатуры (это я сделал)
затем нужно удалить первый из нулевых элементов массива. то есть как найдёт ноль - удалить его и "сдвинуть" массив вперёд, то есть переписать каждый элемент в перед ним стоящую ячейку и того массив должен стать на одну ячейку меньше. Помогите с кодом пож-ста! В заранее благодарю!
quartzz вне форума Ответить с цитированием
Старый 26.05.2009, 17:19   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.05.2009, 17:30   #3
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

хорошо. просто поспешил.. щас уезжаю на учёбу. вечером приеду начну писать код и выложу.. извиняюсь за нарушения.
quartzz вне форума Ответить с цитированием
Старый 27.05.2009, 00:17   #4
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

ругается на "i" во втором цикле фор, нужно решить проблему как организовать переписку в цикле фор имеено с такого элемента в котором обнаружен ноль.

Код:
void delete_null(){
	for(int i=0;i<size;i++)//идём по массиву.
	{
	    if(mas[i]==0)//ищем в массиве первый элемент равный нулю.
		{
            for(i<size,i++) 
			{
				mas[i]=mas[i+1];
			}
			delete mas[i]; //очищаем последнюю ячейку массива,т.к. массив передвинулся.
			break; 
		} else //если таких не найдено выводим следующее.
			cout<<"Nulevih elementov v massive net "<< endl;
		
    }

}
извиняюсь что скобки так получились раставлены.. скопировал с пробелами, а редактор форума всё к левой стенке приравнял, трудно орентироваться теперь.

Последний раз редактировалось Sazary; 27.05.2009 в 00:20.
quartzz вне форума Ответить с цитированием
Старый 27.05.2009, 00:27   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код заключайте в теги CODE ("#" на панели в окне редактирования). Тогда и все пробелы сохранятся.
А для добавления/исправления предыдущего поста используйте кнопку "правка".

Вот вам пример со статическим массивом:

Код:
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
int mas[10]={1,2,3,4,5,0,7,8,9,10};
int n,i,k;
n = 10;  // исходный размер
k = -1;
for(i=0; i<n; i++)
  if(mas[i]==0)  // ищем нулевой элемент
   {
    k = i;  // запоминаем его индекс.
    break;
   }
if(k>-1) // если нулевой элемент был найден
{
 n--;  // уменьшаем размер массива
 for(i=k;i<n;i++) 
  mas[i]=mas[i+1];  // и сдвигаем все, что правее нуля, влево
}
for(i=0; i<n; i++)
 cout<<mas[i]<<" ";

getch();
return 0;
}
Код:
delete mas[i]; //очищаем последнюю ячейку массива,т.к. массив передвинулся.
Для одномерного массива это ничего не даст. Размер mas останется прежним.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.05.2009, 13:39   #6
quartzz
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 14
По умолчанию

мы получается сдвигаем всё, а затем просто тупо при выводе уже сдвинутого массива, делаем n-- и выводим на одно меньше, но если выводить без уменьшения то он выводит всё равно какое-то число.. или в этой ячейке памяти последней всегда будет что-то хранится и так просто это не стереть ?
quartzz вне форума Ответить с цитированием
Старый 28.05.2009, 13:44   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от quartzz
но если выводить без уменьшения то он выводит всё равно какое-то число.. или в этой ячейке памяти последней всегда будет что-то хранится и так просто это не стереть ?
Да, в этой ячейке всегда что-то будет. Поэтому если удалили элемент, то и размер нужно уменьшить.

Другое дело, что в приведенном примере не освобождается память, когда удаляем элемент. То есть массив будет продолжать занимать столько же места.

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запретить удалять файл определенного расширения anuignedysic Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.05.2009 11:30
Как удалять записи по условию, через ADO Dimok82 БД в Delphi 4 13.03.2009 19:28
Как удалять ячейки с помощью VBA Рома_Чайник Microsoft Office Excel 4 16.02.2009 11:31
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01
Нулевые элементы в матрицах ufoman Помощь студентам 5 26.04.2007 20:08