Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Таблица (need in help).


Автор: Feanor 16.5.2005, 15:24
Здравствуйте товарищи! У меня к вам вопрос лёгенький, если не сложно, то, пожалуйста, ответте.

В общем надо на языке С++ (Builder C++ v.3.1) создать таблицу записей типа имя, возраст, пол (m или f), телефон. И вывести список всех, у кого телефон начинается с трёх заданных (с экрана) цифр.

P.S. Если решитесь сделать, то, пожалуйста, по проще, а то мне это всё разбирать долго придётся.

Заранее благодарен.

Автор: Feanor 16.5.2005, 21:31
Неужели Я так много попросил smile

Автор: Lamak 16.5.2005, 21:52
Что ты имееш ввиду под словом
Цитата
таблицу
какой- то определённый компонент или чтоб просто была красивая визуализация информации имя, возраст, пол (m или f), телефон
Добавлено @ 21:58
И ещё тебе очень срочно или как?

Автор: Lamak 16.5.2005, 22:12
Да и на Builder C++ v.6 устроит?

Автор: Fixin 16.5.2005, 22:29
Подробности на сцену!
Добавлено @ 22:30
Хотя билдер - проще некуда. Что надо-то, действительно.

Автор: Feanor 17.5.2005, 14:22
Таблица записей типа имя, возраст, пол (m или f), телефон а)вывести список всех, у кого телефон начинается с трёх заданных ( с экрана) цифр,
б)функция добавления одной записи,
в)вывод всех с заданным именем.

Вот, всё, что в условии smile smile
Добавлено @ 14:22
Устроит любой билдер smile

Автор: Feanor 17.5.2005, 16:19
Вот по этим вроде бы шаблонам:

Код:
1)
struck stud{char name[20], group[10];
int mark[3];};

2)
void enter (stud & x){......}
void print (stud x){......}
void enter (stud x[], int & n){.....}
void print (stud x[],int n){......}


3)
void main(){stud my[40]; int;
do{........
case '1':enter(my, n); break;
case '2': print(my, n); break;
case 27: exit(0);} getch();} while(1);}



case '3': cout<<"Буква:"; cin>>c;
bukva(c, my, n, his, k); print(his, k); break:

И вот это:

void bukva(char b, stud x[]
int n, stud y[], int & k)
{int i; k=0;
for(i=0; i<n; i++)
if(x[i].name[0]==b)
{y[m]=x[i]; m++;}
}

Я в этом плохо разбираюсь, может вам поможет smile smile smile

Автор: Lamak 17.5.2005, 16:45
Тебе нужно чтобы это было windows приложение с формой или консольное приложение?
Добавлено @ 16:47
Да и обятельно ли применение твоих шаблонов?

Автор: Yanis 17.5.2005, 16:49
Цитата(Lamak @ 17.5.2005, 16:45)
Тебе нужно чтобы это было windows приложение с формой или консольное приложение?

Тоже никак не пойму.

Автор: Lamak 17.5.2005, 16:52
И ещё
Цитата
void bukva(char b, stud x[]
int n, stud y[], int & k)
{int i; k=0;
for(i=0; i<n; i++)
if(x[i].name[0]==b)
{y[m]=x[i]; m++;}
}

это определение всех записей у кторых имя начинается
с определённой буквы( с буквы b),
а в задании
Цитата
в)вывод всех с заданным именем.

Добавлено @ 16:58
Цитата
В общем надо на языке С++ (Builder C++ v.3.1)

Может ты имел в виду Borland C++ v.3.1,тогда понятно :консольное приложение .


Автор: Lamak 17.5.2005, 17:21
http://forum.vingrad.ru/index.php?showtopic=51282
Это тоже ты Feanor или я чегото не понимаю?

Автор: Feanor 17.5.2005, 17:53
консольное smile
Добавлено @ 17:54
Конечно же BORLAND Я опечатался!!!Блин, извиняюсь smile

Автор: Feanor 17.5.2005, 22:11
Цитата(Lamak @ 17.5.2005, 17:21)
http://forum.vingrad.ru/index.php?showtopic=51282
Это тоже ты Feanor или я чегото не понимаю?


Нет, это не Я.
Добавлено @ 22:12
HELP!!!

Автор: Fixin 17.5.2005, 22:50
Цитата
HELP!!!
Не ори. Нас тут мало помогателей. Завтра попробую.

Автор: Lamak 18.5.2005, 08:44
Вот :
Код

#include <iostream.h>
#include <conio.h>
struct stud
{
    char Name[20],Tel[10];
    int Age;
    int Sex;
};
//------------------//
void input(stud &record)
{
    cout << "input Name: ";cin >> record.Name;
    cout << "input Age: ";cin >> record.Age;
    cout << "input Sex: ";
    char sex;
    cin >> sex;
    record.Sex = (sex == 'm' || sex == 'M')? 1: 0;
    cout << "input Tel: "; cin >> record.Tel;
}
//------------------//
void output(stud &record)
{
    cout << record.Name << '\t';
    cout << record.Age << '\t';
    cout << (record.Sex ? 'M': 'F') << '\t';
    cout << record.Tel <<endl;
}
//------------------//
void output_all(stud records[], int count)
{
    for (int i=0; i< count; ++i)
        output(records[i]);
}
//------------------//
void the_tel(stud records[], int count)
{
    char new_tel[3];
    cout<<"new_tel=";
    cin>>new_tel;
    int flag=0;
    for (int i=0; i<count; ++i)
    {
        flag=1;
        for (int j=0; j<3; ++j)
            if(new_tel[j]!=records[i].Tel[j])
            {
                flag=0;
                break;
            }
        if(flag)
            output(records[i]);
    }
}
//------------------//
void the_name(stud records[], int count)
{
    char new_bukva;
    cout<<"new_bukva=";
    cin>>new_bukva;
    int flag=0;
    for (int i=0; i<count; ++i)
    {
        flag=1;
        if(new_bukva!=records[i].Name[1])
            flag=0;
        if(flag)
            output(records[i]);
    }
}
//------------------//
char menu()
{
    char b;
    cout<<"1 - new record"<<endl;
    cout<<"2 - show all record"<<endl;
    cout<<"3 - the_telefon"<<endl;
    cout<<"4 - the_name"<<endl;
    cout<<"5 - Exit"<<endl;
    cout<<"input: ";
    cin>>b;
    return b;
}
//------------------//
int main()
{
    stud table[20];
    int cur = 0;
    char key=0;
    clrscr();
    for(;;)
    {
        key=menu();
        clrscr();
        switch (key)
        {
        case '1':
            if (cur < 20)
            {
                input(table[cur]);
                cur++;
            }
            else
                cout << "error: input max record" << endl;
            break;
        case '2':
            output_all(table, cur);
            break;
        case '3':
            the_tel(table, cur);
            break;
        case '4':
            the_name(table, cur);
            break;
        case '5':
            return 0;
        }
    }
}


Добавлено @ 08:47
Если что-то непонятно - обращайся раскажу.

Добавлено @ 08:51
Цитата
И ещё

Цитата
void bukva(char b, stud x[]
int n, stud y[], int & k)
{int i; k=0;
for(i=0; i<n; i++)
if(x[i].name[0]==b)
{y[m]=x[i]; m++;}
}


это определение всех записей у кторых имя начинается
с определённой буквы( с буквы b),
а в задании
Цитата

в)вывод всех с заданным именем.

Это был вопрос smile
Я реализовал(функция the_name) как в шаблоне т.е.
Цитата
определение всех записей у кторых имя начинается
с определённой буквы


Автор: Feanor 18.5.2005, 18:48
Спасибо огромное!!! Никогда не забуду!!! smile smile smile

Автор: Feanor 20.5.2005, 21:52
У меня куча вопросов smile smile smile Вот, я их жирным выделил.
А можно разделить прогу по частям, ну то есть первое задание отдельно и 2 с 3 тоже? Если не трудно, то спасите plz smile smile smile

void input(stud &record)
{
cout << "input Name: ";cin >> record.Name;
cout << "input Age: ";cin >> record.Age;
cout << "input Sex: ";
char sex;
cin >> sex;
record.Sex = (sex == 'm' || sex == 'M')? 1: 0;
cout << "input Tel: "; cin >> record.Tel;
}
//------------------//
void output(stud &record)
{
cout << record.Name << '\t';
cout << record.Age << '\t';
cout << (record.Sex ? 'M': 'F') << '\t'; (а сдесь должно вроде или стоять, но это двечерты или я ошибаюсь, в общем лучше всё поясни)
cout << record.Tel <<endl;
}
//------------------//
void output_all(stud records[], int count)
{
for (int i=0; i< count; ++i)
output(records[i]);
}
//------------------//
void the_tel(stud records[], int count)
{
char new_tel[3]; (почему 3)
cout<<"new_tel=";
cin>>new_tel;
int flag=0;
for (int i=0; i<count; ++i) (а i++ не тоже самое, что и ++i)
{
flag=1;
for (int j=0; j<3; ++j)
if(new_tel[j]!=records[i].Tel[j])
{
flag=0;
break;
}
if(flag)
output(records[i]);
}
}
//------------------//
void the_name(stud records[], int count)
{
char new_bukva;
cout<<"new_bukva=";
cin>>new_bukva;
int flag=0;
for (int i=0; i<count; ++i)
{
flag=1;
if(new_bukva!=records[i].Name[1])
flag=0;
if(flag)
output(records[i]);

}
}
//------------------//
char menu()
{
char b;
cout<<"1 - new record"<<endl;
cout<<"2 - show all record"<<endl;
cout<<"3 - the_telefon"<<endl;
cout<<"4 - the_name"<<endl;
cout<<"5 - Exit"<<endl;
cout<<"input: ";
cin>>b;
return b;
}
//------------------//
int main()
{
stud table[20];
int cur = 0;
char key=0;
clrscr();
for(;;)

{
key=menu();
clrscr();
switch (key)
{
case '1':
if (cur < 20)
{
input(table[cur]);

cur++;
}
else
cout << "error: input max record" << endl;
break;
[b]case '2':
output_all(table, cur);
break;

case '3':
the_tel(table, cur);
break;
case '4':
the_name(table, cur);
break;
case '5':[/b]
return 0;
}
}
}


Добавлено @ 21:57
P.S. Я понимаю, что достал, а так же понимаю, чо тупые вопросы, но обстоятельства меня зверско подгоняют.Lamak в твоих руках судьба людская smile

Автор: Lamak 21.5.2005, 09:23
Во-первых достань книгу по С++(библиотека,купить,одолжить у друга,украсть у врага smile)
и прочитай её ,тогда не будет возникать таких нудных вопросов?
Отвечаю по частям:
void input(stud &record)//передаётся параметр по ссылке
{
cout << "input Name: ";cin >> record.Name;//т.к. по ссылке
cout << "input Age: ";cin >> record.Age;
cout << "input Sex: ";
char sex;
cin >> sex;
record.Sex = (sex == 'm' || sex == 'M')? 1: 0;//
//оператор a?b:c работает так
//если а - истина возвращет b
//если а - ложь возвращет c
// || - логическое или
cout << "input Tel: "; cin >> record.Tel;
}

Автор: Lamak 21.5.2005, 09:35
Цитата
record.Sex = (sex == 'm' || sex == 'M')? 1: 0;

здесь ||(или) для одинаковой реакции на маленькую и большую букву 'м'
Цитата
cout << (record.Sex ? 'M': 'F') << '\t'; (а сдесь должно вроде или стоять, но это двечерты или я ошибаюсь, в общем лучше всё поясни)

не должно. Определяется мужик он или баба , в зависимости от того record.Sex = 1 или =0 соответственно.



Добавлено @ 09:38
void output_all(stud records[], int count)
{
for (int i=0; i< count; ++i)//цикл по всем записям
output(records[i]);
//каждая запись на печать
}
Добавлено @ 09:44
Цитата
char new_tel[3]; (почему 3)

Ты ж сам писал:
Цитата

Таблица записей типа имя, возраст, пол (m или f), телефон а)вывести список всех, у кого телефон начинается с трёх заданных ( с экрана) цифр,
б)функция добавления одной записи,
в)вывод всех с заданным именем.

Автор: Lamak 21.5.2005, 09:54
int flag=0;
for (int i=0; i<count; ++i) (а i++ не тоже самое, что и ++i)//Вообще нет это постфиксная и
префиксная формы,но в цыкле это по барабану
{
flag=1;
for (int j=0; j<3; ++j)
if(new_tel[j]!=records[i].Tel[j])
{
flag=0;
break;
}
if(flag)//флаг указывает на то начинается ли номер телефона i-ой записи
Цитата
с трёх заданных ( с экрана) цифр


output(records[i]);
}

Добавлено @ 09:59
Цитата
int flag=0;
for (int i=0; i<count; ++i)
{
flag=1;
if(new_bukva!=records[i].Name[1])
flag=0;
if(flag)
output(records[i]);

}

- копи /пастил smile ,а вообще здесь flag не нужен:
Код

for (int i=0; i<count; ++i)
{
      if(new_bukva==records[i].Name[1])
             output(records[i]);


Добавлено @ 10:02
Цитата
cout<<"input: ";
cin>>b;
return b;

возми словарь англо-руский и посмотри что такое input


Добавлено @ 10:04
Всё устал smile вечером ещё помогу

Автор: Feanor 21.5.2005, 14:29
Вот, я никак не пойму, где сдесь функция добавления одной записи, если не трудно напиши plz, и вот, у нас со step один препод, так что шаблон тот же, может можно как то по похожему сделать, ну даже если не все
пункты задания, а хоть один smile Понимаю, что задолбал конкретно, но о, что ты написал, я понять могу, но это немного не наш уровень smile smile smile
P.S. чтобы ты не написал в ответе, Я всё равно очень очень благодарен за помощь.

Добавлено @ 14:31
Lamak
-step- это тот чувак, которому ты тоже таблицу сделал

Автор: Lamak 21.5.2005, 20:36
Цитата
Вот, я никак не пойму, где сдесь функция добавления одной записи, если не трудно напиши plz

Функции как таковой нет но это делает следующий код
Код

case '1':
if (cur < 20)
{
      input(table[cur]);//эта функция отвечает за ввод информации с консоли
      cur++;//счётчик количества записей
}
else
      cout << "error: input max record" << endl;


Добавлено @ 20:44
Цитата

-step- это тот чувак, которому ты тоже таблицу сделал

Я ему только одну функцию написал. smile

Автор: Lamak 21.5.2005, 20:57
Цитата
может можно как то по похожему сделать

так у тебя и так почти как у -step- , даже лучше с моей точки зрения smile (тобишь ИМХО smile)
А-а-а-а!
Mожет ты имееш ввиду чтобы table была глобально описана?

Автор: Lamak 21.5.2005, 21:09
Да и где вы учитесь если не секрет?
Потому что у меня в универе :если у кого-то есть код и он не понимает как он работает то
он идёт к расписанию ;смотрит где сейчас находятсья прикладники(факультет прикладной математики) 3-й,4-й курс;
идёт к ним и говорит :
- "Люди
Цитата
need in help
!!!Срочно!!!Сейчас сдавать!!!";
ему помогают и он довольный smile уходит;И не мучают ни кого на форумах smile

Автор: Feanor 21.5.2005, 21:33
Цитата(Lamak @ 21.5.2005, 21:09)
Да и где вы учитесь если не секрет?
Потому что у меня в универе :если у кого-то есть код и он не понимает как он работает то
он идёт к расписанию ;смотрит где сейчас находятсья прикладники(факультет прикладной математики) 3-й,4-й курс;
идёт к ним и говорит :
- "Люди
Цитата
need in help
!!!Срочно!!!Сейчас сдавать!!!";
ему помогают и он довольный smile уходит;И не мучают ни кого на форумах smile

Мне стыдно сказать smile smile smile
Будете потом говорить, что там одни тормоза, а это далеко не так.


Добавлено @ 21:42
А что такое flag и cout?

if(new_tel[j]!=records[i].Tel[j]) (почему стоит !-это же оператор "не")

И вот, ты ещё писал:
- копи /пастил ,а вообще здесь flag не нужен:

Во всё остальное въехал!!!Урра!Славься Lamak smile


Автор: Feanor 21.5.2005, 21:45
Цитата(Feanor @ 21.5.2005, 21:33)
Цитата(Lamak @ 21.5.2005, 21:09)
Да и где вы учитесь если не секрет?
Потому что у меня в универе :если у кого-то есть код и он не понимает как он работает то
он идёт к расписанию ;смотрит где сейчас находятсья  прикладники(факультет прикладной математики) 3-й,4-й курс;
идёт к ним и говорит :
- "Люди
Цитата
need in help
!!!Срочно!!!Сейчас сдавать!!!";
ему помогают и он довольный smile уходит;И не мучают ни кого на форумах smile

Мне стыдно сказать smile smile smile
Будете потом говорить, что там одни тормоза, а это далеко не так.


Добавлено @ 21:42
А что такое flag и cout?

if(new_tel[j]!=records[i].Tel[j]) (почему стоит !-это же оператор "не")

И вот, ты ещё писал:
- копи /пастил ,а вообще здесь flag не нужен:

Во всё остальное въехал!!!Урра!Славься Lamak smile

Цитата
А что такое flag и cout?

Не cout, а count, я жестоко описался!!!
Добавлено @ 21:47
smile Да, и если не трудно, то разгранич пожалуйста те места, где начинается одно, и кончается другое задание, где это возможно. smile smile

Автор: Feanor 21.5.2005, 22:03
Ой, вот ещё вопрос, последний (надеюсь):

Что означает:
1)cur и cur++(это счётчик вроде)
2)key
3)record. это конечно, глупо, как и всё, что я до этого спаршивал, но вроде это перев. как запись, но хотелось бы точно убедиться, что это в данной проге. smile smile smile И точку тоже плиз объясни.
Ну если на всё ответишь, то всё уже разжёвано, и мне ничего не остаётся, как продемонстрировать прогу в эту среду, о результате обязательносообщу!!! smile
Ещё раз спасибо.

Автор: Lamak 21.5.2005, 22:26
Цитата
if(new_tel[j]!=records[i].Tel[j]) (почему стоит !-это же оператор "не")



Код

for (int i=0; i<count; ++i) 
{
     flag=1;// флаг = истина(флаг указывает на то начинается ли номер телефона i-ой записи )   
     for (int j=0; j<3; ++j)
     if(new_tel[j]!=records[i].Tel[j])// если new_tel[j] не равно records[i].Tel[j]
     {
           flag=0; //// флаг = ложь
           break;
     }
     if(flag)// если ложь не печатаем
           output(records[i]);
}
 

Добавлено @ 22:30
Цитата
- копи /пастил

Имеется ввиду пользовался функциями copy/paste(копировать /вставить)

Автор: Lamak 21.5.2005, 22:38
Цитата
Что означает:
1)cur и cur++(это счётчик вроде)
2)key
3)record.

1)cur - счётчик количества записей
сначла он = 0(int cur = 0;)
потом добавляешь новую запись и cur++ - увеличивается на единицу
2)
Цитата
key=menu();

функция menu() возвращает какая клавиша была введена
( cout<<"input: ";
cin>>b;
return b;)



Автор: Feanor 22.5.2005, 12:49
Во!!! Оьалдеть, я все пояснения вместе собрал, на два листа вышло!!!
Вот это ты поработал!!! Истинно человеище!!!
Вот только что такое count не написал.Напиши пож.
Да, и вот ты писал:

Код

stud table [20];
int cur = 0;
char key = 0;
clrscr();
[b]for (;;)[/b]

Меня обязательно спросят, почему там пусто, т.е. for(;;) ???

Итак:
1) count
2) key=menu
switch (key)
3)for (;;)

Это последние непонятки smile smile smile

Автор: Lamak 22.5.2005, 20:34
Код

for (;;)// бесконечный цыкл

Добавлено @ 20:41

Код

void output_all(stud records[], int [b]count[/b])
{
for (int i=0; i< [b]count[/b]; ++i)
output(records[i]);
}

count - Переменная в которую мы передаём количество элементов в нашей таблице(т.е.cur)

Автор: Lamak 22.5.2005, 20:46
key=menu(); //функция menu() возвращает какая клавиша была введена
switch (key);// В зависимости от key(1,2,3,4 или5) выполняем то что надо
Добавлено @ 20:48
Цитата
//функция menu() возвращает какая клавиша была введена

не клавиша ,а цифра;

Автор: Feanor 23.5.2005, 12:12
smile smile Всё вроде, спасибо огромное, пойду обмозговывать и сдавать!!! smile smile
Я не прощаюсь, а говорю до новых встреч smile

Автор: Feanor 24.5.2005, 09:33
А для чего в проге нужен этот замкнутый цикл???
Цитата
for (;;)

Автор: Feanor 24.5.2005, 20:42
Код

void the_tel(stud records[], int count)
{
    char new_tel[3];
    cout<<"new_tel=";
    cin>>new_tel;
    int flag=0;
    for (int i=0; i<count; ++i)
    {
        flag=1;
        for (int j=0; j<3; ++j)
            if(new_tel[j]!=records[i].Tel[j])
            {
                flag=0;
                break;
            }
        if(flag)
            output(records[i]);
    }


А может сдесь тоже flag не нужен, ну как в букве, тож самое, только с телефон вроде можно проделать?


Автор: Lamak 24.5.2005, 21:36
Цитата
А для чего в проге нужен этот замкнутый цикл???

Цитата

for (;;)

Для обеспечения диалогового интерфейса с пользователем.

Добавлено @ 21:39
Цитата
А может сдесь тоже flag не нужен, ну как в букве, тож самое, только с телефон вроде можно проделать?

нельзя т.к. здесь происходит три сравнения в цыкле(три первые цифры номера) и если хоть одна цифра не совпадает то мы данную запись не печатаем(flag=0;)

Автор: Feanor 24.5.2005, 21:47
Ещё раз ОГРОМНОЕ спасибо smile smile smile

Автор: Feanor 30.5.2005, 11:03
Нюанс:
А table это просто количесто студентов, т.е. то, куда они вводятся?

Автор: Feanor 30.5.2005, 14:49
Вот, начал работать, и вот, что вышло (см. ниже):

Автор: Feanor 30.5.2005, 15:05
1)
void output(stud &record)
{ сдесь он пишет следующее Declaration syntax error
дальше там вот что (для справки):

Код

cout << record.Name << '\t';
cout << record.Age << '\t';



2)
Код

cout << record.Name [b]<< [/b]'\t'; 

почему стоит <<, по моему в cout << >>
и почему перенос сторки, тобиш '\t' огорожен опострофами?

3)
Код

cout << "input Name: ";cin >> record.Name;  

Borland мне пишет, что Undefined sumbol `cin`


Автор: Feanor 31.5.2005, 10:33
СОС чувак, у меня один день остался, напиши чё нить plz smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)