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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Толик - Нолик
31 / 31 / 11
Регистрация: 07.03.2009
Сообщений: 31
#1

вот так задачка((( - C++

07.03.2009, 21:01. Просмотров 1105. Ответов 10
Метки нет (Все метки)

ввели количество человек к примеру ( 8 человек );

name| last name| year| start number| it number| previous result
1. A K 1989 1 13 35,6
2. B L 1988 2 11 35,9
3. C M 1990 6 222 36,0
4. D N 1988 7 31 38,0
5. E O 1989 8 60 36,4
6. F P 1989 3 2 37,3
7. G R 1988 4 14 37,0
8. I S 1980 5 7 37,6

--- сортирует ( сортировки цикл идет по колонке previous result )

1. 1. A K 1989 1 13 35,6
2. 2. B L 1988 2 11 35,9
3. 3. C M 1990 6 222 36,0
4. 5. E O 1989 8 60 36,4
5. 7. G R 1988 4 14 37,0
6. 6. F P 1989 3 2 37,3
7. 8. I S 1980 5 7 37,6
8. 4. D N 1988 7 31 38,0

--- выбрало первых 4 данных и снова сортирует по принципу:

1 - 4
2 - 3
3 - 1
4 - 2
--- после выводит

name| last name| year| start number| it number| previous result

1 забег
дорожка № 1 -- 5. E O 1989 8 60 36,4
дорожка № 2 -- 3. C M 1990 6 222 36,0
дорожка № 3 -- 1. A K 1989 1 13 35,6
дорожка № 4 -- 2. B L 1988 2 11 35,9

2 забег
дорожка № 1 -- 4. D N 1988 7 31 38,0
дорожка № 2 -- 8. I S 1980 5 7 37,6
дорожка № 3 -- 7. G R 1988 4 14 37,0
дорожка № 4 -- 6. F P 1989 3 2 37,3

и так до 8 забегов
Как это в коде должно выглядеть не знаю...

P.S что можете сказать граждане программисты...

Добавлено через 2 часа 41 минуту 32 секунды
много заходят смотрят но ничего не могут понять??? я в написании программ не силен, а в Вашей помощи нуждаюсь...
программа сортирует входные данные и после ряда операций, должен получится такой результат... как этого результата добиться???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2009, 21:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вот так задачка((( (C++):

Вывести массив вот так - C++
задан массив любой размерности, его нужно сначала мысленно разделить на две части : в нечетных строках слева будут все кроме последнего...

Почему тип char не может делать вот так += - C++
Я хочу из входного текста получить другой текст. Например: ТЕКСТ, а я хочу получить ТСКЕТ то есть предложение или слово только...

Так, норм задачка, гляньте, скажите что да как - C++
Как-то раз Поликарп захотел узнать, кто из секретарей разговаривает по Spyke, а кто — нет. Он выписал для каждого секретаря номер сессии...

Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы - C++
Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы: Проверить, есть ли во...

Вот такое вот кажется лёгкое задание но не как не могу решить. - C++
задание 223(В,И)Картинки загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.

вот такой вот пример - C++
даны числа a1,a2,...,a10.Определить их сумму оператор цикла и условного оператора! как это ?

10
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.03.2009, 22:27 #2
Создай по данным структуру. Пото массив их объектов типа этой структуры. А сортировка уже везде расписанная штука. У тебя она по полям структур в массиве будет.
1
Толик - Нолик
31 / 31 / 11
Регистрация: 07.03.2009
Сообщений: 31
07.03.2009, 22:55  [ТС] #3
а как с отсортированного массива данных выбрать 4 первых данных и снова по сортировать их за принципом №3 первый результат с отсортированного массива, №4 - 2 результат, №2 - третий, и №1 - четвертый...??

1 - 4
2 - 3
3 - 1
4 - 2
и вывести

name sname year start number it number previous result

1 забег
дорожка № 1 -- 5. E O 1989 8 60 36,4
дорожка № 2 -- 3. C M 1990 6 222 36,0
дорожка № 3 -- 1. A K 1989 1 13 35,6
дорожка № 4 -- 2. B L 1988 2 11 35,9

2 забег
дорожка № 1 -- 4. D N 1988 7 31 38,0
дорожка № 2 -- 8. I S 1980 5 7 37,6
дорожка № 3 -- 7. G R 1988 4 14 37,0
дорожка № 4 -- 6. F P 1989 3 2 37,3
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.03.2009, 23:00 #4
Я в это отсутствие ТЗ вообще не въезжаю.
Но по таблицам вижу, что кодить тут нечего... Какая разница как сортировать? В первый раз до 8, второй до 4-х, потом вторую половину.
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.03.2009, 00:39 #5
Код
1 - 4
2 - 3
3 - 1
4 - 2
это вручную переставлять в функции, которая срабатывает для четырёх элементов, начиная с какого-то, сначала передаешь ей адрес первого элемента, а потом адрес пятого; если сразу это учесть, то нужно делать массив указателей на структуры (чтобы не проводить копирования каждой структуры при первой сортировке и этих последующих)
1
Толик - Нолик
31 / 31 / 11
Регистрация: 07.03.2009
Сообщений: 31
08.03.2009, 00:44  [ТС] #6
спасибо!!!
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.03.2009, 12:26 #7
просто сортирует по любому полю массив указателей на структуры
1
Вложения
Тип файла: zip swimsort.zip (1.9 Кб, 14 просмотров)
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.03.2009, 11:12 #8
чуть подправил, нельзя было инициализировать массив адресами переменных, так как они не константы
1
Вложения
Тип файла: zip swimsort.zip (1.9 Кб, 16 просмотров)
Толик - Нолик
31 / 31 / 11
Регистрация: 07.03.2009
Сообщений: 31
09.03.2009, 15:07  [ТС] #9
спасибо большое!
сегодня буду делать, как сделаю вылажу тут...
0
Толик - Нолик
31 / 31 / 11
Регистрация: 07.03.2009
Сообщений: 31
15.03.2009, 23:13  [ТС] #10
немного задержался....но код написал... кому интересно....
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
//#include<math.h>
 
#define STRACK 4
#define SIZE 41
 
struct Person {
    char surname[SIZE];
    char name[SIZE];
    int track_num;
    int self_num;
    float result;
    };
 
int num_run;
int  num_track;
int track_rest;
 
void getPerStr(char* sur,char* text);
void getPerNum(int* num,char* text);
void lineDraw();
struct Person* createPerson();
void inputPerson(struct Person*run);
void outputPerson(struct Person*run);
void copyPerson(struct Person* target,struct Person* source);
void sortPerson(struct Person* run);
void getPerFloat(float* num,char* text);
 
void sortTrack(struct Person* run);
void out(struct Person* run, int index,int i);
 
int main(void)
{
    struct Person* runner;
    struct Person test;
    struct Person (*track) [4];
 
    //double dummy=sin(0.0);
    clrscr();
    runner=createPerson();
    inputPerson(runner);
    sortPerson(runner);
    outputPerson(runner);
    putchar('\n');
    sortTrack(runner);
    getch();
    return 0;
}
 
void getPerStr(char* sur,char* text)
{
    int i=0;
    char* char_pos;
    int length;
    int check=0; //for checking string
    while(check == 0)
    {
     clrscr();
     printf("Please input your %s:",text);
     i=0;
     while((sur[i]=getchar()) !='\n' && i<SIZE)
        i++;
     sur[i+1]='\0';
     i=0;
     if(sur[1]=='\0')                        //checking for right string
       {                                     //verifying for symbol '\n'
        check=0;
        continue;
       }
     else
        check=1;
     length=strlen(sur);
     while(isalpha(sur[i]) && i<length)      //checking for right string
        i++;                             //just alphabetical
     if((i+1)==length)
      check=1;
     else
      {
       check=0;
      }
    }
    char_pos=strchr(sur,'\n');
    *char_pos='\0';
}
 
void getPerNum(int* num,char* text)
{
    clrscr();
    printf("Input your %s:",text);
    while(scanf("%d",num) == 0)
    {
       clrscr();
       while(getchar()!='\n')
          continue;
       printf("Input your %s:",text);
    }
}
 
void getPerFloat(float* num,char* text)
{
    clrscr();
    printf("Input your %s:",text);
    while(scanf("%f",num) == 0)
    {
       clrscr();
       while(getchar()!='\n')
          continue;
       printf("Input your %s:",text);
    }
}
 
void lineDraw()
{
    int i;
    putchar('\n');
    for(i=0;i<80;i++)
      putchar('_');
    putchar('\n');
}
 
void inputPerson(struct Person*run)
{
    int i;
    for(i=0;i<num_run;i++)
    {
        getPerStr(run[i].surname,"surname");
        getPerStr(run[i].name,"name");
        getPerNum(&run[i].track_num,"track number");
        getPerNum(&run[i].self_num,"self number");
        getPerFloat(&run[i].result,"result");
    }
}
 
void outputPerson(struct Person*run)
{
    int i;
    for(i=0;i<num_run;i++)
    {
        printf("%d)",i+1);
        printf("%s, ",run[i].surname);
        printf("%s, ",run[i].name);
        printf("%d, ",run[i].track_num);
        printf("%d, ",run[i].self_num);
        printf("%.1f\n",run[i].result);
    }
}
 
struct Person* createPerson()
{
    struct Person* ptr_per;
    printf("INPUT NUMBER OF RUNNERS\n");
    getPerNum(&num_run,"number of runners");
    num_track=(int)(num_run/STRACK);
    track_rest=num_run%STRACK;
    printf("num_track=%d, track_rest=%d\n",num_track,track_rest);
    ptr_per=(struct Person*) malloc(num_run*sizeof(struct Person));
    if(ptr_per==NULL)
    {
      printf("Cannot alloc memory\n");
      exit(EXIT_FAILURE);
    }
    return ptr_per;
}
 
void copyPerson(struct Person* target,struct Person* source)
{
    strcpy(target->surname,source->surname);
    strcpy(target->name,source->name);
    target->track_num=source->track_num;
    target->self_num=source->self_num;
    target->result=source->result;
}
 
void sortPerson(struct Person* run)
{
    struct Person test;
    int i;
    int j;
    for(i=0;i<num_run-1;i++)
    {
    for(j=0;j<num_run-1;j++)
    {
        if(run[j].result>run[j+1].result)
        {
        copyPerson(&test,&run[j]);
        copyPerson(&run[j],&run[j+1]);
        copyPerson(&run[j+1],&test);
        }
    }
    }
}
 
 
void out(struct Person* run, int index,int i)
{
        printf("%d)",i);
        printf("%s, ",run[index].surname);
        printf("%s, ",run[index].name);
        printf("%d, ",run[index].track_num);
        printf("%d, ",run[index].self_num);
        printf("%.1f\n",run[index].result);
}
 
 
void sortTrack(struct Person* run)
{
    int i,j,k,count;
    count=(int)(num_run/STRACK);
    j=3;
    k=0;
    for(i=0;i<count;i++,k+=4,j+=4)
    {
    printf("TRACK N %d\n",i);
    out(run,j,1);
    out(run,j-1,2);
    out(run,k,3);
    out(run,k+1,4);
    putchar('\n');
    }
}
0
Smoka
5 / 4 / 1
Регистрация: 14.03.2009
Сообщений: 3
16.03.2009, 00:03 #11
Ооо интересная задачка=)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2009, 00:03
Привет! Вот еще темы с ответами:

Сделать так, чтобы функция возвращала как целые, так и дробные значения - C++
Задача: нужно найти среднее арифметическое чисел в одномерном массиве разных типов. В main() у пользователя спрашивается размер...

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее? - C++
Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ float a,c; char b; skip: ...

Дописать программу так, чтобы в массив вводились как целые числа так и вещественные - C++
помогите дописать программу так чтобы в массив вводились как целые числа так и вещественные #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Что в коде ни так? while не работает так, как ожидаю - C++
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
16.03.2009, 00:03
Ответ Создать тему
Опции темы

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