Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2009, 14:08   #1
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию Пользовательский тип данных

Помогите пожалуйста с задачей:
Нужно описать структуру с именем Marsh, содержащую следующие поля:
- название начального пункта маршрута:
- название конечного пункта маршрута;
- номер маршрута.
Написать программу выполняющую ввод с клавиатуры данных в массив, состоящий из 8 элементов типа Marsh. Записи должны быть упорядочены по номерам маршрутов. Вывести на экран информацию о маршрута, номер которого введен с клавиатуры. Если таких маршрутов нет, то вывсети соответствующее сообщение.

Вот моя попытка

Код:
Option Explicit
Dim n As Integer
Private Type marsh
    begst As String
    term As String
    numer As Byte
End Type
Private Sub Command1_click()
    If Text1.Text <> "" And Text2.Text <> "" And Combo1.Text <> "" Then
        If n < 8 Then
            n = n + 1
            ReDim Preserve m(1 To n)
            Text1.Text = StrConv(Text1.Text, vbProperCase)
            m(n).begst = Text1.Text
            Text2.Text = StrConv(Text2.Text, vbrpopercase)
            m(n).term = Text2.Text
            m(n).numer = CInt(Combo1.Text)
            Label5.Caption = "Âñåãî ââåäåíî" & CStr(n)
            Combo2.AddItem (CStr(n))
            Combo2.Text = CStr(n)
        Else
            MsgBox "Äîáàâëåíèå íåâîçìîæíî - 8 ìàðøóòîâ ââåäåíî â ñïèñîê"
        End If
    Else
        MsgBox "Íå ââåäåíû êîððåêòíûå äàííûå"
    End If
End Sub
Dim m() As marsh
Private Sub Form_Load()
 For numer = 1 To n
    Combo1.AddItem "numer"
  Next numer
End Sub
Private Sub Command2_click()
    Dim i As Byte
    Label4.Caption = ""
    For i = 1 To n
        Label4.Caption = Label4.Caption & m(i).begst & "" & m(i).term & "" & m(i).numer & vbCrLf
    Next i
End Sub
Private Sub Command3_click()
    Dim i As Byte
    Dim x As Integer
    Label4.Caption = ""
    x = CInt(Text3.Text)
    For numer = 1 To n
        If x <> numer Then
            MsgBox "Íåò òàêîãî ìàðøðóòà"
        Else
            Label4.Caption = Label4.Caption & m(i).begst & "" & m(i).term & "" & m(i).numer & vbCrLf
        End If
    Next i
End Sub
Помогите чем можете...

Последний раз редактировалось cudalover; 05.04.2009 в 15:00.
cudalover вне форума Ответить с цитированием
Старый 05.04.2009, 14:18   #2
DENCREAT
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

а почему в названии темы не написал, что VBA... ну да лан. Ссори не сильно секу в нём)
DENCREAT вне форума Ответить с цитированием
Старый 05.04.2009, 14:43   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

cudalover, скажите, что конкретно у вас не получается.
Сейчас рабочей среды нет, но, может, так что-нибудь подскажу.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.04.2009, 14:58   #4
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Вот в этом месте, я там вверху исправил, а то не то написал:
Код:
Private Sub Form_Load()
 For numer = 1 To n
    Combo1.AddItem "numer"
    Next numer
End Sub
Пишет "Variable not defined"

Есть еще код этой программы на C++:
Код:
#include <iostream.h>
#include <string.h>
using namespace std;
struct Marsh{
char begst [80];
char term [80];
int numer;
};
int main(int argc, char *argv[])
{
Marsh Trafic[8],temp;
int find;
for(int i=0;i<8;i++){

cout << "begst:";
cin>>Trafic[i].begst;
cout << "term:";

cin>>Trafic[i].term;
cout << "numer:";
cin>>Trafic[i].numer;

}

cout << "Numer find:";
cin>>find;

for(int i=0;i<8;i++)
for(int j=1;j<8;j++)

{

if(Trafic[j].numer<Trafic[j-1].numer)
{

strcpy(temp.begst,Trafic[j].begst );
strcpy(temp.term,Trafic[j].term);
temp.numer= Trafic[j].numer;
strcpy(Trafic[j].begst,Trafic[j-1].begst );
strcpy(Trafic[j].term,Trafic[j-1].term);
Trafic[j].numer = Trafic[j-1].numer;
strcpy(Trafic[j-1].begst,temp.begst );
strcpy(Trafic[j-1].term,temp.term);
Trafic[j-1].numer = temp.numer ;
}

}
int f=0;
for(int i=0;i<8;i++)
if(find==Trafic[i].numer){
cout<<"begst:"<<Trafic[i].begst<<"\tterm:"<<Trafic[i].term<<"\tnumer:"<<Trafic[i].numer<<"\n";
f=1;
}
if(f==0)
cout<<"Net takogo marshryta\n";
return EXIT_SUCCESS;
}
Только я в нем разобраться не могу ((((

Последний раз редактировалось cudalover; 05.04.2009 в 15:05.
cudalover вне форума Ответить с цитированием
Старый 05.04.2009, 15:27   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Пишет "Variable not defined"
Ну так и правильно, вроде, пишет. Где объявлена эта переменная?
Цитата:
Есть еще код этой программы на C++:
Так вам на чем все-таки нужно? ) На VB или плюсах?

Повторюсь: рабочего вижл бейсика у меня сейчас нет.
Опишу, что нужно сделать:
- Ввести данные в массив.
Цитата:
Записи должны быть упорядочены по номерам маршрутов
Они изначально отсортированы, или нужно сортировать?
Если нужно, то подойдет любая. Сортируете по полю "номер маршрута", но обмениваете не значения, а сами структуры.

Цитата:
Вывести на экран информацию о маршрута, номер которого введен с клавиатуры. Если таких маршрутов нет, то вывсети соответствующее сообщение.
Вводите номер. Дальше проходите по массиву и сравниваете поле "номер" с тем, что ввели. Если нашли, то выводим данные массива с этим индексом и выходим из цикла.
Если дошли до конца, то номер не найден. Говорим об этом.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 05.04.2009, 15:44   #6
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Ну так и правильно, вроде, пишет. Где объявлена эта переменная?
numer? Вверху объявлен. Надо значит еще раз объявить. Понятно...

Цитата:
Сообщение от Sazary Посмотреть сообщение
Так вам на чем все-таки нужно? ) На VB или плюсах?
На Бэйсике, а я в нете нашел на C++, но не разбираюсь в нем, точнее в пару местах интуитивно понял что, например, цикл, но бОльшая часть кода мне не понятна


Цитата:
Сообщение от Sazary Посмотреть сообщение
Если нужно, то подойдет любаяСортируете по полю "номер маршрута", но обмениваете не значения, а сами структуры.
Что значит любая?


Цитата:
Сообщение от Sazary Посмотреть сообщение
Вводите номер. Дальше проходите по массиву и сравниваете поле "номер" с тем, что ввели. Если нашли, то выводим данные массива с этим индексом и выходим из цикла.
Если дошли до конца, то номер не найден. Говорим об этом.
Это я понял
cudalover вне форума Ответить с цитированием
Старый 05.04.2009, 15:51   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
numer? Вверху объявлен. Надо значит еще раз объявить. Понятно...
Где? В структуре marsh?
Цитата:
На Бэйсике, а я в нете нашел на C++, но не разбираюсь в нем, точнее в пару местах интуитивно понял что, например, цикл, но бОльшая часть кода мне не понятна
Лучше не смотрите на код на C++. Только лишнее время потратите. Тут все довольно просто.
Цитата:
Что значит любая?
Любая сортировка. Я бы использовал сортировку вставками. Простая и в меру эффективная.

Что делают кнопки?
Первая добавляет данные в массив. Это понятно.
С третьей тоже, вроде, ясно. Поиск элемента в массиве. А вторая?

Вопрос: так все-таки надо сортировать массив, или нет?

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

Вроде как, проект уже не нужен. Накидал уже кнопок.
Расшифруйте надписи вроде "Нет такого маршрута".

И вот правильный вариант функции лоад:
Код:
Private Sub Form_Load()
 Dim k As Integer
 
 For k = 1 To 8
    Combo1.AddItem CStr(k)
  Next k
End Sub
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 05.04.2009 в 16:03.
Sazary вне форума Ответить с цитированием
Старый 05.04.2009, 16:14   #8
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Цитата:
Где? В структуре marsh?
Да. Да я вроде понял, надо еще раз объявить в подпрограмме...

Цитата:
Что делают кнопки?
Первая добавляет данные в массив. Это понятно.
С третьей тоже, вроде, ясно. Поиск элемента в массиве. А вторая?
Вроде выводит инормацию обо всех студентах. Неупорядоченную

Цитата:
Вопрос: так все-таки надо сортировать массив, или нет?
Надо.

Вот проект в архиве rar:
Вложения
Тип файла: rar пользовательский тип данных.rar (1.7 Кб, 10 просмотров)
cudalover вне форума Ответить с цитированием
Старый 05.04.2009, 16:18   #9
cudalover
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Код:
Private Sub Form_Load()
 Dim k As Integer
 
 For k = 1 To 8
    Combo1.AddItem CStr(k)
  Next k
End Sub
Спасибо, теперь она хотя бы запускается
cudalover вне форума Ответить с цитированием
Старый 05.04.2009, 16:22   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Собственно, проект уже не нужен )
Все исправил и добавил сортировку.

Непонятные надписи не трогал.

Код:
Option Explicit
Dim n As Integer
Private Type marsh
    begst As String
    term As String
    numer As Byte
End Type
Dim m() As marsh
Private Sub Command1_click()
    If Text1.Text <> "" And Text2.Text <> "" And Combo1.Text <> "" Then
        If n < 8 Then
            n = n + 1
            ReDim Preserve m(1 To n)
            Text1.Text = StrConv(Text1.Text, vbProperCase)
            m(n).begst = Text1.Text
            Text2.Text = StrConv(Text2.Text, vbProperCase)
            m(n).term = Text2.Text
            m(n).numer = CInt(Combo1.Text)
            Label5.Caption = "Anaai aaaaaii" & CStr(n)
            Combo2.AddItem (CStr(n))
            Combo2.Text = CStr(n)
        Else
            MsgBox "Aiaaaeaiea iaaicii?ii - 8 ia?oooia aaaaaii a nienie"
        End If
    Else
        MsgBox "Ia aaaaaiu ei??aeoiua aaiiua"
    End If
End Sub

Private Sub Command4_Click()
Dim i, j As Integer
Dim min As Integer
Dim tmp As marsh

For i = 1 To n - 1
 min = i
 For j = i + 1 To n
  If m(j).numer < m(min).numer Then
   min = j
  End If
 Next j
tmp = m(i)
m(i) = m(min)
m(min) = tmp
 
Next i

End Sub

Private Sub Form_Load()
 Dim k As Integer
 n = n + 1
 For k = 1 To 8
    Combo1.AddItem CStr(k)
  Next k
End Sub

Private Sub Command2_click()
    Dim i As Byte
    Label4.Caption = ""
    For i = 1 To n
        Label4.Caption = Label4.Caption & m(i).begst & " " & m(i).term & " " & m(i).numer & vbCrLf
    Next i
End Sub

Private Sub Command3_click()
    Dim i As Byte
    Dim x As Integer
    Dim b As Byte
    Label4.Caption = ""
    x = CInt(Text3.Text)
    b = 0
    For i = 1 To n
        If m(i).numer = x Then
           Label4.Caption = Label4.Caption & m(i).begst & " " & m(i).term & " " & m(i).numer & vbCrLf
        b = 1
        Exit For
        End If
    Next i
    If b = 0 Then MsgBox "Нет такого номера"
End Sub
Также прикрепляю сам проект.
Вложения
Тип файла: rar Proj.rar (1.9 Кб, 11 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать тип данных? zgest Общие вопросы C/C++ 10 26.03.2009 01:24
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55
Тип базы данных Dux БД в Delphi 7 23.04.2008 17:56
Тип данных в Interbase Canadec БД в Delphi 4 29.08.2007 17:34