Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. Fire3d

    Fire3d Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    47
    Likes Received:
    6
    Reputations:
    0
    Возвращаюсь к опросам....
    Хм...если сделать рандом.... в моем случие при рандоме окажется vopros(2,30,1,'Antichat-samu ly4shi ?'); 1)Нет а 2)Да....
    и бал в минус пойдет а ответ будет верный как выйти из ситуции....?
     
    #21 Fire3d, 26 Jun 2007
    Last edited: 26 Jun 2007
  2. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Имеет место быть следующее задание:

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

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

    ------

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

    The_HuliGun Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    191
    Likes Received:
    84
    Reputations:
    11
    Ето алгоритм QuickSort, читай здесь
     
    1 person likes this.
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    никак не могу сделать этот квиксорт =\


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

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

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

    помогите, набросайте хоть какой-нить пример нормальный
     
    1 person likes this.
  5. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    да уж, куда этому идиоту хоару до нас...
     
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    :d
    да не хоар идиот, а тот кто учебник писал. там таки и пишут - возьмём наугад.. чо за херня, как можно делать что-то наугад? в топку таких учителей
     
  7. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    наугад, потому что выбор элемента абсолютно никак не влияет на конечную эффективность.
    зы наугад читай как произвольным образом.
     
  8. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    вот можно ли это дело изменить так чтобы функция работала только на указателях?


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

    while(left<right)
    {
    while(array
    <center) left++;
    while(array
    >center) right--;
    if(left<=right)
    {
    swap(&array
    , &array
    );
    left++;
    right--;
    }
    }
    if(right>start) quicksort(array, start, right);
    if(left<stop) quicksort(array, left, stop);
    }​
     
  9. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    array -> *(array+i)
    &array -> array+i
     
  10. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    задача: Функция находит в строке заданную подстроку и
    возвращает динамический массив указателей на все вхождения этой подстроки.

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

    Code:
    #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);
    }
     
  11. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    вот переделал сколько смог, но всё равно не работает собака серая!
    я с массивом ms уже замучался. надо чтобы он был массивом указателей char *ms
    и в него сохранялись указатели на первые вхождения подстроки в строку, т.е.
    адреса на три буквы U, за которыми следуют буквы C и K.
    В учебнике написано что для массивов указателей вообще не выделяется память, и как тогда быть?
    Как наполнить массив указателями?
    Постучитесь кто-нить в аську 268238560, объясните, иначе я на экзамен не попаду, очень нужен дельный совет!
    По сути, могу даже яндекс деньгами рассчитаться за помощь, в разумных пределах конечно.

    #include "stdio.h"


    char * strf(char *s1, char *s2)
    {
    for (int m1=0;s1[m1]!='\0';m1++);
    for (int m2=0;s2[m2]!='\0';m2++);

    int ms[5];
    int counter=0;
    int ps=0;
    for(int i=0;i<m1;i++)
    {

    if(s1 == s2[0])
    {
    int start = i;
    for(int j=0;j<m2;j++)
    {
    if(s1[j+i] != s2[j])
    ps = 1;
    }

    if(ps == 0)
    ms[counter] = start;

    }

    }

    return (int)ms[5];
    }


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


    strf(&s1[0],&s2[0]);

    for(int l=0;l<5;l++)
    printf("%d \n", ms[l]);

    }
     
  12. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    и ещё: где взять alloc.h? у меня в МС визуал си++ 6.0 его нет
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Юзай new/delete вместо (m/c)alloc/free
     
  14. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Или вот: http://www.codenet.ru/progr/visualc/esmall/add.txt
     
  15. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    плахой совет, ибо exception safe код при явном вызове delete получить трудно, потому правильный совет звучит так-
    используйте умные указатели и обёртки над указателями вместо освобождения ресурсов на прямую.
     
  16. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    подскажите вот что:

    entries = (char**)realloc(entries, arr_size*sizeof(char*));
    такой строкой я заново переопределяю массив указателей entries или к нему как-то добавляется свободное место?
    мне нужно в цикле добавлять в динамический массив указатели и каждый раз увеличивать его размер.


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

    Code:
    #include "stdio.h"  // ввод/вывод
    #include "stdlib.h" // работа с памятью
    
    
    char ** fndr(char *s1, char *s2, int *n_entrs)
    {
    char ** entries = NULL; // массив с указателями на вхождения
    int arr_size = 2; // изначально его размер 0
    int counter = 0; // счётчик записей
    int destroy = 0; // если все буквы совпали то она равна нулю
    
    for(int s1_len=0;s1[s1_len] != '\0'; s1_len++); // s1_len - длина первой строки
    for(int s2_len=0;s2[s2_len] != '\0'; s2_len++); // s2_len - длина второй строки
    
    for (int i=0; i<s1_len; i++)
    {
    	if(s1[i] == s2[0]) // если совпал первый символ
    	{
    	for(int g=0; g<s2_len; g++)
    	{
    	if(s1[i+g] != s2[g])
    		destroy = 1;
    	}
    
    	if(!destroy)
    	{
    
    
    		 if(counter >= arr_size)
            {
                arr_size *= 2;
    	entries = (char**)realloc(entries, arr_size*sizeof(char*)); // добавление памяти
            }
    
    	entries[counter] = &s1[i]; // добавление указателя в массив
    	counter++; // счотчик инкрементируем
    	}
    
    	}
    
    
    } // конец перебора первой строки
    
    *n_entrs = counter;
    return entries;
    }
    
    
    
    
    void main()
    {
    char s1[] = "my house is you house in you house is wife";
    char s2[] = "house";
    
    char ** entries; // массив с указателями на вхождения
    int n_entrs = 0; // кол-во вхождений
    
    entries = fndr(s1, s2, &n_entrs);
    
    
    for (int n=0; n<n_entrs; n++)
    	printf("%s \n", entries[n]);
    
    free(entries);
    }
    
     
  17. Z0rd$23

    Z0rd$23 New Member

    Joined:
    11 Jun 2006
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Тут некоторые сортировки на С++, реализация. Если кому надо.
    http://www3.msiu.ru/~roganov/2sem/sort.cpp
     
  18. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    дайте инфы по оверлеям с нуля плз. юзал поиск, не нашел

    ЗЫ не нашел другого раздела, чтобы спросить=\
     
  19. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Piflit, я тебе уже писал, тебе нужно ознакомиться с документациями по формату PE, но уровень на котором ты находишься сейчас явно не предполагает ознакомления с этой темой. Лучше разберись с основнами для начала. Про указатели, ссылки почитай и т.п. И еще, не путай, если хочешь учиться покупай книгу именно по С, а не талмуд по С++ , ООП на данный момент тебе явно не нужно.
    wasm.ru -> статьи и форум, лучше чем там не ответят пожалуй нигде.
     
    #39 Ni0x, 15 Sep 2007
    Last edited: 15 Sep 2007
  20. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Спасибо за ответ. Я знаю, что ты много занешь, просто хочется услышать еще чьи-то мнения.
     
Thread Status:
Not open for further replies.