IPB

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V < 1 2 3 >  
Ответить в эту темуОткрыть новую тему
> С++ нахождения площади и периметра треугольника по координатам, Переход от Pascal к C++
Vahappaday
сообщение 13.3.2010, 11:00
Сообщение #21


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Цитата(InFuz @ 13.3.2010, 9:56) *

ясно, первая итерация как бы проходит в холостую (т.к. один элемент не является еще последовательностью).

Именно так)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 30.3.2010, 12:28
Сообщение #22


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Лаба №4

Дан массив целых простых чисел. Переписать все простые числа из заданного массива в другой массив. Первый массив упорядочить по возрастанию, второй по убыванию. Создать функции для для определения простого числа и для сортировки элементов массива.
P.S. "обязательное применение динамических массивов"


Начал по лекциям разбираться с динамическим массивом, пытался отладить пример который нам давали но он выдает ошибку, не смог понять че ему надо

# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

int main()
{ clrscr();
int i,n;
float * a;
float s;
cout<<"n="; cin>>n;
a=(float *) malloe (n * sizeof(float)); //<==тута "function 'malloe' should have a prototype"
a=new float[n];
cout<<"El-ma \n";
for (i=0; i<n; i++) cin>>* (a+i);
s+=*(a+i);
cout<<"s=" <<s<<"\n";
return 0;
getch();
}


написал еще на pascale пока функцию для определения простое число или нет

Writeln('Vvedite 4islo');
Readln( R );
if (R = 1) or (R = 2) then Writeln('Prostoe 4islo')
else if (R mod 2 = 0) then Writeln('Sostavnoe 4islo')
else begin
I := 3;
while R mod I <> 0 do
I:= I + 2;
if R <= I then Write('Prostoe 4islo')
else Write('Sostavnoe 4islo');
end;


Vahappaday надеюсь на ваши подсказки ))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 30.3.2010, 13:05
Сообщение #23


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



Цитата(InFuz @ 30.3.2010, 16:28) *

a=(float *) malloe (n * sizeof(float)); //<==тута "function 'malloe' should have a prototype"

Не malloe, a malloc.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 30.3.2010, 15:00
Сообщение #24


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



(IMG:style_emoticons/default/biggrin.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 31.3.2010, 4:07
Сообщение #25


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



ой... а зачем и new и malloc? и ни разу не освобождена память))) ай-яй-яй))

Рекомендую почитать про выделение памяти в некоторых старых версиях Builder'a. Мне один опытный человек говорил, что у Borland был косяк либо с new/delete, либо с malloc/free, скорее с первым. Хотя я могу и ошибаться.

getch() после return 0; не имеет смысла.

Насчёт нового массива. Есть два варианта.
1. Функция сама изнутри сначала делает проход и считает.
2. Мы должны передавать функции указатель на уже выделенную область памяти.

Первый вариант.... понадёжней, что ли. Исключает ошибки при вызове.
Если будете делать по второму, то я бы сделал что-то типа

int CopySimples(float *src, float *dst);

И если передать dst=NULL, то ничего не копировать, а просто считать и возвращать количество элементов.
Затем выделять память под такое количество элементов и уже передавать нормальный указатель.

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

Ну, а насчёт определения простоты, это элементарно, тем более, что вариант уже есть, хотя на мой взгляд можно попроще структурно и ещё немножко оптимизировать.
Если уж совсем плохо будет, напишу, а так предлагаю потренироваться самостоятельно.

Насчёт сортировки: каким методом сортировать будем? Пузырьком? Чем-то посложнее? Можно вообще воспользоваться встроенным qsort'ом

Добавлено:
Пришла ещё мысль сделать функцию добавления массива к числу. То есть, мы должны выделить память на 1 больше имеющегося, скопировать старый в новый, дописать новое число, освободить память из под старого, вернуть указатель на новый.
Вариантов куча на самом деле))
Определяйтесь, и пробуйте писать. Где будет тяжело - подмогу.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 31.3.2010, 10:54
Сообщение #26


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Пока делаю без функций т.к. с ними еще не разобрался.
Вот так пока получается, вроде переделал функцию из паскалевской без изменений, там работала, а тут чот ни фига

Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

int main()
{//----------------------------------------------------------------
    clrscr();
    int w,i,j,n,s,g;
    int * yk;
    cout<<"n="; cin>>n;
    yk=new int[n];
    cout<<"El-ma \n";
    for (i=0; i<n; i++)
    { cin>>* (yk);
      s=*(yk);
      cout<<"\n s="<<s;
//----------------------------------------------------------------
      if (s==1 || s==2) { cout<<"\n s - Prostoe 4islo"; g=*(yk);
      cout<<"\n g="<<g;}
      if (s%2==0) cout<<"\n s - Sostavnoe 4islo";
      else
      {
    w=3;
    while (s&w!=0)
    { w=w+2;
      if (s<=w) { cout<<"\n s - Prostoe 4islo"; g=*(yk);
      cout<<"\n g="<<g; }
      else cout<<"\n s - Sostavnoe 4islo";
    }
      }
    }
//-----------------------------------------------------------------
    delete yk;
    getch();
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 31.3.2010, 14:52
Сообщение #27


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



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

1. Для освобождения памяти из под массива использовать надо
Код
delete []yk;

Вы же удаляете бедную память как объект.
2. Память под массив выделяете и так её и не используете.
Код
cin>>* (yk);

- это конечно здорово, что умеете пользоваться разыменовыванием, но тут всё делается проще.
Код
cin >> yk[i];

Так куда проще, а главное, так правильно)) Можно, конечно, инкрементировать указатель, но так он "испортится" - не будет уже указывать на начало массива.
3. Посмотрел, как определяется простота числа. Это плохо, так никто не пишет. 4 лаба, пора бы уже разобраться с функциями.
Вообще, суть функции понятен или нет? Функция обязана что-то возвращать. Пусть возвращает bool (ну, или int) - 0, если число составное, 1 - если простое.
4. Кстати о функциях: int main ничего не возвращает, это ошибка синтаксическая.

Это всё "стопроцентные" ошибки, я уже молчу про то, что код трудночитаем, плохо структурирован. К хорошему стилю лучше привыкать сразу.

Советую написать-таки функцию типа bool, ну или в вашем случае int...
int IsSimple(int x), которая отвечала бы за определение простоты числа. Сложное - возвращаем 0. Дошла до конца проверки - значит, число простое, возвращаем 1. Это обязательно хотя бы потому, что определение простоты здесь не самоцель а лишь служебная функция, которая используется как один из кусочков выполнения итоговой задачи.

Когда напишете, будем разбираться с сортировкой и копированием.

Массив нужно не просто завести, но и скопировать в него все входные числа. Как это сделать, я описал чуть выше.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 31.3.2010, 16:18
Сообщение #28


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Гляньте функцию, еще хотел спросить как х присвоить yk[i]? Короче давайте еще подсказок, суть то функций понятен я имел в виду еще не совсем разобрался/"набил руку" как это все оформляется/выгядит конкретно в программе. Последовательность расположения функций в программе их взаимодействие другу с другом. От паскаля еще отвыкнуть не могу ))

Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

int main()
{
      clrscr();
//----------------------------------------------------------------
      int Chislo(int x);
      int i,n,j;
      {
    Chislo=0;
    for (i=0; i<n; i++)
    {
      if (x[i]%2==0) Chislo=0;
      else for (j=1; j>sqrt(x[i]); j+2)
        {
          if (x[i]%j!=0) Chislo=1;
          else
          {
        Chislo=0;
        break;
          }
        }
    }
      }
//-----------------------------------------------------------------
    int w,i,j,n,s,g;
    int yk[99];
    cout<<"n="; cin>>n;
    yk=new int[n];
    cout<<"El-ma \n";
    for (i=0; i<n; i++)
    {
      cin>>yk[i];
      s=yk[i];
      cout<<"\n s="<<s;
    }
//-----------------------------------------------------------------
    delete []yk;
    getch();
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 31.3.2010, 16:43
Сообщение #29


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



На мой взгляд, вновь неверно... Теоретически функцию можно описывать внутри другой функции, но я не видел, чтоб к этому прибегали.

У Вас же Chislo описана внутри main.

Также советую разобраться в синтаксисе определения функции.

Код
[тип возвращаемого значения] [имя функции]([список параметров])
{
[код]
}


Никакой переменной с именем функции по умолчанию не создаётся. Все возвраты осуществляются оператором return.

Захотели вернуть 0, пишем return 0;
Захотели вернуть 1, пишем return 1;
Захотели вернуть x, пишем return x;

После выполнения оператора return выполнение функции прекращается и управление передаётся вызывающей функции.

Объявлять все локальные переменные нужно уже в теле функции, там, где у меня написано [код].

То есть, если вы всё вот этот осознаете, то поймёте, что функция описана неверно.

Остальные комментарии:
1. опять main ничего не возвращает - чего вы её так обижаете, такая же функция) Обещает отдавать int, значит, должна отдавать int))
2. Зачем int yk[99]? Зачем Вы выделили память в стеке? Вы же её не используете...
3.
Цитата
как х присвоить yk[i]?

А никак) Просто пишете
Код
Chislo(yk[i]);
и всё


Вот небольшой примерчик с оформлением функций. У меня массив статический, но Вам так нельзя, не подходит по условию статический.

Код

int IsSimple(int x)
{
    int i;
    if (x<2) return 0; //если меньше двух, дальше функция не будет выполняться
    for(i=2;i<x;i++)
    {
        if(!(x%i))
        {
            return 0; //есть делитель больший или равный двойке, но меньше числа, опять же прекращаем
        }
    }
    return 1; //делителей не нашлось, число простое
}

int main()
{
    int i;
    int x[50];
    for(i=0;i<50;i++)
    {
        cin >> x[i];
        if(IsSimple(x[i])) cout << "Prostoe\n";
        else cout << "Sostavnoe\n";
    }
    return 0; //заметьте, обещал вернуть int и вернул int
}

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 1.4.2010, 10:33
Сообщение #30


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



(i=2;i<x;i++)?
Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10)
можно сократитть количество проверок в цикле почти в 2 раза.

С функциями вроде разобрались, терь надо с дин. массивом разобраться.

yk[99] - получается статический
*(yk) - тоже не верно а как тогда?

Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

//----------------------------------------------------------------
    int Chislo(int x)
    {
      int j;
      if (x<4) return 1;
      else
       {
         for (j=2; j<floor(x/2)+1; j++)
         if (x%j==0) return 0;
       }
       return 1;
    }
//-----------------------------------------------------------------
    int mani()
    {
      clrscr();
      int w,i,j,n,s,g,yk;
      cout<<"n="; cin>>n;
      yk=new int[n];
      cout<<"El-ma \n";
      for (i=0; i<n; i++)
      {
         cin>>yk[i];
         s=yk[i];
         cout<<"\n s="<<s;
         if (Chislo(yk[i])) cout<<"Prostoe\n";
         else cout<<"Sostavnoe\n";
      }
      delete []yk;
      getch();
      return 0;
    }
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 1.4.2010, 18:39
Сообщение #31


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Цитата(InFuz @ 1.4.2010, 10:33) *

(i=2;i<x;i++)?
Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10)
можно сократитть количество проверок в цикле почти в 2 раза.


Тогда уж не до x/2 а до sqrt(x), обычно делается так, не стал писать, чтоб не усложнять.

Цитата(InFuz @ 1.4.2010, 10:33) *

yk[99] - получается статический
*(yk) - тоже не верно а как тогда?


Объявлять и выделять память так:

Код
int* yk = new int[n]


Обращаться же по индексу

Код
cin>>yk[i];
s=yk[i];


Пробуйте сортировать. Для сортировки сделайте функцию, которая в качестве параметра принимает указатель на начало массива. Можно конечно qsort, но так неинтересно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 2.4.2010, 14:38
Сообщение #32


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Вот отлаженный вариант

Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

//----------------------------------------------------------------
    int Chislo(int x)
    {
      int j;
      if (x<4) return 1;
      else
       {
         for (j=2; j<ceil(sqrt(x))+1; j++)
         if (x%j==0) return 0;
       }
       return 1;
    }
//-----------------------------------------------------------------
    int main()
    {
      clrscr();
      int w,i,j,n,s,g;
      cout<<"n="; cin>>n;
      int* yk = new int[n];
      cout<<"El-ma \n"<<"\n";
      for (i=0; i<n; i++)
      {
    cin>>yk[i];
    s=yk[i];
    cout<<"s["<<i<<"]="<<s;
    if (Chislo(yk[i])) cout<<" - Prostoe\n"<<"\n";
    else cout<<" - Sostavnoe\n"<<"\n";
      }
      delete []yk;
      getch();
      return 0;
    }


прежде чем сорировать надо еще переписать в другой массив, а qsort что конкретно делает?
надо сегодня доделать, а то завтро уже здавать.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 2.4.2010, 14:52
Сообщение #33


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

//----------------------------------------------------------------
    int Chislo(int x)
    {
      int j;
      if (x<4) return 1;
      else
       {
         for (j=2; j<ceil(sqrt(x))+1; j++)
         if (x%j==0) return 0;
       }
       return 1;
    }
//-----------------------------------------------------------------
    int main()
    {
      clrscr();
      int k,j,i,n; j=0; k=0;
      cout<<"n="; cin>>n;
      int* mas1 = new int[n];
      int* mas2 = new int[n];
      cout<<"El-ma \n"<<"\n";
      for (i=0; i<n; i++)
      {
         cin>>mas1[i];
         if (Chislo(mas1[i])) {mas2[j]=mas1[i]; j=j+1; k=k+1;}
                }
      for (i=0; i<n; i++)
      {
    cout<<"\nmas1["<<i<<"]="<<mas1[i];
      }
      cout<<"\n";
      for (j=0; j<k; j++)
      {
        cout<<"\nmas2["<<j<<"]="<<mas2[j];
      }
      delete []mas1;
      delete []mas2;
      getch();
      return 0;
    }


вся щас буду сортировку пробовать делать.
сортироваку тоже надо в виде функции делать.

P.S. тут вопрос один. я под 2 массив виделяю памяти тоже n хотя там может столько и не потребоваться, как заранее просчитать сколько под него памяти веделять? или это не принципиально?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 2.4.2010, 16:26
Сообщение #34


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



qsort - быстрая сортировка, хороший алгоритм, вопрос, зачтут ли его Вам.
Что делает? Сортирует массив. Требует указатель на массив, количество элементов, размер одного элемента и функцию сравнения.
Вот тут хорошо описано, как раз для Вашего случая простых чисел.

http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

Под второй массив можно выделять и меньше. Для этого достаточно посчитать, сколько простых чисел, а потом ещё раз прогнать и скопировать. А можно выделить и столько же... Смотреть надо на объёмы данных и учитывать, что важнее - скорость обработки или экономичность по памяти.

Сортировку, наверное, лучше написать свою. Пусть медленную, хоть пузырьком, но свою. Полезно))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 2.4.2010, 17:09
Сообщение #35


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Чот не знаю как пузырек оформить в виде функции, если просто в main дописать понятно, а как в функцию сортировки передать все значения что бы он с ними работала?

Хочу в функции сортировки сделать копию массива с которым надо рабоать, потом там его отсортировать и печатать то что получилось.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 2.4.2010, 19:30
Сообщение #36


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Цитата(InFuz @ 2.4.2010, 17:09) *

Хочу в функции сортировки сделать копию массива с которым надо рабоать, потом там его отсортировать и печатать то что получилось.


Плохое решение. Если Вы передаёте указатель на начало массива и количество элементов в нём, то изменяя элементы массива по указателю, Вы изменяете исходный массив. То есть, изменения будут "видны" и в вызывающей функции.

Вы понимаете, чем отличаются локальные данные и глобальные, данные кучи и данные стека?
Это то, с чего нам начали объяснять С на 1 курсе. И это правильно!
Это надо понимать. В С/С++ надо уметь работать с указателями, вот мне и интересно, у Вас с этим всё ок?

Поскольку сдавать завтра, скажу так: достаточно отсортировать массив по указателю, никуда его не копируя. А уже в main выводить его и всё прочее.

Но вообще рекомендую с указателями разобраться.
В качестве упражнения: выделите корректно память под трёхмерный массив, передайте его в функцию, отсортируйте как-нибудь, например, сначала по x, потом по y, потом по z (порядок сортировки сами выберите). А потом напечатайте и освободите корректно память - крайне полезное упражнения для начала.

PS. Если такие уж сильные проблемы с сортировкой, пузырёк могу по-быстрому написать))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 2.4.2010, 21:45
Сообщение #37


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Вот пузырек реалезованый не как функция.

Код
# include <iostream.h>
# include <stdio.h>
# include <math.h>
# include <conio.h>
# include <alloc.h>

//-----------------------------------------------------------------
    int Chislo(int x)
    {
      int j;
      if (x<4) return 1;
      else
       {
         for (j=2; j<ceil(sqrt(x))+1; j++)
         if (x%j==0) return 0;
       }
       return 1;
    }
//-----------------------------------------------------------------
   /* int Sort()
    {
      return 0;
    } */
//-----------------------------------------------------------------
    int main()
    {
      clrscr();
      int t,k,i2,j,j2,i,n; j=0; k=0;
      cout<<"n="; cin>>n;
      int* mas1 = new int[n];
      int* mas2 = new int[n];
      cout<<"El-ma \n"<<"\n";
      for (i=0; i<n; i++)
      {
    cin>>mas1[i];
      }
      for (i=0; i<n; i++)
      {
    cout<<"\nmas1["<<i<<"]="<<mas1[i];
      }
      cout<<"\n";
//-----------------------------------------------------------------
      for (i2=1; i2<n; i2++)
   {
      for (i=0; i<n-1; i++)
      {
    if (mas1[i]>mas1[i+1])
    {
      t=mas1[i];
      mas1[i]=mas1[i+1];
      mas1[i+1]=t;
    }
      }
   }
//-----------------------------------------------------------------
      for (i=0; i<n; i++)
      {
    cout<<"\nmas1["<<i<<"]="<<mas1[i];
      }
      cout<<"\n";
      for (i=0; i<n; i++)
      {
    if (Chislo(mas1[i])==1) {mas2[j]=mas1[i]; j=j+1; k=k+1;}
      }
      for (j=0; j<k; j++)
      {
    cout<<"\nmas2["<<j<<"]="<<mas2[j];
      }
      cout<<"\n";
//-----------------------------------------------------------------
      for (j2=1; j2<k; j2++)
   {
      for (j=0; j<k-1; j++)
      {
    if (mas2[j]<mas2[j+1])
    {
      t=mas2[j];
      mas2[j]=mas2[j+1];
      mas2[j+1]=t;
    }
      }
   }
//-----------------------------------------------------------------
      for (j=0; j<k; j++)
      {
    cout<<"\nmas2["<<j<<"]="<<mas2[j];
      }
      delete []mas1;
      delete []mas2;
      getch();
      return 0;
    }
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 3.4.2010, 5:13
Сообщение #38


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



а в чём проблема реализации как функции? Ведь то же самое!

Кстати, это нельзя считать ошибкой, но зачем Вы пишете, скажем,
j=j+1;

Ведь есть такой классный оператор инкремента)
j++;
Наверное, он даже где-то чуть-чуть оптимальнее. Рекомендую))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 3.4.2010, 9:21
Сообщение #39


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



j=j+1;
не знаю наверно привычка с паскаля еще так нагляднее, в паскалее вообщето то же есть альтернатива j:=j+1 или inc(j) ))

а че тоже самое то? )) функция она,... допустим считывает 1 элемент но там нельзя в самой функции написать mas1[i+1] т.к. у нее нет самоого массива и несчем сравнить, а на следующей итерации уже нет предыдущего [i-1].

P.S. приняли в таком виде, там было не принцепиально, главное чтобы функции вообще были ну у меня и была одна Chislo.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 3.4.2010, 13:34
Сообщение #40


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



В функцию нужно передавать весь массив, а не один элемент. Тогда после возврата из функции у вас на месте старого будет отсортированный массив.

например так

Код

void swap(int *p)
{
    int t=p[0];
    p[0]=p[1];
    p[1]=t;
}

void sort(int *arr, int n)
{
    int once_again, i;
    do
    {
        once_again=0;
        for(i=0;i<n-1;i++)
        {
            if(arr[i]<arr[i+1])
            {
                swap(arr+i);
                once_again=1;
            }
        }
    }while(once_again);
}


Это простейший пузырёк, реализованный в виде функции. Сортирует по возрастанию. Принимает указатель на начало и количество элементов.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.3.2024, 11:20

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru