Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
#1

6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика - C++

30.05.2012, 01:42. Просмотров 2076. Ответов 29
Метки нет (Все метки)

Разбираю 6-ю главу книги Роберт Седжвик: Фундаментальные алгоритмы C++. Части 1-4
Расматриваются простые методы сортировки, любых типов данных.
http://www.proklondike.com/books/cpp...l_algo1_4.html

В листингах 6.1-6.5 представлены методы сортировок, а в листингах 6.6-6.10 преставлена клиентская программа для любых типов данных типа Item.
В общем переписал вроде все правильно но выдает несколько ошибок типо:
" error LNK2019: unresolved external symbol "void __cdecl show<struct record>(struct record * const,int,int)" (??$show@Urecord@@@@YAXQAUrecord@@HH@Z) referenced in function _main c:\Users\Toha\documents\visual studio 2010\Projects\RobertSedjvik2\RobertSedjvik2\MainDriver.obj"

MainDriver.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdlib.h>
#include <iostream>
#include "Array.h"
#include "exch.h"
#include "Item.h"
using namespace std;
 
void main(int argc, char *argv[])
 
{ int N = atoi(argv[1]), sw = atoi (argv[2]);
 
 
    Item *a = new Item[N];
    if (sw) rand(a, N); else scan(a,N);
    sort(a, 0, N-1);
    show(a, 0, N-1);
}
OrgfunckArray.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <stdlib.h>
#include "Array.h"
template <class Item>
void rand(Item a[], int N)
{ for (int i=0; i<N; i++) rand(a[i]);}
template <class Item>
 void scan(Item a[], int &N)
 { for (int i=0; i <N; i++)
    if (!scan(a[i])) break;
 N =i;
 
 }
 template <class Item>
 void show (Item a[],int l, int r)
 {for (int i=l; i<=r; i++)
 show(a[i]);
 cout << endl;
 }
 template <class Item>
 void sort(Item a[], int l, int r){
     for (int i=l; i<r; i++){
         int f=0;
         for(int j=r; j>i; j--)
             f+=compexch(a[j-1], a[j]);
         for(int j=i+2;j<=r;j++)
             f+=compexch(a[j-1], a[j]);
         if (f==0)break;
     }
 }
exchange.cpp
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <stdlib.h>
template <class Item>
void exch (Item &A, Item &B)
{Item t = A; A= B; B=t;}
template <class Item>
 int compexch (Item &A,Item &B)
 { if (B < A) {exch(A, B); return 1;}else return 0; }
Itemcpp.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<stdlib.h>
#include "Item.h"
using namespace std;
int operator<(const Item& A, const Item& B)
{return A.key< B.key;}
int scan (Item& x)
{  
return (cin>>x.key>>x.info) !=0;}
void rand(Item& x)
{x.key = 1000*(1.0*rand()/100);
x.info=1.0 *rand()/100;}
void show (const Item x)
{cout <<x.key<<" "<<x.info<<endl; }
Array.h
C++
1
2
3
4
5
6
7
8
template <class Item>
void rand(Item a[], int N);
template <class Item>
void scan(Item a[], int &N);
template <class Item>
void show(Item a[], int l, int r);
template <class Item>
void sort (Item a[], int l, int r);
exch.h
C++
1
2
3
4
template <class Item>
void exch (Item &A, Item &B);
template <class Item>
 int compexch (Item &A,Item &B);
Item.h
C++
1
2
3
4
5
6
typedef struct record { int key; float info;} Item;
int operator <(const Item&, const Item&);
int scan(Item&);
void rand (Item&);
void show (const Item&);
using namespace std;
Подскажите пожалуйсто что не так?????? очень надо разобратся как это работает, и вообще... У меня экзамен в воскресенье.
Зы: Если что не так, я все исправлю, мы люди не месные и тп ).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 01:42     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика
Посмотрите здесь:
C++ Книги Седжвика
Седжвик Р. - Фундаментальные алгоритмы на C++. Объясните лемму C++
Что подразумевает требование "алгоритмы и структуры данных" в описании вакансий? C++
Алгоритмы поиска. "Блудный сын" C++
Ищу статьи и книги по теме "Структуры; массивы структур" C++
Калькулятор из главы 6 книги Б.Страуструппа "Пинципы и практика с использованием C++" C++
Бинарное дерево поиска: "Библиотека", поиск по автору книги C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 01:51     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #2
C++
1
2
3
4
5
6
template <class Item>
void show (Item a[],int l, int r)
{
for (int i=l; i<=r; i++) show(a[i],/*??? , ???*/); // а где остальные два параметра show ???
cout << endl;
}
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 01:55  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #3
show Это перегружиная функция смотрите внимательно, или откройте книгу.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 02:01     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #4
А не чего что "части" шаблона по разным файлам разкиданы ?
Где потерялась реализация всего этого ?
C++
1
2
3
4
5
6
7
8
9
//Array.h
template <class Item>
void rand(Item a[], int N);
template <class Item>
void scan(Item a[], int &N);
template <class Item>
void show(Item a[], int l, int r);
template <class Item>
void sort (Item a[], int l, int r);
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 02:06  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #5
А какая разница? Хедер файлы всеравно всегда в мэйне в верху компелируются.
В общем я все сделал как по книге в этом то и вопрос.

Добавлено через 1 минуту
OrgfunckArray.cpp
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 02:07     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #6
Мэей видит Аррэй(обьявление) но не видит OrgfunckArray.cpp( реализацию )

Если пишишь шаблоны пиши их целиком в одном h-файле.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 02:22  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #7
Допустим действительно так, как сделать так чтоб он видел OrgfunckArray.cpp в этом то и смысл!!
и появилась одна новая ошибка
error C2065: 'i' : undeclared identifier c:\users\toha\documents\visual studio 2010\projects\robertsedjvik2\robertsedjvik2\array.h 19
Всего одна ошибка.
Зы: Я закоментил содержание Array.h и скопирывал в Array.h содержание OrgfunckArray.cpp , а потом закоментил содержимое OrgfunckArray.cpp, остался один Array.h с функциями, но это не грамотно в хедер файле функции описывать.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 02:28     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #8
но это не грамотно в хедер файле функции описывать.
Грамотно если это шаблоны...

Закинь содержимое OrgfunckArray.cpp в Array.h.
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 02:30  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #9
В общем все равно не то я понял почему оно не видет "i" но это не главное опять таже ошибка что в первом сообщении , только иих на две меньше

Добавлено через 57 секунд
Я закинул уже
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 02:35     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #10
И теперь возможно Array не видит перегруженную show в Itemcpp.cpp

Добавлено через 2 минуты
И чесно говоря я поражаюсь как это все неудобно офорлено...
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 02:35  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #11
В том то и смысл чтоб это все работало в разных файлах, именно так это обьясняется у Роберта Седжвика. Хочется сделать по разным файлам, А хедер файлы это интерфейсы для "высокоуровневых функций" как написано в книге. Допустим Array.h для обработки массивов.
Item.h для задания типа данных. и тд.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 02:37     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #12
exchange.cpp нужно всунуть по той же причине в exchange.h
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 02:48  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #13
Это не реально возвращать все в h файлы, я и сам знаю что оно будет работать(уже делал) , важно сделать его в разных файлах, для этого и пришел искать ответы на форуме. Это нужно сделать как в Книге!!! Или пояснить почему там не правильно!! Если Все перенести в Хедер файлы то оно откомпелируется но будет фатал эрор.... в первой строке мэйна.

Да уж печально!!! Спасибо за попытку.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 03:06     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #14
Ты ошибаешься.

Вот такая же ошибка как у тебя
Шаблоны. Хеш-функция
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 03:07  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #15
Цитата Сообщение от Avazart Посмотреть сообщение
Ты ошибаешься.
Пожалуйста(исли ты, что то шариш) очень прошу, открой книгу, ссылку я кинул в первом сообщении пункт 6.7 ! Мне просто нет смысла читать её дальше если у меня не заработает этот код!! Я очень хочу ошибатся, но мне надо понять что не так???? В книге расписано именно так, эти методы сортировок мне нужно использовать в других программах.....
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 03:22     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #16
Это особенность шаблонов на большенстве компиляторов нельзя размещать объявление шаблонов и их реализацию в разных файлах - они должны быть в одном файле
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 03:23  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #17
ЛАдно хорошо переделаю, прогу, чтоб работала, и еще один вопрос по этому же коду. Функция мэйн получает параметры
C++
1
2
3
void main(int argc, char *argv[])
 
{ int N = atoi(argv[1]), sw = atoi (argv[2]);
и их сразу использует, где оно должно брать эти параметры?? И для чего таким образом обьявляется мэйн, по крайней мере в книге (этой-же ) всегда так пишится..
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 03:27     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #18
int argc - количество аргументов
char *argv[] массив аргументов

Это параметры которые надо передать... точнее которые принимает твоя прога в командной строке.

Т.е например если у тебя винда выполняешь команду cmd потом пишиш имя твоей проги и через пробел перечисляешь параметры.
Запускается прога сразу с какими- то данными и выводит результат
tihonya
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 107
30.05.2012, 03:33  [ТС]     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #19
Цитата Сообщение от Avazart Посмотреть сообщение
int argc - количество аргументов
char *argv[] массив аргументов

Это параметры которые надо передать твоей проге в командной строке.
А как это сделать (у меня 2010 студия) Она у меня нече не спрашивает, или это какбы ключи, параметры после запуска ЕХЕ файла? типо *.ехе -2 -34, 45
Но все равно как при компиляции передать эти аргументы в мейн?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 03:39     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика
Еще ссылки по теме:
C++ Heap Corruption Detected в листинге 19.6 из книги "Освой с++ за 21 день"
Не работает программа из книги Дейтела "Как программировать на с++" C++
Задача из книги "Програмирование - принципы и практика использования C++" C++
C++ Структуры данных "Книги", вывод нужной информации
Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
30.05.2012, 03:39     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика #20
При компиляции нет, после компиляции ( если не выдаст ошибку) можно через cmd экзешник запустить.

А вообще можно переделать в
C++
1
2
3
4
5
6
7
8
9
int main() // int вместо void обычно пишут
{ 
int N; 
int sw; 
cin>>N;
cin>>sw;
//...
return 0;
}
Yandex
Объявления
30.05.2012, 03:39     6-я глава книги "Фундаментальные алгоритмы C++" Роберта Седжвика
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru