struct Employee { char name[MAX_LENGHT]; char position[MAX_LENGHT]; int hiredate; };
void input(Employee *workers, int count); void output(Employee *workers, int count);
//Написать программу выполняющую следующие действия : //-ввод с консоли данных в массив структур worker //-вывод на консоль фамилий работников чей стаж превышает введенный с консоли , //если таких работников нет вывести соответствующее сообщение
// Employee* workers = NULL; int number=0; printf("Enter number of employees: "); scanf("%d", &number); if (number<1) { workers = new Employee[number]; input(workers, number); output(workers, number);
delete []workers; } return 0; }
void input(Employee *workers, int count) { if (workers) { for (int i=0; i<count; i++) { printf("Input name: "); scanf("%s", workers[i].name); printf("Input position: "); scanf("%s", workers[i].position); printf("Input hire date: "); scanf("%d", &workers[i].hiredate); } } } void output(Employee *workers, int count) { if (workers) { int exp=0; printf("Input base stage: "); scanf("%d", &exp); int foundsomebody=0; for (int i=0; i<count; i++) { if (exp < CURRENT_YEAR-workers[i].hiredate) { foundsomebody=1; printf("%s", workers[i].name); } } if (foundsomebody==0) { printf("Nobody"); } } }
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
Delin писал(а):
if (number<1)
little fix: if( number > 1 ). Да и вообще в этой проверке тут не вижу смысла
Delin писал(а):
Код:
void input(Employee *workers, int count) { if (workers)
А разве вообще хорошая практика делать такие проверки? То есть цикл не запустится если количество 0 и это корректный код без проверки, а если количество не 0 и workers равен NULL то это дикий феил с вызывающей функцию стороны - можно разве что сделать debug assert. В любом случае если при каком-то некорректном аргументе нужно выйти из функции, я бы не делал if с гигантским телом, а написал бы
Код:
if( !workers ) return;
Будет быстрее работать в большинстве случаев если workers почти что никогда не равен NULL - статический branch predicator даже в случае отсутствия поддержки со стороны динамического отлично отработает это ветвление. Но код будет на пару байт тяжелее
Delin писал(а):
Код:
int number=0; printf("Enter number of employees: "); scanf("%d", &number);
Опять же, не знаю как там с точки зрения промышленного программирования или типа того, но занулять везде переменные даже где это никому не нужно - это никому не нужно. Зачем это вообще может быть нужно?
Delin писал(а):
Код:
struct Employee { char name[MAX_LENGHT]; char position[MAX_LENGHT]; int hiredate; };
int hiredate должна идти первой чтобы сразу два члена попали в первые 128 байт структуры - это оптимальнее в общем случае, в любом случае вот тут это точно хорошая практика
Добавлено спустя 1 минуту 9 секунд: вся загвостка с мнимой единицей.... либо надо считать с начало действительную часть потом мнимую, а как их соединить?
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
AZZOT писал(а):
окей, еще соображения?
printf("\nVtoroi koren' y=%lf",y); - в таких выводах лучше заменить %lf на %lg - иначе выводится куча хвостовых нулей. Можно и вручную при желании задать точность. Что касается программирования больше ничего особенного не вижу, а математику я попозже посчитаю - не раньше вечера. Корни выводит, правильные они или нет потом посмотрим
Добавлено спустя 28 минут 37 секунд: Посчитал для случая когда дискриминант больше 0 - всё ок. Ну это было понятно
Если надо сделать как по ссылке, то программа даже и близко не верна. Надо вводить действ. и мнимые части всех коэф. (reA, imA, reB, imB, reC, imC) Все операции выполнять с этими данными. Результат надо будет всегда вычислять для действительной и для мнимой частей. Извлечение корня из дискрим. будет по алгоритму извл. корня из комплексного числа, деление комплексных чисел и т.д. В общем геморроя немного поболее
Добавлено спустя 32 минуты 56 секунд: может надо использовать #include <complex> ...
AZZOT класс инкапсулирует весь вышеописанный геморрой с комплексными числами, и решение задачи сводится к вводу данных, простых формул как с обычным уравнением, и выводу re и im ответов.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения