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

Описать структуру с именем MARSH - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.79
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
04.03.2011, 22:35     Описать структуру с именем MARSH #1
Описать структуру с именем MARSH, содержащую следующие поля:
BEGST — название начального пункта маршрута;
TERM — название конечного пункта маршрута;
NUMER — номер маршрута.
2. Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив TRAFIC, состоящий из восьми элементов типа MARSH; записи должны быть упорядочены по номерам маршрутов;
вывод на экран информации о маршрутах, которые начинаются или кончаются в пункте, название которого введено с клавиатуры;
если таких маршрутов нет, выдать на дисплей соответствующее сообщение.

проверьте пожалуйста код:

Код
#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;
}
Добавлено через 6 часов 26 минут
Я все правильно сделал или нет??
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.03.2011, 22:45     Описать структуру с именем MARSH #2
Извращение на тему.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
std::string RandomString(int size) {
  std::string result;
  for (int i = 0; i < size; ++i) {
    result += rand() % ('z'-'a' + 1) + 'a';
  }
  result[0] += 'A' - 'a';
  return result;
}
 
class Route {
 public:
  Route() : id_(0), begin_(""), end_("") {}
  Route(int id, const std::string &begin, const std::string &end) :
    id_(id), begin_(begin), end_(end) {}
  inline void begin(std::string value) { begin_ = value; }
  inline std::string begin() const { return begin_; }
  inline void end(std::string value) { end_ = value; }
  inline std::string end() const { return end_; }
  inline void id(int value) { id_ = value; }
  inline int id() const { return id_; }
  friend bool operator<(const Route &a, const Route &b) {
    return a.id() < b.id();
  }
  friend std::ostream &operator<<(std::ostream &o, const Route &route) {
    return o << "ID: " << route.id() << ", from " << route.begin() <<
           ", to " << route.end() << "." << std::endl;
  }
  class Random {
   public:
    Route operator()() {
      return Route(rand() % 200, RandomString(3), RandomString(3));
    }
  };
  class Show {
   public:
    Show(std::ostream &ostream = std::cout) : ostream_(ostream) {}
    void operator()(const Route &route) {
      ostream_ << route;
    }
   private:
    std::ostream &ostream_;
  };
  class ShowIfHas {
   public:
    ShowIfHas(const std::string &station, const Show &show = Show())
      : show_(show), station_(station) {}
    void operator()(const Route &route) {
      if (route.begin() == station_ || route.end() == station_)
        show_(route);
    }
   private:
    Show show_;
    std::string station_;
  };
 private:
  int id_;
  std::string begin_;
  std::string end_;
};
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  std::vector<Route> traffic(16);
 
  std::generate(traffic.begin(), traffic.end(), Route::Random());
  std::sort(traffic.begin(), traffic.end());
 
  std::for_each(traffic.begin(), traffic.end(), Route::Show());
 
  std::string station;
  std::cout << "Station: ";
  std::cin >> station;
 
  std::for_each(traffic.begin(), traffic.end(), Route::ShowIfHas(station));
 
  return 0;
}
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
05.03.2011, 08:19  [ТС]     Описать структуру с именем MARSH #3
шо это???
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2011, 15:15     Описать структуру с именем MARSH #4
j_pavlov, Код на С++ причем очень даже интересный в своем роде. А что такое?
Fliter
2 / 2 / 0
Регистрация: 02.03.2011
Сообщений: 6
05.03.2011, 17:48     Описать структуру с именем MARSH #5
Да код интересный, но первый код чуть лучше в понимании...Во втором пришлось долго разбиратся пока добрался до сути=)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2011, 19:50     Описать структуру с именем MARSH #6
Fliter, Зная STL, перегрузку - в коде можно разобраться за минуты 3-4
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
18.04.2011, 15:29  [ТС]     Описать структуру с именем MARSH #7
ап вопрос открыт

Добавлено через 1 минуту
а можно как то попроще написать чтобы студент 1 курса понял это?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.04.2011, 17:24     Описать структуру с именем MARSH #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
j_pavlov, Конечно. Для этого студенту надо почитать книжки и понять код
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
19.04.2011, 23:32     Описать структуру с именем MARSH #9
На мой взгляд, код с использованием STL проще приведенного в первом посту и гораздо проще нижеприведенного.

По просьбам ленящихся, код без STL, на C. Используется односвязный список с сохранением упорядоченности записей при вставке.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
struct Route {
  int   id;
  char *begin;
  char *end;
  struct Route *next;
};
 
struct OrderedList {
  struct Route *start;
  size_t size;
};
 
void ClearOrderedList(struct OrderedList *route_list) {
  while (route_list->start != NULL) {
    struct Route *temporary = route_list->start->next;
    free(route_list->start->begin);
    free(route_list->start->end);
    route_list->start = temporary;
    --route_list->size;
  }
}
 
void AddRouteToOrderedList(struct OrderedList *route_list, int route_id,
                           const char *route_begin, const char *route_end) {
  struct Route *new_route = (struct Route*)malloc(sizeof(struct Route));
  new_route->id = route_id;
  new_route->begin = strcpy((char*)malloc(strlen(route_begin) + 1),
                            route_begin);
  new_route->end = strcpy((char*)malloc(strlen(route_end) + 1), route_end);
  new_route->next = NULL;
  if (route_list->start == NULL || route_list->start->id >= new_route->id) {
    new_route->next = route_list->start;
    route_list->start = new_route;
  } else {
    struct Route *previous_route = route_list->start;
    new_route->next = previous_route->next;
    while (new_route->next != NULL && new_route->id > new_route->next->id) {
      previous_route = new_route->next;
      new_route->next = new_route->next->next;
    }
    previous_route->next = new_route;
  }
  ++route_list->size;
}
 
char *NewRandomString(size_t min_size, size_t max_size) {
  size_t size = rand() % (max_size - min_size + 1) + min_size;
  size_t i;
  char *result = (char*)malloc(size + 1);
  result[size] = '\0';
  for (i = 0; i < size; ++i)
    result[i] = rand() % ('z'-'a' + 1) + 'a';
  result[0] += 'A' - 'a';
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  struct OrderedList routes = { NULL, 0 };
  size_t i;
  for (i = 0; i < 20; ++i)
    AddRouteToOrderedList(&routes, rand() % 100, NewRandomString(2, 3),
                                                 NewRandomString(2, 3));
  
  struct Route *route = routes.start;
  for (route = routes.start; route != NULL; route = route->next)
      printf("ID: %d, %s -> %s.\n", route->id, route->begin, route->end);
  printf("\n");
 
  size_t buffer_size = 2048;
  char *buffer = (char*)malloc(buffer_size);
  fgets(buffer, buffer_size, stdin);
  buffer[strlen(buffer) - 1] = '\0';
 
  int route_found = 0;
  for (route = routes.start; route != NULL; route = route->next)
    if (strcmp(route->begin, buffer) == 0 ||
        strcmp(route->end, buffer) == 0) {
      printf("ID: %d, %s -> %s.\n", route->id, route->begin, route->end);
      route_found = 1;
    }
 
  if (!route_found)
    printf("No such routes found.\n");
 
  free(buffer);
 
  ClearOrderedList(&routes);
  return 0;
}
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
30.04.2011, 16:26  [ТС]     Описать структуру с именем MARSH #10
Проверьте плиз
Условие

1. Описать структуру с именем MARSH, содержащую следующие поля:
BEGST — название начального пункта маршрута;
TERM — название конечного пункта маршрута;
NUMER — номер маршрута.
2. Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив TRAFIC, состоящий из восьми элементов типа MARSH; записи должны быть упорядочены по номерам маршрутов;
вывод на экран информации о маршрутах, которые начинаются или кончаются в пункте, название которого введено с клавиатуры;
если таких маршрутов нет, выдать на дисплей соответствующее сообщение.

Код
#include<iostream>
#include<cstring>

using namespace std;

struct MARSH {
	char BEGST[40];
	char TERM[40]; 
	int NUMER ; 
} TRAFIC[8];

void vvod(), vivod();

int main()
{
    cout << "Введите информацию о маршрутах" << endl;
    vvod();
    vivod();
    return 0;
}
void vvod()
{
	for(int u = 0; u < 8 ; u++)
	{
		cout << "Маршрут номер :  " << u << endl << "Навзвание начального пункта маршрута : ";
		cin >> TRAFIC[u].BEGST;
		cout << endl << "Конечного пункта : ";
		cin >> TRAFIC[u].TERM;
		cout << endl << "Его номер : ";
		cin >> TRAFIC[u].NUMER;
	}
	cout << endl;
}

void vivod()
{      
	int schet = 0;
	char poisk[40], tochka[60];
	cout << "Конечная или начальная точка? [k/n]" << endl;
	cin >> tochka;
	if (tochka[0]=='k')
	{
		cout << endl << "Введите точку : ";
		cin >> poisk ;
		for(int t = 0; t < 8; t++)
		{
			if(!(strcmp(TRAFIC[t].BEGST, poisk)))
			{                                  
				cout << "маршрут  " << TRAFIC[t].NUMER << endl;
				schet++;
			}
			if(schet==0); cout << "Ненайдено";
		}
	}
	else if(tochka[0]=='k')  {
		cout << endl << "Введите точку : ";
		cin >> poisk ;
		for(int t = 0; t < 8; t++)
		{
			if(!(strcmp(TRAFIC[t].TERM, poisk)))
			{                                  
				cout << "маршрут  " << TRAFIC[t].NUMER << endl;
				schet++;
			}
			if(schet==0); cout << "Ненайдено";
		}
	}
	else 
	{
		cout << "";
		vivod();
	}
}
Оно запускается, но доходит до "Конечная или начальная точка? я ввожу Конечная и он снова задает вопрос "Конечная или начальная точка? вбиваю начальная в общем так повторяется много раз.
Антон555
13 / 13 / 0
Регистрация: 22.03.2011
Сообщений: 84
30.04.2011, 17:00     Описать структуру с именем MARSH #11
У меня работает, но выдаёт что то типа "Не найдено,Ненайдено,Ненайдено,Ненайдено,Ненайдено,Ненайдено"
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
30.04.2011, 17:02  [ТС]     Описать структуру с именем MARSH #12
хм может от компилятора зависит. У тебя какой?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.04.2011, 17:05     Описать структуру с именем MARSH #13
Цитата Сообщение от j_pavlov Посмотреть сообщение
if (tochka[0]=='k')
Цитата Сообщение от j_pavlov Посмотреть сообщение
else if(tochka[0]=='k')
оригинально
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
30.04.2011, 17:14  [ТС]     Описать структуру с именем MARSH #14
Цитата Сообщение от kazak Посмотреть сообщение
оригинально
ну что смог то и напек )
Антон555
13 / 13 / 0
Регистрация: 22.03.2011
Сообщений: 84
30.04.2011, 17:21     Описать структуру с именем MARSH #15
Цитата Сообщение от j_pavlov Посмотреть сообщение
м может от компилятора зависит. У тебя какой?
Visual Studio 2008.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.04.2011, 17:22     Описать структуру с именем MARSH #16
Ладно опишем словами:
если нулевой элемент масива 'точка' не равен букве 'к' (причем английской), то...проверяем еще раз, а равен ли нулевой элемент массива 'точка' букве 'к' (все также английской), если нет, то функция вызывает саму себя и начинается все сначала
Антон555
13 / 13 / 0
Регистрация: 22.03.2011
Сообщений: 84
30.04.2011, 17:25     Описать структуру с именем MARSH #17
А ну дык конечно ты же наверное вводишь л вместо англ. K всмысле просто жмёшь на туже клавишу только в русском регистре так и у меня заного спрашивает..
j_pavlov
0 / 0 / 0
Регистрация: 16.01.2011
Сообщений: 54
30.04.2011, 17:32  [ТС]     Описать структуру с именем MARSH #18
о, пасибо, заработало тоже выдает ненайдено
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.04.2011, 17:41     Описать структуру с именем MARSH #19
Цитата Сообщение от j_pavlov Посмотреть сообщение
тоже выдает ненайдено
Цитата Сообщение от j_pavlov Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
for(int t = 0; t < 8; t++)
{
   if(!(strcmp(TRAFIC[t].TERM, poisk)))
   { 
      cout << "маршрут " << TRAFIC[t].NUMER << endl;
      schet++;
   }
   if(schet==0); cout << "Ненайдено";
}
думается проверку счетчика нужно вынести ЗА цикл.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2011, 20:01     Описать структуру с именем MARSH
Еще ссылки по теме:

C++ Описать структуру с именем MARSH
Описать структуру с именем NOTE C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.04.2011, 20:01     Описать структуру с именем MARSH #20
Цитата Сообщение от j_pavlov Посмотреть сообщение
if(schet==0); cout << "Ненайдено";
Если условие верно, выполняется оператор ;
Слово "ненайдено" выводится всегда, независимо от if.

Добавлено через 30 секунд
И, разумеется, проверку нужно вынести из цикла.
Yandex
Объявления
30.04.2011, 20:01     Описать структуру с именем MARSH
Ответ Создать тему

Метки
marsh, marsh c++, описать структуру, описать структуру c++, описать структуру marsh c++, описать структуру marsh, описать структуру с именем marsh, описать структуру с именем marsh c++, структура marsh, структура marsh c++, структуры данных, структуры данных c++
Опции темы

Текущее время: 07:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru