Пятница, 19 Апреля 2024, 18:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » выражение Part 3
выражение 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)
Такой код?

Я щяс умру просто biggrin Ты поиск то будешь делать или нет?

Встретив первый же елемент в цикле отличный от начального ты начинаешь делать смещение, причем в цикле, встретив второй опять, ну ты подумай хоть чуть чуть что программа делает.

Примерно так:

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
Исходный коТ
Сейчас нет на сайте
ОЛОЛО! Нашел у себя глупую ошибку biggrin

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
частый гость
Сейчас нет на сайте
О. Пасибо. Тебе :-)) И читай личку...

В мире много глюков - и с ними надо жить!!!
Форум игроделов » Программирование » C/C++ » выражение Part 3
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг