Форум программистов, компьютерный форум CyberForum.ru

Задача с массивами.Использование подпрограмм - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 19:51     Задача с массивами.Использование подпрограмм #1
Дан массив из n элементов, n-1 упорядоченны по не убыванию. Добавить в массив значение p так,чтобы сохранить упорядоченность методом бинарного поиска(делим массив пополам сравниваем элемент р с центральным,смотрим в какую половинку нужно записать р,далее делим эту половинку и так далее).
((Тут ведь будет 2 подпрограммы?Одна упорядочивает массив,а вторая работает с элементом р?
Кто может помогите пожалуйста с добавлением элемента р,а упорядоченность массива я сделаю...

Добавлено через 23 часа 17 минут 32 секунды
Мммм...никто не может помочь?:'(:'(
Честное слово башка не варит...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2009, 19:51     Задача с массивами.Использование подпрограмм
Посмотрите здесь:

C++ Использование функций(подпрограмм)
C++ использование рекурсии с массивами
. Использование указателей при работе с одномерными и двумерными массивами. C++
C++ Использование указателей при работе с одномерными массивами
C++ Использование указателей при работе с одномерными и двумерными массивами.
Использование функций для работы с одномерными и двухмерными массивами C++
C++ Использование функций для работы с одномерными и двухмерными массивами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
18.02.2009, 20:50     Задача с массивами.Использование подпрограмм #2
вот так пойдет
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
#include <iostream>
#include <algorithm>
using namespace std;
 
int find_first_index(int *arr,int len, int el)
{
    int half;
    int first = 0;
    int middle;
 
    while(len>0)
    {
        half = len/2;
        middle = first+half;
        if( arr[middle] < el )
        {
            first = middle+1;
            len = len-half-1;
        }
        else
        {
            len = half;
        }
    }
    return first;
}
 
void insert(int *arr,int len, int el)
{
    int *buff = new int[len];
    int index = find_first_index(arr,len,el);
 
    for(int i = 0; i < len; ++i)
        buff[i] = arr[i];
    delete[] arr; arr = 0;
 
    arr = new int [len+1];
 
    for(int i = 0, j = 0; i < len+1; ++i)
    {
        if(index != i)
            arr[i] = buff[j++];
        else
            arr[i] = el;
    }
 
    delete[] buff;
}
 
int main () 
{
    const int len = 5;
    int *arr = new int[len];
    int el =  3;
    arr[0] = 2; arr[1] = 1;
    arr[2] = 5; arr[3] = 4;
    arr[4] = 11;
    std::sort(arr,arr+5);//algorithm stl 
    insert(arr,len,el);
    for(int i = 0; i < len+1; ++i)
        cout<<arr[i]<<" ";
    cout<<endl;
    delete[] arr;
    return 0;
}
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 21:27  [ТС]     Задача с массивами.Использование подпрограмм #3
Мамочки......... (Спасибо!!!!!!!!!!!!!!)
Теперь это надо разобрать...Ух...

Добавлено через 17 минут 49 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void insert(int *arr,int len, int el)  
   {  
       int *buff = new int[len];  
       int index = find_first_index(arr,len,el);  
     
       for(int i = 0; i < len; ++i)         //  р.cpp(36) : see declaration(объявление???чего оно так???) of 'i'
 
           buff[i] = arr[i];  
       delete[] arr; arr = 0;  
     
       arr = new int [len+1];  
     
       for(int i = 0, j = 0; i < len+1; ++i)  //р.cpp(42) : error C2374: 'i' : redefinition; multiple initialization
           //можно сделать просто второй for???
 
       {
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
18.02.2009, 22:19     Задача с массивами.Использование подпрограмм #4
ненужно объявлять второй раз int i for(i = 0, j = 0; i < len+1; ++i) //р.cpp(42) : error C2374: 'i' : redefinition; multiple initialization
или выше в for замени i на x
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
19.02.2009, 00:00     Задача с массивами.Использование подпрограмм #5
Юляшка, это какой компилятор вам такое выдал????
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
19.02.2009, 08:15     Задача с массивами.Использование подпрограмм #6
Борланд С++ 5,0 да и 4 тож будет ругаться )) а вообще это как его настроить
нежелательно объявлять одну переменную в одной области действия.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8505 / 2172 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
19.02.2009, 08:35     Задача с массивами.Использование подпрограмм #7
Alexen, вообще такую ошибку я видел только в борланде 3.1, остальные версии билдера нормально код Юляшки воспринимают...
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
19.02.2009, 09:21     Задача с массивами.Использование подпрограмм #8
Это же не с потолка а мои борланды (не билдеры ), не дают мне 2 раза объявить переменную с одинаковым именем, поэтому я не удивился по поводу такой ошибки.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8505 / 2172 / 61
Регистрация: 07.03.2007
Сообщений: 10,844
Завершенные тесты: 1
19.02.2009, 09:45     Задача с массивами.Использование подпрограмм #9
Alexen, но я тоже неголословно утверждаю, что си билдер с версии 4 нормально поддерживает область видимости переменной внутри цикла... с 5-ым я не сталкивался, если честно, а вот на 4 и 6-ом пишу достаточно давно... вот 3.1 - согласен, когда в первый раз писал, был удивлен появлению такой ошибки в привычном коде...
специально для вас поставил 4-ый билдер и привожу пример кода и результат компиляции во вложенном файле...


пардон... не увидел, что вы не про билдеры говорите... мы с вами просто о разном говорим, оказывается...
Миниатюры
Задача с массивами.Использование подпрограмм  
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
19.02.2009, 10:17     Задача с массивами.Использование подпрограмм #10
По Стандарту, этот код
C++
1
for(int i = 0, j = 0; i < len+1; ++i)  //р.cpp(42) : error C2374: 'i' : redefinition; multiple initialization
должен компилироваться совершенно без проблем, т.к. область видимости упрвляющей переменной цикла ограничена телом цикла. Для компиляторов, не соответствующих Стандарту (ну, тяжелое наследие DOS...), лечить так:
C++
1
#define for if(false);else for
YurA_280784
Заблокирован
19.02.2009, 16:43     Задача с массивами.Использование подпрограмм #11
Пипец гониво какое-то, конечно i - второй раз объявляется, или объявить i - до циклов надо или только в первом цикле с параметром объявить...
See declaration - вижу объявление
redefinition; multiple initialization - переопределение ; множественное обїявление
Помоему слова сами за себя говорят, в си переменную в отдельном блоке можно обїявить один раз и всё...

Добавлено через 1 минуту 13 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void insert(int *arr,int len, int el)   
{   
    int *buff = new int[len];   
    int index = find_first_index(arr,len,el);   
  
    int i;
    for(i = 0; i < len; ++i)   
        buff[i] = arr[i];   
    delete[] arr; arr = 0;   
  
    arr = new int [len+1];   
  
    for(i = 0, j = 0; i < len+1; ++i)   
    {   
        if(index != i)   
            arr[i] = buff[j++];   
        else  
            arr[i] = el;   
    }   
  
    delete[] buff;   
}
И не парим голову...

Добавлено через 1 минуту 2 секунды
А-а-а тута ещё и j объявляется, ну дык тогда j - там где и через запятую написать и всё
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
19.02.2009, 21:05  [ТС]     Задача с массивами.Использование подпрограмм #12
Цитата Сообщение от ISergey Посмотреть сообщение
Юляшка, это какой компилятор вам такое выдал????
Microsoft Visual C++.......

((Всем спасибо!Я ещё разберу задачку,если что спрошу...
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
19.02.2009, 21:47     Задача с массивами.Использование подпрограмм #13
MS Visual C++ до версии 6 - так и должен выдавать ошибку. В версиях 7.0 (2002) и 7.1 (2003) эта "фича" оставлена - для совместимости со старым кодом, как объясняет M$, но есть волшебный ключик /Zc:forScope, который включает точное соответствие Стандарту; а начиная с версии 8 (2005), компилятор уже ведет себя вполне так, как требует действующий Стандарт языка.
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
19.02.2009, 22:02  [ТС]     Задача с массивами.Использование подпрограмм #14
Тьфу!Я забыла написать 6 в версии))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2009, 19:19     Задача с массивами.Использование подпрограмм
Еще ссылки по теме:

Задача с массивами C++
C++ задача с массивами:)
Использование указателей при работе с одномерными и двумерными массивами C++
C++ Использование функций при работе с двумерными массивами
C++ Использование одних и тех же данных двумя массивами

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

Или воспользуйтесь поиском по форуму:
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
25.02.2009, 19:19  [ТС]     Задача с массивами.Использование подпрограмм #15
Вот попытка(не моя) решения этой же задачи,с условием,что массив уже упорядочен.Но она всегда выдаёт одинаковый результат(когда меняем значения в массиве)...

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
// bin_search.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
int bin(double* m,int min,int n,double wanted);
int main()
{const int M=10;
double a[M]={0,1,1,2,2,3,4,6,6,0};
int place=M-1;
double* buf=&a[0];
double wnt=-9;
int b=0;
place=bin(buf,b,M,wnt);
cout<<place<<endl;
return 0;
}
int bin(double* m,int min,int n,double wanted)
{int i;
n=n-1;
 
while((min)<(n))
{cout<<min<<' '<<n<<endl;
if(*(m+(min+n)/2)<=wanted)min=(min+n)/2+1;
else n=(min+n)/2;
}
return min;
}
Добавлено через 30 минут 35 секунд
Ммм...короче в этой задаче нужно менять только искомую переменную,токо я не понимаю почему,массив выводится другой...
Yandex
Объявления
25.02.2009, 19:19     Задача с массивами.Использование подпрограмм
Ответ Создать тему
Опции темы

Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru