выражение Part 3
|
|
WereWolf | Дата: Пятница, 22 Октября 2010, 11:32 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Задание: Удалить минимальный и максимальный элементы массива. Я написал: Code #include <iostream> #include <iomanip> #include <conio.h> #include <math.h> using namespace std;
int main() { locale::global(locale("rus")); int a[10],i,n,min,max,j; cout << "Введите размер: " << endl; cin >> n;
for (i=0;i<n;i++) { cout << "Введите a["<<i<<"] = " << endl; cin >> a[i]; }
cout << "Массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; min = max = a[0]; for (i=1;i<n;i++) if (a[i] < min) { min = a[i]; cout << "Минимальный элемент: " << min << endl; for (j = i+1;j<n;i++) {a[i-1]=a[j]; n--; i--;} } else if ( a[i] > max) { max = a[i]; cout << "Максимальный элемент: " << max << endl; for (j = i+1;j<n;i++) { a[i-1]=a[j]; n++; i++; } } getch(); return 0; } Поиск элементов и вывод я сделал. А вот как удаление сделать? Я пробовал через смещение делать, не получается: Code for (j = i+1;j<n;i++) { a[i-1]=a[j]; n++; i++; } а так же смещение в обратную сторону...
В мире много глюков - и с ними надо жить!!!
|
|
| |
ezhickovich | Дата: Пятница, 22 Октября 2010, 11:51 | Сообщение # 2 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Удалить элемент из массива нельзя... ( из статического точно... ) Их можно просто игнорировать... Или юзать vector/list...
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 12:00 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Ну так а при помощи сдвигов?
В мире много глюков - и с ними надо жить!!!
|
|
| |
ezhickovich | Дата: Пятница, 22 Октября 2010, 12:15 | Сообщение # 4 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Quote (WereWolf) Удалить минимальный и максимальный элементы массива. Как-то ты замудрил с поиском элементов... Когда можно просто: Code #include <cstdio> #include <Windows.h>
int main () { int i (0), j (0), a[10], imax (0), imin (0), n (0);
scanf ("%d", &n); for (i = 0; i < n; i++) scanf ("%d", &a[i]);
for (i = 1; i < n; i++) { if (a[imax] < a[i]) imax = i; if (a[imin] > a[i]) imin = i; }
for (i = 0; i < n; i++) if (i != imax && i != imin) printf ("%d ", a[i]); system ("PAUSE"); return 0; } Добавлено (22.10.2010, 12:15) --------------------------------------------- Я использую STDIO, но это без труда можно переписать на IOSTREAM
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 12:23 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| ezhickovich, ну это понятно, спасибо) А вот как быть с смещением...
В мире много глюков - и с ними надо жить!!!
|
|
| |
ezhickovich | Дата: Пятница, 22 Октября 2010, 12:27 | Сообщение # 6 |
[Великий и могучий хозяинъ]
Сейчас нет на сайте
| Quote (WereWolf) А вот как быть с смещением... А обязательно смещение использовать?
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 12:27 | Сообщение # 7 |
Исходный коТ
Сейчас нет на сайте
| Code for (j = i+1;j<n;i++) { a[i-1]=a[j]; n++; i++; } Условием завершения данного цикля является "j < n", но вот только n растет в каждой итерации, а j остается неизменной, иными словами условие "j < n" всегда истинно. Code for(i = 0; i < n; i++) if(a[i] = min) { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; i--; break; }
for(i = 0; i < n; i++) if(a[i] = min) { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; // обрати внимание что тут i--; // итерация i и n проходит вне цикла break; // брик стоит чтобы не удалить несколько минимальтых элементов } ЗЫ Меня еще колличество подключенных библиотек улыбнуло.
Сообщение отредактировал Matou - Пятница, 22 Октября 2010, 12:46 |
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 12:48 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| Не совсем поиск. а просто выборку. Да не обязательно смещение. Просто в задании написано Удалить, а как это сделать не могу додумать. Зы. Matou, код специально придуман для препода! ) Добавлено (22.10.2010, 12:48) --------------------------------------------- Уххх... )) замес произошел: Code #include <iostream> #include <iomanip> #include <conio.h> #include <math.h> using namespace std;
int main() { locale::global(locale("rus")); int a[10],i,n,min,max,j; cout << "Введите размер: " << endl; cin >> n;
for (i=0;i<n;i++) { cout << "Введите a["<<i<<"] = " << endl; cin >> a[i]; }
cout << "Массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; min = max = a[0]; for (i=1;i<n;i++) if (a[i] < min) { min = a[i]; cout << "Минимальный элемент: " << min << endl; for(i = 0; i < n; i++) if(a[i] = min) { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; i--; break; } } else if ( a[i] > max) { max = a[i]; cout << "Максимальный элемент: " << max << endl; for (j = i+1;j<n;i++) {a[i-1]=a[j]; n++; i++;} } getch(); return 0; } Такой код? Добавлено (22.10.2010, 12:48) --------------------------------------------- Matou, я забыл с прошлой задачи их удалить))
В мире много глюков - и с ними надо жить!!!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 12:52 | Сообщение # 9 |
Исходный коТ
Сейчас нет на сайте
| Quote (WereWolf) Такой код? Я щяс умру просто Ты поиск то будешь делать или нет? Встретив первый же елемент в цикле отличный от начального ты начинаешь делать смещение, причем в цикле, встретив второй опять, ну ты подумай хоть чуть чуть что программа делает. Примерно так: Code #include <iostream> #include <conio.h> using namespace std;
int main() { locale::global(locale("rus")); int a[10],i,n,min,max,j; cout << "Введите размер: " << endl; cin >> n;
for (i=0;i<n;i++) { cout << "Введите a["<<i<<"] = " << endl; cin >> a[i]; }
cout << "Массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; min = max = a[0]; for (i=1;i<n;i++) { if (a[i] < min) min = a[i]; if ( a[i] > max) max = a[i]; } // вот и все, цикл поиска минималього и максимальтого элементов закончился.
cout << "Минимальный элемент: " << min << endl; cout << "Максимальный элемент: " << max << endl;
for(i = 0; i < n; i++) if(a[i] = min) { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; i--; break; } for(i = 0; i < n; i++) if(a[i] = max) { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; i--; break; }
cout << "Преобразованный массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; getch(); return 0; }
Сообщение отредактировал Matou - Пятница, 22 Октября 2010, 13:07 |
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 13:51 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Слушай. А если сделать поиск, вот как ты сделал, потом выполнить сортировку и потом смещение? Получится типо: -5 -1 0 2 3 И потом смещаем -1 0 2 3 Потом еще раз -1 0 2 ?? Просто тут получается смещение от минимального 2 раза Добавлено (22.10.2010, 13:51) --------------------------------------------- Блин. Затор))
В мире много глюков - и с ними надо жить!!!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 14:58 | Сообщение # 11 |
Исходный коТ
Сейчас нет на сайте
| Quote (WereWolf) Слушай. А если сделать поиск, вот как ты сделал, потом выполнить сортировку и потом смещение? А зачем тогда поиск делать, просто сделать сортировку, потом сделать смещение к первому елементу, а потом просто уменьшить n. Quote (WereWolf) ?? Просто тут получается смещение от минимального 2 раза Это где тут и что 2 раза смещяется?
|
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 15:17 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| n--; | i--; | | =============| n--; | i--; | =============|Добавлено (22.10.2010, 15:16) --------------------------------------------- Или я не догоняю. Программисты со всех сторон)) Добавлено (22.10.2010, 15:17) --------------------------------------------- Так короче как можно решить задачу? Не важно каким образом - это просто я может не от того начал отталкиваться.
В мире много глюков - и с ними надо жить!!!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 16:04 | Сообщение # 13 |
Исходный коТ
Сейчас нет на сайте
| Я же написал решение в 9м посте, чем тебя не устраивает?
|
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 16:14 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| Matou, тебе сколько лет?
В мире много глюков - и с ними надо жить!!!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 16:33 | Сообщение # 15 |
Исходный коТ
Сейчас нет на сайте
| 26
|
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 16:43 | Сообщение # 16 |
частый гость
Сейчас нет на сайте
| Значит не дурак :-) Есть предложение....Добавлено (22.10.2010, 16:43) --------------------------------------------- И всё равно не пойму мы вводим: Размерность 4 Далее вводим -3 -1 0 3 Выводит что массив преобразован вот так: 0 3 Так он убирает 2 минимальных значения, а нужно 1 минимальное т.е. -3 и максимальное 3 в итоге должно быть: -1 0
В мире много глюков - и с ними надо жить!!!
|
|
| |
Matou | Дата: Пятница, 22 Октября 2010, 16:58 | Сообщение # 17 |
Исходный коТ
Сейчас нет на сайте
| ОЛОЛО! Нашел у себя глупую ошибку Code if(a[i] = min) // здесь стоит присваивание вместо сравнения if(a[i] == min) // а должно быть вот так Ну и соответсвтенно исправленный код: Code #include <iostream> #include <conio.h> using namespace std;
int main() { locale::global(locale("rus")); int a[10],i,n,min,max,j; cout << "Введите размер: " << endl; cin >> n;
for (i=0;i<n;i++) { cout << "Введите a["<<i<<"] = " << endl; cin >> a[i]; }
cout << "Массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; min = max = a[0]; for (i=1;i<n;i++) { if (a[i] < min) min = a[i]; if ( a[i] > max) max = a[i]; } // вот и все, цикл поиска минималього и максимальтого элементов закончился.
cout << "Минимальный элемент: " << min << endl; cout << "Максимальный элемент: " << max << endl;
for(i = 0; i < n; i++) if(a[i] == min) // Вот тут ололо было { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; break; } for(i = 0; i < n; i++) if(a[i] == max) // И тут тоже было ололо { for(j = i + 1; j < n; j++) a[j - 1] = a[j]; n--; break; }
cout << "Преобразованный массив а: " << endl; for (i=0; i<n; i++) cout << a[i] << " "; cout << endl; getch(); return 0; }
Сообщение отредактировал Matou - Пятница, 22 Октября 2010, 17:00 |
|
| |
WereWolf | Дата: Пятница, 22 Октября 2010, 17:01 | Сообщение # 18 |
частый гость
Сейчас нет на сайте
| О. Пасибо. Тебе † :-)) И читай личку...
В мире много глюков - и с ними надо жить!!!
|
|
| |