Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одномерный массив!Помогите дописать код 
:(
    Опции темы
aleksejj
  Дата 9.6.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



Друзья,выручайте!Доделать код!
Код
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define max 100
void gen( int k, int h, int j, int x[max]);
void out (int k, int x[max]);
void BubbleSortInd (int k, int x[max]);
void BubbleSort (int k, int x[max]);
void main()
{
int t[max],n,a,b;
do
{
printf ("\nВведите кол-во элементов массива n (n<=50): ");
scanf ("%d",&n);
}
while (n>max);
printf ("Введите a и b: ");
scanf ("%d%d",&a,&b);
gen(n,a,b,t);
printf ("Сгенерированн массив: \n");
out(n,t);
printf("\nПолученный: \n");
BubbleSortInd(n,t);
out(n,t);
}

void gen( int k, int a, int b, int x[max])
{
int i;
srand (time(NULL)*1000);
for (i=0;i<k;i++)
{

x[i]=(rand()*1.0/(RAND_MAX)*(a-b)+b);

}
}

void out (int k, int x[max])
{
int i;
for (i=0;i<k;i++)
printf ("%d ",x[i]);

}

void BubbleSortInd (int k, int x[max])
{
int i,tek,mx,el;
el = 0;
tek=mx=1;
for(i=1; i<=k+1; i++)
if(i==k || x[i]!=x[i-1])
{
if(tek>mx) { mx = tek; el = i-1; }
tek = 1;
}
else tek++;
++k;
for(i=k+1; i>=el+1; i--)
x[i] = x[i-1];
x[el+1] = x[el];
}


Здесь нужно увеличить каждую максимальную серию на один элемент!
Например:
Был массив==>
x[0]=4
x[1]=1
x[2]=9
x[3]=9
x[4]=9
x[5]=6
x[6]=6
x[7]=9
x[8]=9
x[9]=9
А надо:
x[0]=4
x[1]=1
x[2]=9
x[3]=9
x[4]=9
x[5]=9
x[6]=6
x[7]=6
x[8]=9
x[9]=9
x[10]=9
x[11]=9

Добавлено @ 22:29
Помогите пожалуйста!У меня завтра зачёт по программированию,осталась последняя программма!



M
bsa
Пользуйся кнопкой код


Это сообщение отредактировал(а) bsa - 10.6.2009, 17:43
PM MAIL   Вверх
andrew_121
Дата 9.6.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Код отформатируй! Глаза жалко ломать!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
aleksejj
  Дата 9.6.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



void BubbleSortInd (int k, int x[max])
{
int i,tek,mx,el;
el = 0;
tek=mx=1;
for(i=1; i<=k+1; i++)
if(i==k || x[i]!=x[i-1])
{
if(tek>mx) { mx = tek; el = i-1; }
tek = 1;
}
else tek++;
++k;
for(i=k+1; i>=el+1; i--)
x[i] = x[i-1];
x[el+1] = x[el];
}
Эта функция отвечает за добавления элементов!Но я не могу сделать,чтобы увеличились все серии и массив увеличился на количество этих элементов

Добавлено через 1 минуту и 10 секунд
void BubbleSortInd (int k, int x[max])
{
int i,tek,mx,el;
el = 0;
tek=mx=1; // tek - длина текущей серии
// mx - максимальная длина
for(i=1; i<=k+1; i++)  // идем до конца массива
 if(i==k || x[i]!=x[i-1])  // если достигли конца массива или
 // текущий элемент не равен предыдущему
     {
 
  if(tek>mx) // если текущая серия длиннее максимальной,
       {
    mx = tek;  // запоминаем длину
    el = i-1;
      }       // и позицию последнего элемента в серии
   
 tek = 1;  // сбрасываем длину текущей серии (т.к. уже  перешли к другой)
  
     }
 else tek++;
 
++k; // увеличиваем размер массива, т.к. сейчас
 // добавим еще один элемент 
  
    for(i=k+1 ; i>=el+1; i--) // идем от конца к последнему элементу самой длинной серии
 x[i] = x[i-1]; // текущий элемент = предыдущему (сдвигаем часть массива вправо)
 x[el+1] = x[el];  // теперь добавляем еще один элемент     
               
   }

PM MAIL   Вверх
andrew_121
Дата 9.6.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Сказал же - отформатируй код! А ты что сделал?!
Давай условие. С утра сделаю.
На С, или С++ ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
aleksejj
Дата 9.6.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



Дан одномерный целочисленный массив,заполненный случайными числами.Серией называется группа подряд идущих элемениов,а их длинной-количество этих элементов(длина может равняться 1 ).Изменить массив,увеличив все серии наибольшей длины на один элемент.

Добавлено через 51 секунду
НА СИ

Добавлено через 1 минуту и 36 секунд
А во сколько ты примерно сделаешь?Просто у меня зачёт в 10.25!Помоги
PM MAIL   Вверх
andrew_121
Дата 9.6.2009, 23:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



На будущее.
Вот что значит форматировать код.
user posted image


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
aleksejj
Дата 10.6.2009, 07:36 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



 smile 
PM MAIL   Вверх
zim22
Дата 10.6.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



andrew_121, вы уверены что в вашем коде будут бросаться только стандартные исключения?
я думаю более правильно добавить в конце ещё один catch(...)


--------------------
PM MAIL   Вверх
azesmcar
Дата 10.6.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(zim22 @  10.6.2009,  09:40 Найти цитируемый пост)
я думаю более правильно добавить в конце ещё один catch(...) 

зачем же catch(...) ?
catch(boost::exception&), а уж после этого можно
Код

catch(...)
{
   show_fatal_error_and_die("ух ты!");
}

PM   Вверх
andrew_121
Дата 10.6.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



zim22
azesmcar, Спасибо за замечания. Полностью согласен smile . Но это был пример форматирования кода smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 10.6.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(andrew_121 @  10.6.2009,  10:00 Найти цитируемый пост)
Но это был пример форматирования кода 

 smile 
 smile 
просто интересно, а что за #endif? В каком #ifdef е функция main?
PM   Вверх
andrew_121
Дата 10.6.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



azesmcar, Это файл реализации некого объекта. Выше есть строка
Код

#ifdef 1
...

Для отладки.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zim22
Дата 10.6.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



мне вот интересно, в случае использования function-try блока куда return вставлять?
в каждый catch?
Код

int main()
try
{
  // do smth
  return 0;
} catch(exception&) {
  return 0;
} catch(...) {
  return 0;
}



Это сообщение отредактировал(а) zim22 - 10.6.2009, 11:19


--------------------
PM MAIL   Вверх
Soah
Дата 10.6.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



finally c++
Симуляция блока try-finally для С++

Цитата(zim22 @  10.6.2009,  11:18 Найти цитируемый пост)
куда return вставлять?

Код

int main() {
    try {
        // do smth
    } catch(exception&) {
        // ...
    } catch(...) {
        // ...
    }

    return 0;
}


Это сообщение отредактировал(а) Soah - 10.6.2009, 11:47
PM MAIL   Вверх
zim22
Дата 10.6.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Soah, почитал. это всё не то.
Про методику RAII я знаю. Но здесь вопрос не в захвате/освобождении ресурса при выхоже из области видимости, а в том, что функция main должна возвращать статус завершения.
И если в моём блоке try исключения не будет - то последняя строчка (return 0) выполнится. Но если exception будет кинут, то до return 0 мы не дойдём, соответственно необходимо будет сделать return в одном из блоков catch. Вопрос был в том, что если блоков catch несколько - то 
Цитата(zim22 @  10.6.2009,  11:18 Найти цитируемый пост)
 куда return вставлять?в каждый catch?


приведённый в rsdn аналог finally не подходит
Код

#define finally(Saver) \
catch ( ... ) \
{ \
  Saver \
  throw; \
} \
Saver

т.к. он вставляет catch(...)
Но exception может быть перехвачен в блоке catch выше. например в этом случае:
Код

try {throw exception(); }
catch(exeption&){ return -1; }
catch(...){ return -1; }


Приведённый Вами код меня не устраивает. Это не function-try блок и с ним всё проще, return в конце всех catch'ей ставится.
Код

int main() {
    try {
        // do smth
    } catch(exception&) {
        // ...
    } catch(...) {
        // ...
    }

    return 0;
}

function-try блок - это слово try, которое ставится ДО блока кода(открывающейся фигурной скобки), а не внутри него.

он необходимо не так часто, но иногда полезен, например, чтобы перехватывать исключения в constructor initializer list
Standard 15.4
Код

int f( int );
class C {
  int i;
  double d;
public :
  C(int , double );
};
C::C( int ii , double id)
try
: i(f(ii )) , d(id)
{
  / / constructor function body
}
catch (...)
{
  / / handles exceptions thrown from the ctor-initializer
  / / and from the constructor function body
}


Это сообщение отредактировал(а) zim22 - 10.6.2009, 12:08


--------------------
PM MAIL   Вверх
Soah
Дата 10.6.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



Цитата(zim22 @  10.6.2009,  11:58 Найти цитируемый пост)
Soah, почитал. это всё не то.

да я уже понял, опять решал другую задачу

Добавлено через 13 минут и 50 секунд
Recommended Use
Цитата

When should you use function try blocks? First, remember that you can't return a value inside a function-try-block handler. So it makes no sense to use a function try block for a non-void function.

PM MAIL   Вверх
aleksejj
Дата 10.6.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



 smile 
PM MAIL   Вверх
aleksejj
  Дата 10.6.2009, 21:34 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.6.2009

Репутация: нет
Всего: нет



 smile  smile  smile 
PM MAIL   Вверх
andrew_121
Дата 10.6.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



aleksejj, Чего спамишь? Бан хочешь?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define PRINT_SERIES(ser, cnt) { \
    series *p = NULL; \
    for ( p = ser; p != ser+cnt; p++ ) { \
        printf("SER: 0x%08X BEG: 0x%08X-%4d END: 0x%08X-%4d\n", p, p->beg, *p->beg, p->end, *p->end); \
    } \
} \

void ClearScreen() {
    COORD c = {0,0};
    DWORD whocares;
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),' ',2000,c,&whocares);
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

/***************************************************************************/

typedef struct series {
    int *beg;
    int *end;
} series;

/***************************************************************************/

int count_series(int *beg, int *end) {
    int v = 0;
    int count = 0;
    while ( beg != end ) {
        v = *beg;
        while ( *beg == v && beg != end ) {
            beg++;
            v++;
        }
        count++;
    }
    return count;
}

/***************************************************************************/

void get_series(int *beg, int *end, series *sea) {
    int v = 0;
    int count = 0;
    while ( beg != end ) {
        sea->beg = beg;
        v = *beg;
        for ( ; *beg == v && beg != end; beg++ ) {
            v++;
        }
        sea->end = beg-1;
        count++;
        sea++;
    }
}

/***************************************************************************/

int get_max_series_length(series *beg, series *end) {
    int _max = 0;
    while ( beg != end ) {
        _max = max(beg->end - beg->beg, _max);
        beg++;
    }
    return _max;
}

/***************************************************************************/

int count_max_series(series *beg, series *end, int len) {
    int count = 0;
    while ( beg != end ) {
        if ( beg->end-beg->beg == len ) {
            count++;
        }
        beg++;
    }
    return count;
}

/***************************************************************************/

int main(int argc, char** argv) {

    const int sizeof_int = sizeof(int);
    int maxserlen = 0;
    int maxsercnt = 0;
    int idx = 0;
    int size = 10;
    int count = 0;
    int any_allocated_size = 0;
    int *array_beg = NULL;
    int *result_arr= NULL;
    int *result_arr_curp= NULL;
    int *array_end = NULL;
    series *series_arr = NULL;
    series *series_arr_curp= NULL;
    series *maxser_arr= NULL;

    ClearScreen();
    /* get array_beg size */
//    printf("Choose the size of array_beg: "); fscanf(stdin, "%d", &size);
    if ( size == 0 ) {
        printf("You enter the zero size. Exiting.\n");
        return 0;
    }
    /* allocating memory */
    array_beg = (int*)malloc(size*sizeof_int);
    array_end = array_beg + size;
    /* check if memory allocated */
    if ( array_beg == NULL ) {
        printf("Cannot allocate memory! Exiting.\n");
        return 1;
    }
    /* fill the array_beg */
/*    for ( ; idx < size; idx++ ) {
        array_beg[idx] = rand()%100;
        printf("%d\n", array_beg[idx]);
    }
    printf("\n");
*/
#if 1
    size = 10;
    array_beg[0] = 0;
    array_beg[1] = 1;
    array_beg[2] = 2;
    array_beg[3] = 3;
    array_beg[4] = 5;
    array_beg[5] = 6;
    array_beg[6] = 7;
    array_beg[7] = 8;
    array_beg[8] = 9;
    array_beg[9] = 11;
#endif
    for ( ; idx < size; idx++ ) {
        printf("%d\n", array_beg[idx]);
    }
    printf("\n");
    /* count the series */
    count = count_series(array_beg, array_beg+size);
    /* allocating memory */
    series_arr = (series*)malloc(sizeof(series)*count);
    /* check if memory allocated */
    if ( series_arr == NULL ) {
        printf("Cannot allocate memory! Exiting.\n");
        free(array_beg);
        return 1;
    }
    /* get pointers on a series */
    get_series(array_beg, array_beg+size, series_arr);
    
    PRINT_SERIES(series_arr, count);
    
    /* get the maximum length of series */
    maxserlen = get_max_series_length(series_arr, series_arr+count);
    /* count the maximum length series */
    maxsercnt = count_max_series(series_arr, series_arr+count, maxserlen);
    /* alloc the new array_beg */
    any_allocated_size = (size*sizeof_int)+(maxsercnt*sizeof_int);
    result_arr_curp=result_arr = (int*)malloc(any_allocated_size);
    /* check if memory allocated */
    if ( series_arr == NULL ) {
        printf("Cannot allocate memory! Exiting.\n");
        free(array_beg);
        free(series_arr);
        return 1;
    }
    series_arr_curp = series_arr;
    while ( series_arr_curp != series_arr+count ) {
        any_allocated_size = (series_arr_curp->end-series_arr_curp->beg+1)*sizeof_int;
        memcpy(result_arr_curp, series_arr_curp->beg, any_allocated_size);
        result_arr_curp += series_arr_curp->end-series_arr_curp->beg+1;
        if (series_arr_curp->end-series_arr_curp->beg+1 == maxserlen) {
            *result_arr_curp = *series_arr_curp->end+1;
            result_arr_curp++;
        }
        series_arr_curp++;
    }
    
    for ( idx = 0; idx < size+maxsercnt; idx++ ) {
        printf("%d\n", result_arr[idx]);
    }

    free(array_beg);
    free(series_arr);
    free(result_arr);
    
    return 0;
}

/***************************************************************************/



Это сообщение отредактировал(а) andrew_121 - 15.6.2009, 02:19


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Гм...
Спасибо.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1339 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.