Консультация № 40165
13.04.2006, 10:17
0.00 руб.
0 5 2
Ситуация такая. Дана задача под Borland 3.11. Задача звучит так: дана ведомость зарплаты сотрудников, в которой указаны табельный номер сотрудников и зарплата каждого. Вывести на экран список табельных номеров сотрудников в порядке увеличения их зарплаты. Ниже я привел начало кода этой задачи(мб оно правильно, мб нет)
Обьясните мне как и с чем сравнивать зарплаты сотр-ков, и как сделать так чтобы после сортировки номера сотрудников переставились вместе с зарплатой.
Не смейтесь надо мной, я только учусь.


Приложение:
#include <conio.h>#include <stdio.h>#include <string.h>#include <stdlib.h>main(){ clrscr(); int n,m,i,j; int zp[10]; int nom[10]; printf("Vvedite kol-vo rabochih:\n"); scanf("%d",&n); printf("Vvedite zarplaru rabochego:\n"); for(i=0;i<n;i++) scanf("%d",&zp[i]); getch();}

Обсуждение

Неизвестный
13.04.2006, 17:43
общий
это ответ
Здравствуйте, W4rmonger!

Из условия задачи, дан табельный номер и к нему прилогается зарплата.
Т.е. работник № 5 зарплата = 30000 рублей.
В идеале это список записей из двух полей: табельный номер и зарплата.
Чтобы упростить задачу можно структуры не вводить табель представить в виде двумерного массива
int Tabel[50][2], т.е. два столбца, а сотрудников допустим 50
Возращаясь к нашему работнику № 5, в табеле он стоит допустим на первом (втором если с нуля считать) месте:
Tabel[1][0] = 5;
Tabel[1][1] = 30000;
И так далее...
Отсортировать это все дело можно например пузырькомКод в приложении не претендует на идеальность, на правильность не проверял. Он только показывает логику работы пузырька (если вы вдруг не знаете). Можно отсортировать и стандартными средствами, однако обязательно нужно указать функцию сравнения (в стд функция мельше).
А далее выводим на экран уже отсортированный массив.

Приложение:
int buf[2];bool Tran(true);while (Tran){ Tran = false; for (int i(1); i< 50; i++) if (Tabel[i-1][1] > Tabel[i][1]) { buf[0] = Tabel[i-1][0]; buf[2] = Tabel[i-1][1]; Tabel[i-1][0] = Tabel[i][0]; Tabel[i-1][1] = Tabel[i][1]; Tabel[i][0] = buf[0]; Tabel[i][1] = buf[1]; Tran = true; }}
Неизвестный
13.04.2006, 19:47
общий
Большое спасибо за обьяснение алгоритма, но мне хотелось бы чтобы вы расписали что означает каждая строчка в вашем приложении.Например что такое "bool Tran(True)"?Если не трудно?
Неизвестный
14.04.2006, 19:26
общий
это ответ
Здравствуйте, W4rmonger!

Решение задачи:
1. создаем два масива (для номеров и зарплат). заполняем.
2. сортируем массивы, сравнивая зарплаты, но меняем местами элементы в обоих масивах.
3. выводим.

Код не предлагаю, поскольку любой програмист должен решать задачи сам.
Неизвестный
14.04.2006, 21:12
общий
Ну мамонт спасибо те за то что хоть ЧТО-ТО написал.Я сначала подумал шутка. Ты походу ей богу мамонт, потому что до того что ты написал я бы вряд-ли догадался : ) Отдельное те спасибо!
Неизвестный
16.04.2006, 22:40
общий
bool Tran(true); значит следующееbool - булеанкий тип переменной, т.е. переменная которая может принимать всего два значения true или false.Tran - ее название, не помню уже что хотел этим сказать... Ну не нравится назовите так BilaPerestonovka(true) - инициализация переменной начальным значением, т.е. мы объявили переменную и присвоили ей значение true.Можно было конечно написать такbool Tran;Tran = true;Суть одна и таже.while (Tran)Означает следующее:Пока переменная Tran будет иметь значение true выполнять тело цикла.З.Ы. Если задаете дополнительный вопрос на мини-форуме (в данном случае мне), то знайте что я об этом ничего не знаю и меня нужно известить по почте.З.З.Ы. Не стесняйтесь задавать в рассылку вопросы типа, а что значит строчка bool Tran(True) в приведенном коде? Поверте это со стороны выглядит лучше, чем просьба сделать что-либо за место тебя. Да и для Вас будет познавательней.
Форма ответа