Программирую на с++ под DOS.Всё, конечно, интересно, но уже месяц не могу разобраться с одной задачкой. Дан класс "телефонный справочник" с полями : имя и номер, над которыми надо реализовать несколько методов. У меня получается создать массив объектов и вывести на экран. Но совершенно не понимаю. как реализовать методы: 1-добавить новое имя с номером 2-удалить имя и номер из справочника 3-поиск номера по введённому имени 4-сортировка имён в алфавитном порядкею При решении 3) и 4) использовала функцию спавнения строк strcmp. МоЯ главная проблема в том, что я не знаю, как объявлять методы, их тип, их параметры, а также , как вызывать их. Могли бы вы привести в качестве примера какие-то фрагменты кода, пожайлуста?
А вот и код с приличным количеством ошибок: #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> #define k 3 int i; class telephonebook {char name[10]; int nomer; public: void set_name(char st[10]) {strcpy(name,st);} void set_nomer(int p) {nomer=p;} char *get_name() {return name;} int get_nomer() {return nomer;} void sort_name(char nname[80]); void search_nomer(char ob[80]); void new_nomer(char oob[80]); void delete_nomer(char o[80]); }; void telephonebook::sort_name(char nname[80]) {char c; int j,x; for(j=0;j<k;j+=2) for(i=0;i<k;i+=2) {x=strcmp(nname,nname[i+1]); if(x<0) {c=nname; nname=nname[i+1]; nname[i+1]=c;} } for (i=0;i<k;i+=2) cout<<nname<<"\n"; } void telephonebook::search_nomer(char ob[80]) {char sss; cout<<"vvedite name"<<"\n"; gets(sss); for(i=0;i<k;i++) if(!strcmp(sss,ob) cout<<"nomer telephona="<<"\n"; cout<<ob<<" "; } void telephonebook::delete_nomer(char o[80]) {int i; cout<<"vvedite nomer of name"<<"\n"; cin<<i; cout<<"\n"; if (i>k) cout<<"error"; else o==" "; for(i=0;i<k;i++) cout<<o<<"\n";} void telephonebook::new_nomer (char *obj) void main() { clrscr(); char str[10]; int b; telephonebook obj[k]; for( i=0; i<k; i++) {gets (str); obj.set_name(str); cin>>b; obj.set_nomer(b); } for(i=0;i<k;i++) cout<<"\n"<<obj.get_name()<<" "<<obj.get_nomer(); getch();}
Забыла исправит: в методе сортировки вместо: {c=nname; nname=nname[i+1]; nname[i+1]=c;} -функция strcpy.
метод класса это обычная процедура/функ. class My{ public: int/*тип возв. значения*/ mymetod/*имя метода*/ (int param1,int *param2)/*параметры*/ { //реализация метода return param1 + *param2; } }; int main() { My m,*m1;/*создаем обьект класса*/ m1 = &m; m.mymetod(); /*вызов метода класса*/ m1->mymetod(); /*вызов метода класса*/ } А вообще Luna вы не там задали немного вопрос ).
XshStasX да здесь столько вопросов, что и не перечислишь =) ... Но главный из всех вопросов: что конкретно написать в качестве формального и фактического параметра в методе поиска?????
XshStasX У нас преподаватель такого же плана строгий)))Чего у неё не спросишь- молчит, как могила. Думает, что каждый самостоятельно всего без вопросов должен добиться-..никогда не улыбается и даже не понимает, что человека иногда, чтобы он добился грандиозногго успеха, капельку надо подтолкнуть..А то в одиночку сидишь на месте в луже- и сдвинуться никуда не можешь. Лучше 1 раз увидеть, чем 1000 раз услышать. ) Тем, кто очень хорошо разбирается в данной сфере, советы приносят огромную пользу, а тем, кто похуже- лучше хоть раз в жизни взглянуть на правильный код и уяснить для себя все вопросы.
Это все хорошо но я говорю ответь на пост #5 и ты сам все поймешь Если хочешь пиши в асю 437_803_640 будет свободное время смогу помочь.
Luna скачай эту книгу http://www.kodges.ru/49890-osvoj-samostoyatelno-c-za-21-den.html надеюсь поможет.
XshStasX О ужжас!- не помогло!!!..... ээээээ....-больше никогда не буду заходить на этот сайт............. А почему компилятор жалуется на следующее: говорит, что невозможно преобразовать целый тип к указателю на символьный? x=strcmp(nname,nname[i+1]); if(x<0)
Luna, потому что. Код (Text): int strcmp ( const char * str1, const char * str2 ); У вас два символа (читайnt : числа), сравнивайте их напрямую, посредством операции "==".
Пробовала иначе: for(i=0;i<k;i++) int strcmp ( str1, str2 );........... в ответ на любое вводимое мною имя программа всегда выдаёт номер 1-го объекта
Mankubus а внутри метода как сравнить введённое имя с уже имеющимся?у меня -то по идеи правильно организован метод? void telephonebook::search_nomer(char ob[80]) {char sss; cout<<"vvedite name"<<"\n"; gets(sss); for(i=0;i<k;i++) if(!strcmp(sss,ob) cout<<"nomer telephona="<<"\n"; cout<<ob<<" "; }
Luna, ваш код непросто понять. Код (Text): char ob[80] это вообще что? Типо это у вас массив имен так передается в метод?
Mankubus вообще- именно так XD Можно ничего не передавать в качестве фактических параметров? void telephonebook::search_nomer() В том -то и дело, что я не знаю, что конкретно передать в метод поиска: поле класса name или сами созданные объекты. Нигде толком не объясняется. На практике рассматриваются самые простейшие методы- установка значений и вывод на экран.
Имеется класс телеф.справ-к с полями: имя и номер. #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> #define k 3 int i; class telephonebook {char name[10]; int nomer; public: void set_name(char st[10]) {strcpy(name,st);} void set_nomer(int p) {nomer=p;} char *get_name() {return name;} int get_nomer() {return nomer;} void sort_name(char nname[80]); void search_nomer(); char new_nomer(char oob[80]); char delete_nomer(char o[80]); }; Не знаю, как правильно организовать метод поиска номера по введённому имени.Написала с ошибками: void telephonebook::search_nomer() {char sss[80]; cout<<"vvedite name"<<"\n"; gets(sss); for(i=0;i<k;i++) if(strcmp(sss,name)==0) cout<<"nomer telephona="<<obj.get_name<<"\n"; } ; Сомневаюсь, с чем сравнивать введённое имя: с полем класса name или с массивом выведенных имён obj.get_name? {char sss[80]; cout<<"vvedite name"<<"\n"; gets(sss); for(i=0;i<k;i++) if(strcmp(s , ? ) ==0) cout<<"nomer telephona="<< ? <<"\n"; } ;
yes, получилосьно пока только с поиском) #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> #define k 3 int i; class telephonebook {char name[10]; int nomer; public: void set_name(char st[10]) {strcpy(name,st);} void set_nomer(int p) {nomer=p;} char *get_name() {return name;} int get_nomer() {return nomer;} void sort_name(char nname[80]); void search_nomer(telephonebook * ob); char new_nomer(char oob[80]); char delete_nomer(char o[80]); }; void telephonebook::search_nomer(telephonebook * ob) {char sss[80]; cout<<" vvedite name"<<"\n"; gets(sss); for(i=0;i<k;i++) if(strcmp(sss,ob.name)==0) cout<<"vvedennoe name: "<<ob.name<<" ;nomer telephona="<<ob.nomer<<"\n"; } ; void main() { char str[10]; int b; telephonebook obj[k]; for( i=0; i<k; i++) {gets (str); obj.set_name(str); cin>>b; obj.set_nomer(b); } for(i=0;i<k;i++) cout<<"\n"<<obj.get_name()<<" "<<obj.get_nomer(); getch(); obj.search_nomer(obj) ; .................................................................................................................................. Ещё вопрос: как добавить новое имя с номером к уже выведенным на экран именам с полями?
Думал 10 минут над постом #18 то так и не смог понять чего ты хочешь ?)... Для начала чтоб проще было понимать что либо тебе и другим людям. Для каждой функции определи что именно она должна делать, не на языке программирования а словесно. Пример для твоей функ: void telephonebook::search_nomer() - Получает в качестве параметра имя номера телефона, по имени номера телефона ищет номер телефона. И так для каждой функ. Если я правильно прочитал заварку в чае то тебе нужно поле класса name. А зря книга полезная там много вещей о С++. И что самое главное там в конце каждой главы есть упражнения для проверки знаний. Почитав ее этих вопросов не было в таком количестве и такой формулировке. P.S Лично я б смотрел код в студентов только тогда когда они: Опишут словесно назначение каждой(или основных если прога большая) функ. Что получает в параметрах,что делает и что возвращает, при этом названия типов каждого параметра не важно. Главное понимание смысла этого параметра и его назначения . Ибо написания программы на каком либо языке занимает 20-30% всей задачи, остальное время идет на составление решения что есть более важно чем какой либо код. Удачи вам