Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 11

Выяснить имеются ли в массиве А два идущих подряд нулевых элемента

24.06.2013, 21:25. Показов 2591. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выяснить имеются ли в массиве А (а1, а2, ...,аn) два идущих подряд нулевых элемента. Напечатать их порядковые номера.
Заранее спасибо большое!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2013, 21:25
Ответы с готовыми решениями:

Определить, имеются ли в массиве два подряд идущих нулевых элемента
Одномерный массив из 8 элементов. - Заполнить с клавиатуры - Определить, имеются ли в массиве два подряд идущих нулевых элемента. ...

Выяснить, имеются ли в массиве два идущих подряд отрицательных элемента
Дана последовательность целых чисел. Выяснить, имеются ли в данном массиве два идущих подрят отрицательных элемента. Подсчитать количество...

Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента
Помогите решить пожалуйста!!! буду очень благодарна) Дан массив действительных чисел а1,…, аn. Выяснить, имеются ли в данном массиве...

16
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
25.06.2013, 11:43
QBasic/QuickBASIC
1
2
3
4
5
FOR I = LBOUND(A) TO UBOUND(A) - 1
    IF ABS(A(I)) + ABS(A(I + 1)) = 0 THEN
        PRINT I, I + 1
    END IF
NEXT I
0
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 11
25.06.2013, 12:08  [ТС]
Пишет только массив определен..там же должен быть какой то результат, напечатаны порядковые номера
0
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
26.06.2013, 08:06
Цитата Сообщение от Sanchek Посмотреть сообщение
Пишет только массив определен..там же должен быть какой то результат, напечатаны порядковые номера
Ну так, что просили то и дал. Определение массива и его заполнение за тобой (там буквально 4 строчки кода). Я сделал только его обработку и вывод результата.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
26.06.2013, 21:38
Цитата Сообщение от PAnT0P Посмотреть сообщение
IF ABS(A(I)) + ABS(A(I + 1)) = 0 THEN
- не самое лучшее решение... Хотя бы потому, что может вызвать переполнение. Уж лучше IF SGN(A(I)) + SGN(A(I + 1)) = 0 THEN (если в QBasic-е есть функция SGN).
0
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
27.06.2013, 00:30
Цитата Сообщение от Catstail Посмотреть сообщение
- не самое лучшее решение... Хотя бы потому, что может вызвать переполнение. Уж лучше IF SGN(A(I)) + SGN(A(I + 1)) = 0 THEN (если в QBasic-е есть функция SGN).
Думай прежде, чем что то писать! Что будет если A(I) = -3, а A(I+1) = 2?
Если так сильно боишся переполнения надо писать так:
QBasic/QuickBASIC
1
IF ABS(SGN(A(I))) + ABS(SGN(A(I + 1))) = 0 THEN
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
27.06.2013, 09:20
ой, да... Прокол. Но вообще-то все это - выпендерж. Проще вот так:

Visual Basic
1
      If A(i)=0 And A(i+1)=0 then ...
1
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
27.06.2013, 10:55
Математические функции работают быстрее логических, поэтому по возможности их избегаю
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
27.06.2013, 11:24
Цитата Сообщение от PAnT0P Посмотреть сообщение
Математические функции работают быстрее логических,
- я так считал, что как раз наоборот... Вот результаты тестов (VBA):

Visual Basic
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
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Sub Test_1()
 
Dim X(1 To 100) As Integer
 
    For i% = 1 To 100
        X(i%) = 1
    Next i%
    
    X(45) = 0
    X(46) = 0
    
    Tbeg& = GetTickCount
 
    For iii% = 1 To 30000
        
        For i% = 1 To 99
            If X(i%) = 0 And X(i% + 1) = 0 Then
               Exit For
            End If
        Next i%
        
    Next iii%
 
    Debug.Print GetTickCount - Tbeg&
 
End Sub
 
Sub Test_2()
 
Dim X(1 To 100) As Integer
 
    For i% = 1 To 100
        X(i%) = 1
    Next i%
    
    X(45) = 0
    X(46) = 0
    
    Tbeg& = GetTickCount
 
    For iii% = 1 To 30000
        
        For i% = 1 To 99
            If Abs(X(i%)) + Abs(X(i% + 1)) = 0 Then
               Exit For
            End If
        Next i%
        
    Next iii%
 
    Debug.Print GetTickCount - Tbeg&
 
End Sub
Результат : с логикой 160-170; с abs - 220-230
1
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
27.06.2013, 12:36
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Да, только не забываем что здесь раздел по QBasic, поэтому результат будет несколько иной:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CLS
DIM A(9999)
RANDOMIZE TIMER
PRINT "Заполнение массива из 10000 элементов..."
FOR I = 0 TO 9999
    A(I) = INT(RND * 50) - 25
NEXT I
PRINT "Расчет времени выполнения..."
T = TIMER
FOR I = 0 TO 9998
    IF ABS(SGN(A(I))) + ABS(SGN(A(I + 1))) = 0 THEN
        PRINT I, I + 1
    END IF
NEXT I
PRINT "Вариант с функциями ABS и SGN:"; TIMER - T; "сек"
T = TIMER
FOR I = 0 TO 9998
    IF A(I) = 0 AND A(I + 1) = 0 THEN
        PRINT I, I + 1
    END IF
NEXT I
PRINT "Вариант с функцией AND:"; TIMER - T; "сек"
Миниатюры
Выяснить имеются ли в массиве А два идущих подряд нулевых элемента  
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
27.06.2013, 13:06
Нашел QBasic и протестировал. На 1000 повторений алгоритма (без печати) разница в сотые доли секунды в пользу арифметики (т.е. sgn+abs).
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
27.06.2013, 14:07
QBasic/QuickBASIC
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
CLS
DIM A(9999)
RANDOMIZE TIMER
PRINT "Заполнение массива из 10000 элементов..."
FOR I = 0 TO 9999
    A(I) = INT(RND * 50) - 25
NEXT I
PRINT "Расчет времени выполнения..."
 
T = TIMER
FOR j = 0 TO 100
    FOR I = 0 TO 9998
        IF ABS(SGN(A(I))) + ABS(SGN(A(I + 1))) = 0 THEN
            'PRINT I, I + 1
        END IF
    NEXT I
NEXT j
PRINT "Вариант с функциями ABS и SGN:"; TIMER - T; "сек"
 
T = TIMER
FOR j = 0 TO 100
    FOR I = 0 TO 9998
        'IF A(I) = 0 AND A(I + 1) = 0 THEN
        IF A(I) OR A(I + 1) THEN
        ELSE
            'PRINT I, I + 1
        END IF
    NEXT I
NEXT j
PRINT "Вариант с функцией OR:"; TIMER - T; "сек"
Однако не всё так плохо с логическими операциями в QB

Не по теме:

Не стал скринить свои иероглифы:-[

2
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
27.06.2013, 15:38
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Более скоростной вариант
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CLS
DIM A(9999)
RANDOMIZE TIMER
PRINT "Заполнение массива из 10000 элементов..."
FOR I = 0 TO 9999
    A(I) = INT(RND * 50) - 25
NEXT I
PRINT "Расчет времени выполнения..."
 
T = TIMER
FOR I = 0 TO 9998
    IF A(I) = 0 THEN
        IF A(I + 1) = 0 THEN
            PRINT I, I + 1
        END IF
    END IF
NEXT I
PRINT "Вариант с последовательным сравнением:"; TIMER - T; "сек"
Время выполнения: 6,089844 сек

Добавлено через 12 минут
Допиливаем напильником:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CLS
DIM A(9999) AS INTEGER
DIM I AS INTEGER
RANDOMIZE TIMER
PRINT "Заполнение массива из 10000 элементов..."
FOR I = 0 TO 9999
    A(I) = INT(RND * 50) - 25
NEXT I
PRINT "Расчет времени выполнения..."
 
T = TIMER
FOR I = 0 TO 9998
    IF A(I) = 0 THEN
        IF A(I + 1) = 0 THEN
            PRINT I, I + 1
        END IF
    END IF
NEXT I
PRINT "Вариант с последовательным сравнением:"; TIMER - T; "сек"
Результат: 0,8789063 сек
2
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
27.06.2013, 15:53
@PAnT0P, ты на чём считаешь?
Цитата Сообщение от PAnT0P Посмотреть сообщение
Время выполнения: 6,089844 сек
У меня одни нули получаются
0
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 11
27.06.2013, 18:21  [ТС]
Спасибо большое
0
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
27.06.2013, 22:08
Цитата Сообщение от Апострофф Посмотреть сообщение
@PAnT0P, ты на чём считаешь?

У меня одни нули получаются
На неттопе
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
31.05.2016, 09:26
Программа проверена

QBasic/QuickBASIC
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
DECLARE FUNCTION f% (a%(), n!)
 
CLS
RANDOMIZE TIMER
CONST n = 17
DIM SHARED j
DIM a(1 TO n) AS INTEGER
 
FOR i = 1 TO n
   a(i) = FIX(7 * RND)
   PRINT a(i);
NEXT i
PRINT
 
IF f(a(), n) THEN PRINT "YES" ELSE PRINT "NO"
IF j THEN PRINT "INDEX ="; j - 1; j
END
 
FUNCTION f% (a() AS INTEGER, n)
   IF n = 2 THEN
      IF a(1) = 0 AND a(2) = 0 THEN f = -1
   ELSE
      IF a(n) = 0 AND a(n - 1) = 0 THEN
         f = -1: j = n: EXIT FUNCTION
      ELSE
         f = f(a(), n - 1)
      END IF
   END IF
END FUNCTION
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2016, 09:26
Помогаю со студенческими работами здесь

Выяснить, имеются ли в заданном массиве два идущих подряд положительных элемента
Одномерный массив а1,…, аn. Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента. Подсчитать количество таких пар

Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента
Дан массив действительных чисел а1,…, аn. Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента. Подсчитать...

Выяснить, имеются ли в данном массиве два идущих подряд положительных элемента. Подсчитать число таких пар
Всем доброе время суток! Очень нужна помощь! Дан массив действительных чисел а1,…, аn. Выяснить, имеются ли в данном массиве два...

Определение, имеются ли в числовом списке два подряд идущих нулевых элемента
Определение, имеются ли в числовом списке два подряд идущих нулевых элемента

Массивы, определить, имеются ли в последовательности два идущих подряд нулевых элемента
Даны натуральное число n, массив целых чисел a(n). имеются ли в последовательности два идущих подряд нулевых элемента


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru