Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Loose My Braines
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
#1

Определить начальный и конечный номера элементов массива - C++

29.12.2008, 06:22. Просмотров 674. Ответов 5
Метки нет (Все метки)

Хех,у меня вот какая задача:Определить нач и конечный номера эл. одномерного массива,составляющих макс. по длинне последовательность,значения элементов которой монотонно возрастают.
Алгоритм нахождения из массива этой самой последовательности есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int cikl(int v[100],int *a,int t)
{
int k,l,m,y,i;
m=0;
l=0;
s[0]=a[0];
flag=0;
for(i=0;i<t;i++)
    {
    if (flag==1)
        { if (l>m){
        for (i=0;i<l;i++)
        y[i]=s[i];}
            for (i=0;i<l;i++)
        s[i]=0;
        m=l;
        l=0;
                flag=0;
        }
    else
        {
        if (a[i]>a[i-1])
            {i++;
                    s[i]=a[i];
            l++;
            }
            else flag=1;
        }
        }
return(l);
}
осталось ток поменять возращаемое значение и закончить....туплю,аж злости на себя нет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2008, 06:22     Определить начальный и конечный номера элементов массива
Посмотрите здесь:

Транспонировать матрицу. Вывести на печать начальный и конечный вариант матрицы - C++
Дана квадратная матрица натуральных чисел, (получаемая через rand()). Транспонировать матрицу. Вывести на печать начальный и конечный...

Строки. Найти в тексте начальный и конечный отрезок цифрового алфавита - C++
Подскажите как в форме записать эту программу : Дана последовательность символов (строка). Найти в тексте начальный и конечный отрезок...

Создать отсутствующий файл и записать в него начальный и конечный элементы существующего файла - C++
Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге...

Определить порядковые номера и значения первого положительного элементов массива - C++
завис с еще одной задачей(( помогите кто может! Определить порядковые номера и значения первого положительного и последнего...

Определить порядковые номера и значения первого положительного и п оследнего отрицательного элементов массива Z. - C++
http://www.cyberforum.ru/attachment.php?attachmentid=29664&amp;stc=1&amp;d=1272928037

Определить количество элементов массива, имеющих чётные порядковые номера и являющихся нечётными числами - C++
Помогите пожалуйста с задачей Дан массив из N элементов. Определить количество элементов, имеющих чётные порядковые номера и являющихся...

Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов - C++
Задан целочисленный массив размерности N. Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов.

Найти номера двух ближайших элементов из этого массива, т. е. элементов с наименьшим модулем разности - C++
Дан массив размера N. Найти номера двух ближайших элементов из этого массива (т. е. элементов с наименьшим модулем разности) и вывести эти...

Есть ли среди элементов заданного массива простые числа? Если да, то вывести номера этих элементов - C++
Задан целочисленный массив размерности N. Есть ли среди элементов массива простые числа? Если да, то вывести номера этих элементов.

Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов - C++
1) Дан массив размера N. Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов. Найденные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.12.2008, 08:58     Определить начальный и конечный номера элементов массива #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
#include <stdio.h>
 
#define asize(a)  (sizeof (a) / sizeof (a)[0])   /* считает длину массива */
 
#define IN  1   /* внутри последовательности  */
#define OUT 0   /* снаружи последовательности */
 
/* находит начальный и конечный индексы максимальной
   монотонно-возрастающей последовательности чисел в одномерном массиве */
main()
{
    int i, n, state, st, en, maxlen;
    int nums[] = {
        1, 2, 3, 1, 0, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0
    };
    
    for (i = 1, n = maxlen = 1, state = OUT; i < asize(nums); i++)
        if (nums[i-1] < nums[i]) {
            n++;
            if (state == OUT) {
                state = IN;
                st = i-1;
            }    
            if (maxlen < n) {
                maxlen = n;
                en = i;
            }    
        } else {
            state = OUT;
            n = 1;
        }    
    printf("%d %d\n", st+1, en+1);
    return 0;
}
Loose My Braines
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
29.12.2008, 09:39  [ТС]     Определить начальный и конечный номера элементов массива #3
Упс!Самое главное забыла!!!!Ввод и вывод производятся из файла в файл....воооть,можно???Пожаааааалуста!!!!!!очень надо!!!вопрос жизни!!!
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.12.2008, 10:15     Определить начальный и конечный номера элементов массива #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
#include <stdio.h>
 
#define IN  1   /* внутри последовательности  */
#define OUT 0   /* снаружи последовательности */
 
/* находит начальный и конечный индексы максимальной
   монотонно-возрастающей последовательности чисел в одномерном массиве;
   из файла в файл  */
main()
{
    FILE *ifp, *ofp;
    int a, b, i, n, state, st, en, maxlen;
    char *ifname = "file.txt", *ofname = "ofile.txt";
    
    if ((ifp = fopen(ifname, "rb")) == NULL)
        return 1;
    if ((ofp = fopen(ofname, "wb")) == NULL)
        return 2;
    if (fscanf(ifp, "%d", &a) != 1)
        return 3;
    for (i = n = maxlen = 1, state = OUT; fscanf(ifp, "%d", &b) == 1; a = b, i++)
        if (a < b) {
            n++;
            if (state == OUT) {
                state = IN;
                st = i-1;
            }    
            if (maxlen < n) {
                maxlen = n;
                en = i;
            }    
        } else {
            state = OUT;
            n = 1;
        }    
    fprintf(ofp, "%d %d\n", st+1, en+1);
    fclose(ifp);
    fclose(ofp);
    return 0;
}
file.txt
Код
1 2 3 1 0 3 4 5 1 2 3 4 5 1 1 1 0 0 0
ofile.txt
Код
9 13
Loose My Braines
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
29.12.2008, 11:08  [ТС]     Определить начальный и конечный номера элементов массива #5
Я вас люблю!!!!!!!!!!
Правда-правда!!!!!!!

Добавлено через 1 минуту 20 секунд
Ток один вопрос:#define IN 1 /* внутри последовательности */
#define OUT 0 /* снаружи последовательности */
Это что?зачем?))))
Заранее прошу прощения за глупые вопросы)))
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.12.2008, 14:04     Определить начальный и конечный номера элементов массива #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#include <stdio.h>
 
#define IN  1   /* внутри последовательности  */
#define OUT 0   /* снаружи последовательности */
 
/* находит начальный и конечный индексы максимальной
   монотонно-возрастающей последовательности чисел в одномерном массиве;
   из файла в файл  */
main()
{
    FILE *ifp, *ofp;
    int a, b, i, n, state, fix, st, en, maxlen;
    char *ifname = "file.txt", *ofname = "ofile.txt";
    
    if ((ifp = fopen(ifname, "rb")) == NULL)
        return 1;
    if ((ofp = fopen(ofname, "wb")) == NULL)
        return 2;
    if (fscanf(ifp, "%d", &a) != 1)
        return 3;
    for (i = n = maxlen = 1, state = OUT; fscanf(ifp, "%d", &b) == 1; a = b, i++)
        if (a < b) {
            n++;
            if (state == OUT) {
                state = IN;
                fix = i-1;
            }    
            if (maxlen < n) {
                maxlen = n;
                st = fix;
                en = i;
            }    
        } else {
            state = OUT;
            n = 1;
        }    
    fprintf(ofp, "%d %d\n", st+1, en+1);
    fclose(ifp);
    fclose(ofp);
    return 0;
}
обновил коды, там при нахождении последовательности начало продолжало смещаться

когда последовательность найдена надо обозначить её вход но только один раз, и делать это для каждой найденной последовательности, для этого флаг состояния который до обнаружения последовательности готов к сохранению начала, а после обнаружения закрывается до следующей последовательности
Yandex
Объявления
29.12.2008, 14:04     Определить начальный и конечный номера элементов массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru