Помогите решить решенную задачку

Тема в разделе "Общие вопросы по С и С++", создана пользователем Bio, 20 дек 2006.

Статус темы:
Закрыта.
  1. Bio

    Bio Гость

    Помогите решить решенную задачку

    Вообще мне надо решить вот это: "Сортировка разделением. Способ разделения : интервал между минимальным и максимальным значениями элементов массива разбить пополам и относительно этого значения разбить массив на две части (с использованием вспомогательных массивов)."
    Но, чистя диск, случайно наткнулся на одну прогу. (Откуда взялась – не знаю). Интуитивно догадываюсь, что делает она то что надо. Но врубиться в смысл не могу. Короче, если кому нетрудно, объясните "на пальцах" что она делает. И если это не то что надо, подскажите, как сделать то.
    Исходняк:
    Код (Text):
    #include <stdio.h>

    void sort(int A[], int n)
    {
    int B1[100],B2[100];
    int i,i1,i2,s,k;
    for (s=1; s!=n; s*=2)     // Размер группы кратен 2
    {                
    for (i=0; i<n/2; i++) // Разделить пополам
    {
    B1[i]=A[i];
    B2[i]=A[i+n/2];
    }

    i1=i2=0;

    for (i=0,k=0; i<n; i++) // Слияние с переходом " скачком"
    {
    f (i1==s && i2==s)          // при достижении границ обеих
    k+=s,i1=0,i2=0;         // групп
    if (i1==s) A[i]=B2[k+i2++];
    else        // 4 условия слияния по окончании
    if (i2==s) A[i]=B1[k+i1++];
    else    // групп и по сравнению
    if (B1[k+i1 ] < B2[k+i2 ]) A[i]=B1[k+i1++];
    else A[i]=B2[k+i2++];
    }
    }
    }

    void main()

    {
    int A[]={3,5,7,4,1,6,8,0};
    sort(A,8);
    for (int i=0; i<8; i++) printf("%d ",A[i]);
    }
    Конкретно интересует запись: B1[k+i1++] и ей подобные. Это что и как?
    Надо под VS6 без дополнительных библиотек - начальный уровень так сказать
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    B1[k+i1++] -> B1[k + (i1++) ] ->B1[k+ ( i1 = i1 + 1 ) ]
    Если я понятно выразился :)
     
  3. Bio

    Bio Гость

    Для: European
    Понятно.
    Но это в частности. А в целом прога правильная, и как она работает?

    Да и ещё один вопрос.
    (Не будет этих задач - не будет допуска до экзанмена :-((()
    Надо чтобы по экрану скакали шарики, отскакивая от стенок и друг от друга.
    Сделал. Скачут. Но не все. Одни вообще не прыгают, какие то не сталкиваются. В чём глюк?
    ////////////////
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include<math.h>
    #include<iostream.h>
    #include<graphics.h>
    #include<dos.h>
    #include<conio.h>

    const int R=10, V=10, N=10; //радиус, макс скорость, кол-во
    const double pi=3.14;

    double angle;
    int CurV, x=0, y=1, vx=2, vy=3; //составляющие
    int Mol[N][4]; //массив молекул
    int k,k1;



    void main()
    { int i;
    int W,H;

    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "c:\\TC\\BGI");
    errorcode = graphresult();

    if (errorcode != grOk)
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    return;
    }

    randomize();
    cleardevice();
    W=getmaxx(); H=getmaxy();

    for(i=0;i<N;i++) //Выбор начального положения
    {
    Mol[x]=random(W); //по х
    Mol[y]=random(H); //по у
    angle=random(360)*pi/180;

    CurV=random(V)+1; //скорость
    Mol[vx]=CurV*sin(angle); //составляющие по х
    Mol[vy]=CurV*cos(angle); //составляющие по у
    }

    while (!kbhit())
    {
    for(i=0;i<N;i++)
    { //стираем
    setcolor(BLACK);
    moveto(Mol[x]-R,Mol[y]-R);
    setfillstyle(1,BLACK);
    fillellipse(Mol[x]-R,Mol[y]-R,10,10);

    Mol[x]+=Mol[vx]; //двигаем
    Mol[y]+=Mol[vy];

    if (Mol[x]>W-R) //проверяем на столк-е со стенками
    {
    Mol[x]=W-R;
    Mol[vx]=-Mol[vx];
    }
    if (Mol[x]<R)
    {
    Mol[x]=R;
    Mol[vx]=-Mol[vx];
    }
    if (Mol[i][y]>H-R)
    {
    Mol[i][y]=H-R;
    Mol[i][vy]=-Mol[i][vy];
    }
    if (Mol[i][y]<R)
    {
    Mol[i][y]=R;
    Mol[i][vy]=-Mol[i][vy];
    }

    /*--столкновение друг с другом ------------*/
    for(k=0;k<N;k++)
    {
    for(k1=k+1;k1<N;k1++)
    {
    if (sqrt((double)(Mol[k][x]-Mol[k1][x])*
    (double)(Mol[k][x]-Mol[k1][x])+
    (double)(Mol[k][y]-Mol[k1][y])*
    (double)(Mol[k][y]-Mol[k1][y]))<(R+R))
    {
    Mol[k1][vx]=-Mol[k1][vx];
    Mol[k][vx]=-Mol[k][vx];
    }
    }
    }
    /*--------------------------------------*/
    //рисуем

    setcolor(RED);
    moveto(Mol[i][x]-R,Mol[i][y]-R);
    setfillstyle(1,RED);
    fillellipse(Mol[i][x]-R,Mol[i][y]-R,10,10);


    } //задержка
    delay(10);
    }
    getch();
    closegraph();
    }
    \\\\\\\\\\\\\\\\[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
     
  4. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    хм... B1[k+i1++] -> B1[k + (i1++) ] ->B1[k+i1]; i1=i+1; как мне кажется существенная разница
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: Kmet
    Ты прав! Я именно это и имел в виду, только выразился не так :) К концу дня проще было словами пояснить ;)
     
  6. Bio

    Bio Гость

    Кто нибудь объяснит как это работает?! B)
     
  7. Bio

    Bio Гость

    Первый вопрос снимается. Додумался сам. Написал и сдал. Работает! Если кого интересует могу выложить исходняк. Кстати,
    это вовсе не это, это значит, что записывается в массив с индексом [k+i1] и затем i1 увеличивается на один.
    Однако остаются вопросы по шарикам. Может кто подскажет русский хелп по <graphics.h>?
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Bio+23:12:2006, 07:54 -->
    <span class="vbquote">(Bio @ 23:12:2006, 07:54 )</span><!--QuoteEBegin-->это вовсе не это, это значит, что
    [snapback]51564" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Тебе же уже это Kmet сказал! Спасибо, что ты открыл мне глаза на жизнь!
     
  9. Bio

    Bio Гость

    Незачто, мож тебе ещё чё открыть?
     
Загрузка...
Похожие Темы - Помогите решить решенную
  1. mrx13
    Ответов:
    8
    Просмотров:
    257
  2. kuklofon
    Ответов:
    9
    Просмотров:
    573
  3. GREED
    Ответов:
    1
    Просмотров:
    533
  4. vovanabali
    Ответов:
    0
    Просмотров:
    531
  5. zarina
    Ответов:
    0
    Просмотров:
    674
Статус темы:
Закрыта.

Поделиться этой страницей