Важная информация
Показано с 1 по 6 из 6

Тема: Лабораторная на массивы!!! Помогите пожалуйста!

  1. #1 Лабораторная на массивы!!! Помогите пожалуйста! 
    Новичок
    Регистрация
    06.10.2012
    Сообщений
    3
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Дан одномерный массив не более 30 чисел. Найти максимальное по модулю для отрицательных, и математическое ожидание для положительных элементов массива.
    n
    M=Σ xi /n - математическое ожидание.
    i=1

    язык qBasic
    уже 3 дня над ней издеваюсь, не понимаю что делать, никак !
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Ну прежде всего надо было лекции слушать, и не говорите, что лектор у Вас плохой, или что эту тему не давали! В инете полно книг и примеров, в том числе и на этом форуме.
    Приведите пожалуйста, что Вы сделали за 3 дня. Если нечего приводить ответьте хотя бы, что такое массив?
    Ответить с цитированием  
     

  3. #3  
    Новичок
    Регистрация
    06.10.2012
    Сообщений
    3
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    думаете я не слушаю ничего?
    если пытаюсь сделать! остальные темы все понимала, но массивы отнюдь, совсем не даются..
    cls
    do
    input "n=";n
    loop until n>1
    n=30
    k=0
    s=0
    max=-1e+20
    for i=1 to n step 1
    dim a(n)
    for i=1 to n
    input a(i)
    next i
    for i=1 to n
    if max<a(i) then
    max=a(i)
    imax=i
    end if
    next i
    for i=1 to n
    if a(i)>0 then
    s=s+(x*i)/n
    M=S
    k=k+1
    endif
    next i
    sred=s/k
    print a(i),m,x
    end
    Ответить с цитированием  
     

  4. #4  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Ну чтож, неплохо, разберем что Вы тут написали.
    Код :
    cls
    do
    input "n=";n
    loop until n>1
    n=30
    В цикле Do-loop осуществляется ввод n (любого) и проверка что n>1, но в последней строке n=30??? это действие отменяет предыдущее, следовательно какая то из этих двух частей не нужна.
    Код :
    FOR i = 1 TO n STEP 1
    совершенно лишний цикл, Вы же хотите 1 раз просчитать данные?
    Код :
    DIM a(n)
    DIM a(1,n)
    Определение массива вами сделано правильно (первая строка), однако следует заметить, что по умолчанию первый элемент массива имеет номер 0 (Вы его просто не используете), во второй строке показано как создать массив начинающийся с номера 1.
    Код :
    FOR i = 1 TO n
        INPUT a(i)
    NEXT i
    Цикл ввода данных, вводятся данные в каждый элемент массива, последовательно!
    Код :
    FOR i = 1 TO n
        IF max < a(i) THEN
            max = a(i)
            imax = i
        END IF
    NEXT i
    Цикл поиска максимального значения, проверяются все значения "a", переменной max присваивается наибольшее значение из всего массива "a". За одно переменной imax присваивается номер максимального значения массива...
    Код :
    FOR i = 1 TO n
        IF a(i) > 0 THEN
            M = M + (a( i)) / n
            k = k + 1
        END IF
    NEXT i
    В этом цикле определяется сумма, заданная в условии, заодно считается количество элементов которые больше 0 и присваивается переменной k.
    Код :
    sred = s / k
    здесь зачем то определяется среднее???
    Код :
    PRINT a(i), M, x
    массив просто так распечатать не получится, и откуда тут "x"??? это что?????
    Код :
    FOR i = 1 TO n
        PRINT a(i),
    NEXT
    PRINT M
    Вот пожалуй так!
    Теперь программа целиком:
    Код :
    CLS
    DO
        INPUT "n="; n
    LOOP UNTIL n > 1
    k = 0
    s = 0
    max = -1E+20
     
    DIM a(n)
    FOR i = 1 TO n
        INPUT "Vvod="; a(i)
    NEXT i
    FOR i = 1 TO n
        IF max < a(i) THEN
            max = a(i)
            imax = i
        END IF
    NEXT i
    FOR i = 1 TO n
        IF a(i) > 0 THEN
            M = M + a(i) / n
            k = k + 1
        END IF
    NEXT i
    FOR i = 1 TO n
        PRINT a(i),
    NEXT
    PRINT M, max
    Обратите внимание на отступы текста программы, они показывают отдельные блоки программы.
    Я просмотрел как работает программа на qb64, все нормально, если что непонятно пишите...
    Последний раз редактировалось Dimon012; 07.10.2012 в 09:27.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    anastasiasia (07.10.2012)

  6. #5  
    Новичок
    Регистрация
    06.10.2012
    Сообщений
    3
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    а по модулю он ищет максимальное? Спасибо!!!!!
    Ответить с цитированием  
     

  7. #6  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от anastasiasia Посмотреть сообщение
    а по модулю он ищет максимальное? Спасибо!!!!!
    Нет конечно, оно ищет просто максимальное, чтобы искало по модулю надо:
    Код :
    IF max < abs(a(i)) THEN
        max = abs(a(i))
        imax = i
    END IF
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 14.11.2012, 22:34
  2. Ответов: 0
    Последнее сообщение: 01.07.2012, 22:03
  3. помогите пожалуйста
    от finer в разделе Turbo Pascal
    Ответов: 3
    Последнее сообщение: 14.06.2012, 16:10
  4. Ответов: 0
    Последнее сообщение: 07.12.2011, 23:12
  5. Ответов: 7
    Последнее сообщение: 25.11.2011, 01:40
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •