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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual Basic]одномерный и двумерный массив 
:(
    Опции темы
Пума
  Дата 18.5.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товарищи smile ! Кто что нибудь понимает в массивах, откликнитесь! С виду вроде бы фигня, но я со школы с программированием не дружу smile 
1. В массиве максимальный элемент переставить на 1-е место.
2. Из матрицы удалить столбцы, первые положительные эл-ты которых расположены выше главной  диагонали.
Пока пытаюсь сама, но вряд ли из этого что нить хорошее получится
PM MAIL   Вверх
Fortop
Дата 18.5.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

OPTION BASE 1
DIM A(100) AS DOUBLE
DIM I AS INTEGER

rem заполняем массив
FOR I=1 TO 100
    A(I) = RND()
NEXT

rem если какой-то элемент больше 1го, меняем их местами
FOR I=1 TO 100
IF A(1) < A(I) THEN 
    SWAP(A(1), A(I))
END IF
NEXT


Добавлено через 54 секунды
Второй вопрос чуть сложнее smile а мне сегодня лень думать smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Rodman
Дата 18.5.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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




M
Rodman
Модератор: Пожалуйста, один топик - один вопрос.

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Пума
Дата 18.5.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Fortop, у меня строчку SWAP(A(1), A(I)) выводит красным цветом. Вот мои коды по первой зад.:
Option Base 1
Private a() As Single, Dim str As Integer

Private Sub task3()
    Frame2.Visible = True
    Pic2.Visible = True
    Pic2.Cls
    
   str = Val(txtstr.Text)
    k = 1
    For i = 1 To str
    If a(i) >= a(k) Then k = i
    Next i
    a(1) = a(k)
   
    Pic2.Print a(i)
End Sub

a(k)- это максимал. эл-т. А переставить его на 1-е место не получается, не знаю как

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


Эксперт
****


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

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



ну не помню я синтаксис swap() и работает ли она с элементами массива (вроде как должна) smile  

попробуй в своем коде так

вместо a(1) = a(k)

Код

Dim temp as Single

temp = a(1)
a(1) = a(k)
a(k) = temp


Если в моем коде, то
вместо SWAP(A(1), A(I))
Код

temp = a(1)
a(1) = a(I)
a(I) = temp


Это сообщение отредактировал(а) Fortop - 20.5.2008, 00:12


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Пума
Дата 20.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Исправила свой код на 
Dim temp as Single
temp = a(1)
a(1) = a(k)
a(k) = temp

Но все равно считает неправильно. Например:
-6 3 8 -10
должно быть 8 -6 3 -10
а считает так: -6 -6 3 -10
PM MAIL   Вверх
Fortop
Дата 22.5.2008, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Пума, 
быть такого не может.
Приведи полный код. Где-то ты опечаталась или еще какая-то ошибка.

Код

temp = a(1)
a(1) = a(k)
a(k) = temp

Этот код должен стоять после! Next i
И из этой последовательности 
-6 3 8 -10
Должна получиться вот такая.
8 3 -6 -10



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Пума
Дата 22.5.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так задание-то :не поменять максимальный элемент с первым, а ПЕРЕСТАВИТЬ на первое место. 
-6 3 8 -10 -> 8 -6 3 -10

Переставить макс. эл-т у меня получается, а  остальные эл-ты сдвигаются неправильно.
Код

Private Sub task3()
    Frame2.Visible = True
    Pic2.Visible = True
    Pic2.Cls
   str = Val(txtstr.Text)
    k = 1
    For i = 1 To str
    If a(i) > a(k) Then k = i
     Next i
     If k = 1 Then MsgBox "Óæå ñòîèò íà ïåðâîì ìåñòå", vbOKOnly + 48
     For i = 1 To k
    a(1) = a(k)
    Next i
      For i = 1 To k
      a(i + 1) = a(i)
    Next i
  For i = k To 1 Step -1
    a(i + 1) = a(i)
    Next i
     For i = 1 To str
  Pic2.Print a(i)
  Next i
    
End Sub




PM MAIL   Вверх
Пума
Дата 22.5.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я сделала! вот коды к 1-й задаче:
Код

Private Sub task3()
    Frame2.Visible = True
    Pic2.Visible = True
    Pic2.Cls
   str = Val(txtstr.Text)
    k = 1
     For i = 1 To str
    If a(i) > a(k) Then k = i
    Next i
    If k = 1 Then MsgBox "он уже стоит на первом месте."
    f = a(k)
    For i = k To 2 Step -1
    a(i) = a(i - 1)
    Next i
    a(1) = f
    
     For i = 1 To str
  Pic2.Print a(i)
  Next i
    
End Sub


А как на счет 2-й задачи?
PM MAIL   Вверх
Fortop
Дата 22.5.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Просмотр элементов столбцов до диагонали

Код

Option Base 1
Dim A(10, 10) As Integer
Dim I As Integer, K As Integer

rem Номер столбца
For I=1 To 10
    rem признак наличия в столбце позитивных элементов выше диагонали
    HavePositive = 0;
    rem номер строки в столбце, если нужно не захватывать саму диагональ то цикл будет до I - 1
    For K=1 To I
        If A(K, I) > 0 Then 
            HavePositive = 1
            rem тут твой код по удалению I-го столбца
            Exit For K
        End If
    Next K
Next I



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Пума
Дата 23.5.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А мои коды сможешь исправить?
Код

Private Sub task4()
    Frame2.Visible = True
   Pic2.Visible = True
   Pic2.Cls
   ReDim a(str, st)
   str = Val(txtstr.Text)
   st = Val(txtst.Text)
    If str = st Then
    For i = str To 1
    For j = 1 To i - 1
    If a(i, j) > 0 Then r = r + 1
    For k = j To st - r
    For t = 1 To str
    a(t, k) = a(t, k + 1)
    Next t
    Next k
    Next j
    Next i
    End If
    For j = 1 To st
    For i = 1 To str
    Pic2.Print a(i, j)
    Next i
    Next j
End Sub

str-кол-во строк
st-кол-во столбцов
i, k-текущий индекс строки
j, t- текущий индекс столбца
r-кол-во удаленных столбцов
PM MAIL   Вверх
Fortop
Дата 23.5.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Пума @  23.5.2008,  20:58 Найти цитируемый пост)
А мои коды сможешь исправить?

Хм, а что они делают? smile

Добавлено @ 21:12
Алгоритм по удалению столбцов я бы сделал таким образом.

В тех циклах что я написал мы всего лишь записываем номера столбцов подлежащих удалению (в массив)

Код

Option Base 1
Dim A(10, 10) As Integer
Dim ColumnsState(10) As Boolean
Dim I As Integer, K As Integer, ToDelete As Integer
Dim newColumn As Integer

rem Номер столбца
For I=1 To 10
    rem признак наличия в столбце позитивных элементов выше диагонали
    rem удалять ли столбец. Изначально считаем что не удалять
    ColumnsState(I) = true
    rem номер строки в столбце, если нужно не захватывать саму диагональ то цикл будет до I - 1
    For K=1 To I
        If A(K, I) > 0 Then 
            rem помечаем столбец для удаления
            ColumnsState(I) = false
            rem количество столбцов к удалению
            ToDelete = ToDelete + 1
            Exit For K
        End If
    Next K
Next I

If ToDelete = 10 Then 
    rem удаляем весь массив
    END
Else   
    rem новый массив с удаленными столбцами.
    Dim B(10, 10 - ToDelete) As Integer
    rem Номер столбца
    For I=1 To 10
        rem Если True то столбец копируем в новый массив
        If ColumnsState(I) Then
            newColumn = newColumn + 1
            For K=1 To 10
                B(K, newColumn) = A(K,I)
            Next K
        End If
    Next I
End If

rem присваиваем результат
A = B


Это сообщение отредактировал(а) Fortop - 24.5.2008, 00:09


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Пума
Дата 24.5.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Хм, а что они делают? 

Мои коды-это как раз коды ко второй задаче, только они не работают smile . А в твоем коде я к сожалению не очень разбираюсь. Попробую с твоим кодом, но ты все-таки на мой глянь, может ошибки какие-нибудь  найдешь smile

Добавлено через 29 секунд
мне в пн надо работу сдать
PM MAIL   Вверх
Fortop
Дата 24.5.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Пума @  24.5.2008,  18:14 Найти цитируемый пост)
Мои коды-это как раз коды ко второй задаче

Вопрос был конкретен smile
Что они делают smile по пунктам....

Опиши алгоритм, который там реализован.

Добавлено через 47 секунд
Цитата(Пума @  24.5.2008,  18:14 Найти цитируемый пост)
А в твоем коде я к сожалению не очень разбираюсь

Я комментарии для себя писал? или как?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Пума
Дата 25.5.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Что они делают  по пунктам....

Я в двумерных массивах ваще ничего не понимаю smile , так что примерно так:
1) смотрят квадратная матрица или нет 
If str = st Then
2) если квадратная, то просматриваем последовательно все столбцы 
3)если их положит. эл-ты расположены выше главной диагонали, то удаляем эти столбцы
4)выводим на печать обработанную матрицу

Цитата

Я комментарии для себя писал? или как? 

ColumnsState, ToDelete мы такого не проходили. Хотя для меня програм-е так далеко что даже комментарии не помогут smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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