Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
1

Работа с одномерным масивом

05.01.2009, 20:41. Показов 1580. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста:'(.....У меня такая задача по Visual C++.......есть масcив(вводится с клавиатуры) из 5 чисел....нужно найти в нем максимальный и минимальный элемент, порядковый номер этих элементов,потом удалить эти элементы с массива и вывести новый сформировавшийся("сжатый") массив без этих элементов.....помогите очень прошу!!!!!!!....Ниче не получается:'(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2009, 20:41
Ответы с готовыми решениями:

задание с масивом
Задан массив y1,y2....y15 нужно сформировать новый масив, заменив y_min на y_max, а y_max на...

Работа с одномерным массивом
Задание такое: В одномерном массиве, состоящим из n вещественных элементов, вычислить: 1)...

Работа с одномерным масивом
Ребят пожалуйста помогите с заданием: Дана строка символов (вводится через компонент TextBox). С...

Работа с одномерным масивом на C#
Нужно решить с использованием ввода одномерных массивов с клавиатуры либо их заданием с помощью...

10
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2009, 21:16 2
Покажи то, что уже написал, и тогда мы укажем тебе на ошибки, и если понадобится, то исправим.
0
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
05.01.2009, 21:22  [ТС] 3
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
30
31
32
33
34
35
36
37
#include <iostream>
#include <conio.h>
using namespace std;
int a[5];
 
int main()
{ int max,min,i,t,r;
cout<<"vvedite elementi masiva\n";
for (i=1;i<=5;i++)
{cin>>a[i];
}
    cout << "masiv budet\n";
    for (i=1;i<=5;i++)
    {cout<<a[i]<<"\t";}
    max=a[1];
    t=0;
    for (i=1;i<=5;i++)
    {if ((max<a[i])&&(max=a[i]))
    {max=a[i];
    t=i;}
    }
    cout<<"\n";
    cout<<"max="<<max<<"\n";
    cout<<" nomer max elemen="<<t+1<<"\n";
    r=t+1;
    cout<<"masiv budet\n";
    for (i=1;i<=5;i++)
    { 
    if (r=1)
    {for (i=r+1;i<=5;i++){cout<<a[i]<<"\t";}}else
    if (r=5)
    {for (i=0;i<=r-1;i++){cout<<a[i]<<"\t";}}else
    if ((r!=1)&&(r!=5))*/
    for (i=1;i<=5;i++){cout<<a[i]<<"\t";}
        }}
    return 0;
}
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2009, 21:48 4
Основная ошибка была в том, что ты элементы массива нумеровал с 1 до 5, а надо от 0 до 4.
Вот я тебе исправил. Теперь работает как надо, но не совсем по заданию. Ты ведь в конце просто выводишь масив без мин и макс элементов, а надо сформировать новый. Исправь в коде место которое я указал коментарием на помещение в другой массив(например int result[3]).
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <conio.h>
using namespace std;
int a[5];
 
int main()
{
int max,min,i,t,r;
cout<<"vvedite elementi masiva\n";
for (i=0;i<5;i++)
        {
        cin>>a[i];
        }
cout << "masiv budet\n";
for (i=0;i<5;i++)
        {
        cout<<a[i]<<"\t";
        }
max=a[0];
t=0;
min=a[0];
r=0;
for (i=0;i<5;i++)
        {
        if (max<=a[i])
                {
                max=a[i];
                t=i;
                }
        if(min>=a[i])
                {
                min=a[i];
                r=i;
                }
        }
cout<<"\n";
cout<<"max="<<max<<"\n";
cout<<" nomer max elemen="<<t+1<<"\n";
cout<<"min="<<min<<"\n";
cout<<" nomer min elemen="<<r+1<<"\n";
cout<<"masiv budet\n";
for (i=0;i<5;i++)
{
if((i==r)||(i==t))continue;
cout<<a[i]<<"\t";//Вот это место можно исправить
}
getch();
return 0;
}
1
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
05.01.2009, 22:09  [ТС] 5
Отличный вариант но, видишь ли в чем дело.......вобщем смотри эта задачка вершина айсберга!!!.....есть массив из 20 чисел...надо отобрать из него 3 самые минимальные и з самые максимальные (массив не упорядочин)....так вот что я надумал.......беру масив нахожу в нем мин. и макс. потом эти элементы удаляю с масива..остается 18...потом опять нахожу в оставшемся мин и макс...опять удаляю их..остается 16 и потом еще раз проделываю эту де процедуру......в результате получу 2 масива(один из мин. элементов, другой из макс.)...и потом их надо будет вывести......
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2009, 22:20 6
А ты скопируй массив и упорядочи его. Например пузырьком. Очень просто.
C++
1
2
3
4
5
6
7
8
9
10
for(int j=0;j<20;j++)
    for(int i=0;i<19;i++)
    {
    if(a[i]>a[i+1])
        {
        int temp=a[i];
        a[i]=a[i+1];
        a[i+1]=temp;
        }
    }
После этого цикла у тебя будут элементы a[0] и a[1] и a[2] - минимальные,
a[17]a[18]a[19] - максимальные. А потом выводи те элементы из исходного, которые не равны a[0],a[1],a[2],a[17],a[18],a[19].
Решение мож и не самое красивое, но простое, и ты спокойно можешь его сделать сам.
1
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
05.01.2009, 22:37  [ТС] 7
Это т вариант просто идеален я его тож думал но есть одно но!......Мой препод сказал, что это слишком легко.........но это еще не все...я буду работать с потоками...разпаралеливать процессы...то есть.......у меня есть 3 процессора......я сделаю потоковые процедуры, в которых будут вызываться процедуры, что отвечают за поиск мин. и макс. и потом удаляют эти элементы с масива данного(наши 20 чисел).....потом в главной процедуре я буду вызывать потоки.....один за одним...и так получу желаемые 3 мин. и 3 макс. элемента.....тоесть важно работать именно с этим массивом.......а я хотел узнать нет ли какого нибуть алгоритма, что б удалять заданый элемент с массива и потом сдвигать("сжимать") массив??....может есть какая то функция специальная?(MSDN у меня нету к сожаленью).....

Добавлено через 6 минут 41 секунду
Да еще хлтел узнать а можно ли в "If" задавать больше параметров???.....ну вот например if(i=0;i<5;i++) - это по стандарту а мне надо.....что б "i" была допусим от 0 до 2 и от 4 до 6.....ну что то типа if (i=0 && i<2;i=4&&i<6;i++) ну только прапвильно как написать это условие, не подскажешь???
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2009, 22:45 8
Может ты имел ввиду for(int i=0;i<5;i++). Параметров там можно ставить скока угодно:
C++
1
for(int i=0,j=0,z=0; (c[i]!=0 || i<5);i++,j++,z++){...}
1
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
05.01.2009, 22:56  [ТС] 9
Наверно не совсем то ))))...я имеел виду в функции for(ты правильно подметил)....ставить приделы от допустим 0 до 3 и потом здесь же 5 до 7 и все это работая с одной переменной (в нашем случаи i )......напишу словами что б было понятнее for (i равно от 0 до 3 ; i равно от 5 до 7;i ++ )??????
0
1856 / 713 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
05.01.2009, 23:06 10
Не, так просто не выйдет. Да я и не понимаю зачем.
for - оператор

А вот удалять элемент из массива нельзя. Если его выделить с помощью malloc, то его размер можно изменить с помощью realloc(самый простой вариант). Можно конечно создавать каждый раз новый массив и копировать в него результаты обработки предыдущего, но как потом выполнять синхронизацию между потоками я не знаю. Наверное надо использовать какой-нибудь контейнер из STL, например vector или list. Можно удалять все из любых позиций, но медленней, и я не знаю как это все будет работать на многопоточности.

Еще непонятно:
Цитата Сообщение от verfallen Посмотреть сообщение
потом в главной процедуре я буду вызывать потоки.....один за одним
По идее потоки создаются для того, что бы работать одновременно, а не запускаться один после другого. Где же тут паралельное вычисление?
Я очень плохо шарю в паралельных вычислениях
1
0 / 0 / 0
Регистрация: 05.01.2009
Сообщений: 11
06.01.2009, 10:34  [ТС] 11
Спасибо тебе за то что помог......я знаю ,что потоки работают одновременно..єто я просто не совсем правильно выразился....да препод задолбал...я такой алгоритм придумал классный с сортировкой (то что ты мне предлагал)на мьютексах реализованый а он пад****....забраковал сказал, мол это слишком легко...вот и приходится теперь мучатся (((((.....ну все равно спасибо большое за подсказки

Добавлено через 27 минут 25 секунд
Спасибо тебе огромное за помощь!!!!

Добавлено через 10 часов 51 минуту 55 секунд
Помогите решить еще одну задачку!!!!!.......есть 5 чисел(неупорядоченный массив).....надо найти макс. и мин. элементы и заменить их нулями...потом снова пройтись по массиву и снова найти мин. и макс. элементы, учитывая что в нем уже есть нули(то есть предведущие макс. мин. элементы были заменены нулями)....такую процедуру проделать 3 раза...в результате должно быть 6 чисел (3 мин. и 3 макс.)......и масив с одним оставшимся числом.....помогите очень надо!!!!!

Добавлено через 34 секунды
вот код программы...не могу понять че не работает

Добавлено через 39 секунд
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
    #include <conio.h>
    using namespace std;
    int a[5],b[3];
 
    int main()
    {
    int max2,min2,max,min,i,j,t,r,t2,r2;
    cout<<"vvedite elementi masiva\n";
   for (i=0;i<5;i++)
           {
           cin>>a[i];
           }
   cout << "masiv budet\n";
   for (i=0;i<5;i++)
           {
           cout<<a[i]<<"\t";
           }
           max=a[0];
   t=0;
   min=a[0];
   r=0;
   for (i=0;i<5;i++)
           {
           if (max<=a[i])
                   {
                   max=a[i];
                   t=i;
                   }
           if(min>=a[i])
                   {
                   min=a[i];
                   r=i;
                   }
           }
   cout<<"\n";
   cout<<"max="<<max<<"\n";
   cout<<" nomer max elemen="<<t+1<<"\n";
   cout<<"min="<<min<<"\n";
   cout<<" nomer min elemen="<<r+1<<"\n";
   cout<<"masiv budet\n";
   for (i=0;i<5;i++)
   {
   if((a[t]==max)||(a[r]==min))
   {a[t]=NULL;a[r]=NULL;
   for(i=0;i<5;i++){cout<< a[i]<<"\t";
   }}
   }
   cout <<"\n";
   max2=a[0];
   t2=0;
   min2=a[0];
   r2=0;
   for (i=0;i<5;i++)
           {
           if (a[i]!=NULL){
           if (max2<=a[i])
                   {
                   max2=a[i];
                   t2=i;
                   }
                   if (min2>=a[i])
                   {
                   min2=a[i];
                   r2=i;
                   }
                   }}
   cout<<"\n";
   cout<<"max="<<max2<<"\n";
   cout<<" nomer max elemen="<<t2+1<<"\n";
   cout<<"min="<<min2<<"\n";
   cout<<" nomer min elemen="<<r2+1<<"\n";
   cout<<"masiv budet\n";
   {
    for(i=0;i<5;i++)
    if((a[t2]==max2)||(a[r2]==min2))
   {a[t2]=NULL;a[r2]=NULL;
   for(i=0;i<5;i++){cout<< a[i]<<"\t";}}
   }
   getch();
   return 0;
   }
0
06.01.2009, 10:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2009, 10:34
Помогаю со студенческими работами здесь

Работа с масивом
Как предоставить пользователю ввод кол-ва элементов масива вручную. cout&lt;&lt;&quot;input number of...

Работа с масивом элементов управления
Нужно написать программу &quot;Конструктор Японских кросcвордов на Visual Basic 6.0&quot; Как бы я эту...

Две задачи : Работа с двухмерным масивом и Псевдографический редактор
Здавствуйте уважаемые форумчане я студент ВУЗа. Сейчас пишу курсовую по Системному...

Получение данных из файла перевод в массив работа над масивом и запись массива в другой файл
Есть файл с данными в него входят как буквенные значения(разделять нельзя), так и цифровые. Данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru