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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 20:04   #1
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
Восклицание Массивы

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

Наибольший элемент я определила, не знаю как удаление произвести.
Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define n 20

void main()
{
setlocale(LC_CTYPE,"");
	int a[n],i,max;
	printf("Введите элементы массива:",n);
	for (i=0;i<n;i++)
	{
		printf("%d элемент=",(i+1));
		scanf("%d",&a[i]);
	}
max = a[0];
 for (i=1; i<n; i++) 
 {
 if (a[i]>max)
 {
 max=a[i];
 }}
printf("max=%d\n",max);
getch();
}
Alina111 вне форума Ответить с цитированием
Старый 22.06.2012, 20:22   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Alina111 Посмотреть сообщение
Ввести с клавиатуры массив из 20 элементов. Определить наибольший элемент и удалить из массива все его вхождения, кроме последнего.
Ответ - никак. На языке с++ это не возможно.
(на языке си это так же не возможно).

Можно:

0. Уточнить вопрос у своего преподавателя, акцентировав его внимание на том, что задание сформулировано некорректно. Ибо у задания в том виде, в каком оно присутствует в сабже не существует решений.

Далее, поступить согласно уточненным данным.

Так же можно:

1. Изменить значение элемента на такое, которое будет интерпретироваться вызывающей стороной, как "удаленный элемент".

2. Перенести "удаленный" элемент в конец массива, и изменить значение дополнительной переменной "количество действующих элементов" на 1 единицу меньше.

3. Использовать динамическую память, и работать с указателями на динамически выделяемую память, либо с контейнерами STL, либо с собственными аналогами подобных контейнеров.
_Bers вне форума Ответить с цитированием
Старый 22.06.2012, 20:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Переписать все в другой массив без этого элемента:
Код:
int b[n],k;
for(int i=0;i<n;i++) if(a[i]!=max) b[k++]=a[i];
И вывести на экранъ
Код:
for(int i=0;i<k;i++) printf("%d\t",b[k]);
Ферштейн?
I'm learning to live...

Последний раз редактировалось Stilet; 22.06.2012 в 21:33.
Stilet вне форума Ответить с цитированием
Старый 22.06.2012, 20:46   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

последнее вхождение должно ж остаться

Код:
int b[n], k(n), z(-1);
for(int i=n-1;i>=0;i--) {
    if (a[i]==max) if (z<0) z = i; else continue;
    b[--k]=a[i];
}
f.hump вне форума Ответить с цитированием
Старый 22.06.2012, 21:21   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Переписать все в другой массив без этого элемента:
Ферштейн?
Нихт ферштейн!

В задаче по-русски написанно: удалить из массива

В задаче сказано "удалить". В задаче ничего не сказано про "переписать".
Итого: ты решил совсем другую задачу. Ферштейн?
_Bers вне форума Ответить с цитированием
Старый 22.06.2012, 21:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ты решил совсем другую задачу. Ферштейн?
Яволь. Но если автора устроит то почему бы нет
Тем паче уверен на 120 Alcoholных процентов что понятие "удалить" ни задавший задачу ни уж тем более бедные ученики обьяснить в данном контексте не смогут
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2012, 21:34   #7
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Я согласен со Stilet. Не всегда следует буквально воспринимать условие задачи. Если этого элемента не будет в новом массиве, значит он удален, логично? И если Вам сказать "переписать" это натолкнет Вас на готовое решение, а преподаватель хочет чтобы Вы подумали.
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 22.06.2012, 21:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
значит он удален, логично?
Нет Это значит он остался в копии массива. Удалением тут не пахнет.
Другое дело если бы применялось освобождение элемента (обьекта) штатными средствами типа delete, вот тогда можно было бы сказать что элемент удален.
Так что _Bers скорее прав - задача стоит криво.
Короче тут только телепатировать....
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2012, 22:01   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Яволь. Но если автора устроит то почему бы нет
Тем паче уверен на 120 Alcoholных процентов что понятие "удалить" ни задавший задачу ни уж тем более бедные ученики обьяснить в данном контексте не смогут
Хи-хих, ну если так, тоды даааа... тоды конечнааааа... конечна ферштейн
_Bers вне форума Ответить с цитированием
Старый 23.06.2012, 00:32   #10
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
По умолчанию

Вот код, где ищется максимальный элемент,создается новый массив без вхождений этого максимального элемента,надо сделать чтоб последнее вхождение осталось
Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define n 20

void main()
{
setlocale(LC_CTYPE,"");
int a[n],i,max,k=0,b[n],z;
	printf("Введите элементы массива:",n);
	for (i=0;i<n;i++)
	{
		printf("%d элемент=",(i+1));
		scanf("%d",&a[i]);
	}
max = a[0];
 for (i=0; i<n; i++) 
 {
 if (a[i]>max)
 {
 max=a[i];
 }}

for (i=0;i<n;i++) 
{
		if(a[i]!=max) 
		{b[k]=a[i];
		printf("\n %d\t",b[k]);}
		else a[i]=a[i+1];
	
}
printf("\n max=%d\n",max);
getch();
 }
Alina111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12