Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
atomer4ik
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 6
1

Ошибка в выводе массива

20.11.2016, 15:44. Просмотров 838. Ответов 3
Метки нет (Все метки)

Само задание: Данa последовательность a1,...,an (n<=100) действительныx чисeл. Выделить из нее знакочеpедующуюся подпоследовательность наибольшей длины и упоpядочить ее по возpастанию.

Код
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
 
int main()
{
    int i, j, n, pr, max=INT_MIN;
    int LONG=1, T1, T2, pass=0, hold=0;
    float a[100], b[100];
 
    printf("N=");
    scanf("%d",&n);
 
    for(i=0;i<n;i++)
    {
        printf("A[%d]=", i);
        scanf("%f", &a[i]);
    }
 
    for(i=1;i<n;i++)
    {
        pr=a[i]*a[i+1];
        if(pr<0)
        {
            LONG++;
        }
        else
        if(LONG>max)
        {
            T1=i-LONG;
            T2=i;
            max=LONG;
            LONG=0;
        }
    }
 
    for(i=0,j=T1;i<max,j<=T2;i++,j++)
    {
        b[i]=a[j];
        printf("b[%d]=%.2f\n",i, b[i]);
    }
 
    for(pass=0;pass<=n-1; pass++)
        for(i=1;i<=n-1;i++)
            if(b[i]>b[i+1])
            {
                hold=b[i];
                b[i]=b[i+1];
                b[i+1]=hold;
            }
 
    printf("\n");
 
    for(i=0;i<=max;i++)
        printf("b[%d]=%.2f\n",i, b[i]);
 
return 0;
}
Результат:

N=10
A[0]=1
A[1]=2
A[2]=-3
A[3]=6
A[4]=-6
A[5]=4
A[6]=5
A[7]=-9
A[8]=6
A[9]=5

b[0]=1.00
b[1]=2.00
b[2]=-3.00
b[3]=6.00
b[4]=-6.00
b[5]=4.00

b[0]=1.00
b[1]=-6.00
b[2]=-3.00
b[3]=2.00
b[4]=4.00
b[5]=6.00


Как видно, непонятный вывод массива: сначала захватывает ненужную единицу(A[0]), потом, естественно, выводит ее на экран да еще и не в отсортированном виде. Какая ошибка, подскажите, пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2016, 15:44
Ответы с готовыми решениями:

Ошибка в выводе массива с функциями
В матрицах А(7х6) и В(5х6) заменить все числа, кратные 3, единицами. Ошибки не выдает но выводит...

Множества, ошибка в выводе
Нужно вывести &quot;YES&quot;, если есть слова, в которых первая и последняя буква-согласные. Первый входной...

Ошибка в потоковом вводе/выводе
Условие задачи не соответствует решению. Что не так? Вот условие и программа : Напишите программу,...

Ошибка при выводе данных
Вот пример из книжки #include &lt;stdarg.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; double *...

Ошибка при выводе элементов структуры
Есть файл содержимое, которого примерно такое Ni Du MATI Va Kr MATI где первый столбик - имя,...

3
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
20.11.2016, 19:10 2
Лучший ответ Сообщение было отмечено atomer4ik как решение

Решение

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
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 14
 
int main(void)
{
    int A[N], i, count = 0, max = 0, last;
    srand(time(NULL));
    for(i = 0; i < N; i++)
        printf("%3d", A[i] = rand() % 10 - 5);
    for(i = 1; i < N; i++){
        if(A[i] > 0){
            if(A[i - 1] < 0){
                count++;
            }
            else{
                if(count > max){
                    max = count;
                    last = i - 1;
                }
                count = 0;
            }
        }
        if(A[i] < 0){
            if(A[i - 1] > 0){
                count++;
            }
            else{
                if(count > max){
                    max = count;
                    last = i - 1;
                }
                count = 0;
            }
        }
        if(A[i] == 0){
            if(count > max){
                    max = count;
                    last = i - 1;
            }
            count = 0;
        }
    }
    if(max)
        printf("\nMax sequence is A[%d] to A[%d] total %d elements\n", last - max, last, max + 1);
    else
        puts("Sequence not found");
    return 0;
}
сортировку самостоятельно добавите
ноль не участвует в последовательностях и прерывает уже имеющиеся,ибо не является ни положительным ни отрицательным числом

Добавлено через 5 минут
atomer4ik, исправил чуть в конце
1
atomer4ik
0 / 0 / 0
Регистрация: 16.11.2016
Сообщений: 6
20.11.2016, 19:29  [ТС] 3
Спасибо. А вот как бы еще именно эту последовательность поместить в другой массив, чтобы потом отсортировать

Добавлено через 12 минут
Подумал в описании переменных добавить B[N].
И везде после count++ дописать по
C
1
2
if (count>=2)
B[i]=A[i];
Чтобы записывался массив B, но не выходит
0
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
20.11.2016, 19:39 4
Лучший ответ Сообщение было отмечено atomer4ik как решение

Решение

а зачем в другой,сортируйте прям тут
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 14
 
int main(void)
{
    int A[N], i, count = 0, max = 0, last;
    srand(time(NULL));
    for(i = 0; i < N; i++)
        printf("%3d", A[i] = rand() % 10 - 5);
    for(i = 1; i < N; i++){
        if(A[i] > 0){
            if(A[i - 1] < 0){
                count++;
            }
            else{
                if(count > max){
                    max = count;
                    last = i - 1;
                }
                count = 0;
            }
        }
        if(A[i] < 0){
            if(A[i - 1] > 0){
                count++;
            }
            else{
                if(count > max){
                    max = count;
                    last = i - 1;
                }
                count = 0;
            }
        }
        if(A[i] == 0){
            if(count > max){
                    max = count;
                    last = i - 1;
            }
            count = 0;
        }
    }
    if(max){
        printf("\nMax sequence is A[%d] to A[%d] total %d elements\n", last - max, last, max + 1);
        for(i = last - max; i <= last; i++)
            printf("%d ", A[i]);
        putchar('\n');
    }
    else
        puts("Sequence not found");
    int min, x, j, temp;
    for(j = last - max; j <= last; j++){
        for(i = j, min = A[j], x = j; i <= last; i++){
            if(A[i] < min){
                min = A[i];
                x = i;
            }
        }
        temp = A[j];
        A[j] = min;
        A[x] = temp;
    }
    for(j = last - max; j <= last; j++)
        printf("%d ", A[j]);
    return 0;
}

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

1
20.11.2016, 19:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2016, 19:39

Ошибка при выводе сведений о студентах
Народ помогите найти ошибку. Не могу найти. #include&lt;stdio.h&gt; void main() {char fio; char...

Ошибка сегментирования при выводе строк
написал код для задачи которая должна выводить заданные строки. при компиляции выводит: &quot;ошибка...

Ошибка сегментации при выводе графа
Вечер добрый, г-да программисты! Ниже приведены фрагменты из программы, описывающей и выводящей...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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