Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Студентам с лабораторными сюда (https://forum.antichat.xyz/showthread.php?t=122076)

Fire3d 26.06.2007 20:03

Возвращаюсь к опросам....
Цитата:

uses crt;

procedure variant(c,x,y:integer;s:string);
begin
textcolor(c); gotoxy(x,y); write(s);
end;

procedure vopros(c,x,y:integer;s:string);
begin
textcolor(c); gotoxy(x,y); write(s);
end;

var otvet,ball,summa:integer;
i:byte;
begin
clrscr;
ball:=0;
vopros(2,30,1,'B kakom weke no9BuJIc9 komp. ?');
variant(14,2,1,'1)‚ 21 weke.');
variant(14,2,2,'2)ў 19 weke. ');
variant(14,2,3,'>'); read(otvet);

clrscr;

vopros(2,30,1,'Antichat-samu ly4shi ?');
variant(14,2,1,'1)Da!');
variant(14,2,2,'2)Hea!');
variant(14,2,3,'>');readln(otvet);

if otvet=1 then ball:=ball+5;
summa:=ball;
if otvet=2 then ball:=ball-5;
writeLn('Vash ball=',summa);
readkey;
end.
Хм...если сделать рандом.... в моем случие при рандоме окажется vopros(2,30,1,'Antichat-samu ly4shi ?'); 1)Нет а 2)Да....
и бал в минус пойдет а ответ будет верный как выйти из ситуции....?

Дикс 30.06.2007 12:11

Имеет место быть следующее задание:

Вариант задания реализовать в виде функции, использующей для работы со строкой только указатели и операции вида *p++, p++ и т.д..

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

------

я не знаю с чего начать.
объясните пожалуйста попроще что значит " Быстрая" сортировка (разделением),
а я уже на основе этого сам всё сделаю.

The_HuliGun 30.06.2007 12:43

Ето алгоритм QuickSort, читай здесь

Дикс 30.06.2007 16:32

никак не могу сделать этот квиксорт =\


вот чего я делаю:
1. задаю каким-то хреном середину массива (этот выбор наугад совсем мне не нравится, херня какая-то)
2. затем ищу слева число, больше или равное данному.
если не нашёл, то оно получается такое же как и в середине.
3. ищу слева меньшее данного. или опять же ему равное?
вот уже из-за этой херни я не вижу там логики.
сколько описаний в сети не прочёл - нигде не сказано точно.
примеров нормальных вообще нет.

сравнил два числа, (если они не равны друг другу), поменял местами.
затем снова ищу. и так наверно до тех пор пока они в любом случае не станут равны друг другу. (ну вот такие рассуждения хоть как-то упорядочивают мои мысли. сортируют их блин.)

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

помогите, набросайте хоть какой-нить пример нормальный

ZaCo 30.06.2007 16:54

да уж, куда этому идиоту хоару до нас...

Дикс 30.06.2007 17:15

:d
да не хоар идиот, а тот кто учебник писал. там таки и пишут - возьмём наугад.. чо за херня, как можно делать что-то наугад? в топку таких учителей

ZaCo 30.06.2007 17:24

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

Дикс 30.06.2007 18:24

вот можно ли это дело изменить так чтобы функция работала только на указателях?


void quicksort(int *array, int start, int stop)
{
int left = start,
right = stop,
center = array[(start + stop) / 2];

while(left<right)
{
while(array[left]<center) left++;
while(array[right]>center) right--;
if(left<=right)
{
swap(&array[left], &array[right]);
left++;
right--;
}
}
if(right>start) quicksort(array, start, right);
if(left<stop) quicksort(array, left, stop);
}

ZaCo 30.06.2007 18:37

array[i] -> *(array+i)
&array[i] -> array+i

Дикс 01.07.2007 09:38

задача: Функция находит в строке заданную подстроку и
возвращает динамический массив указателей на все вхождения этой подстроки.

так вот я не знаю, какой размер задать массиву? получается всякая чушь:

Код:

#include "stdio.h"
void strf(char s1[], char s2[], int pos=0)
{
        int n = sizeof(s1)/sizeof(s1[0]);
        int n2 = sizeof(s2)/sizeof(s2[0]);
        char *mass[20];
        for(int i=0; i<=n; i++)
        {
        if(s1[i] == s2[i])
        {
        int g=i;
        for(int l=i; l<=n2; l++)
                if(s1[l]!=s2[l])
                {
                int g=-1; break;
                }
        mass[i] = &s1[g];
        }
        }

}


void main()
{
        char s1[] = "Terriuckble Fucker Stuckpidly";
        char s2[] = "uck";
                strf(s1,s2);
}



Время: 06:06