Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 30 из 32<  1 ... 27  28  29  30  31  32  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 17.10.2005
Откуда: Киров-ННовгород
Код:
// testproj.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"

#define MAX_LENGHT (256)
#define CURRENT_YEAR (2012)

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
//-вывод на консоль фамилий работников чей стаж превышает введенный с консоли ,
//если таких работников нет вывести соответствующее сообщение


int _tmain(int argc, _TCHAR* argv[])
{
    _CrtSetDbgFlag(
        _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_CHECK_ALWAYS_DF |
        _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF
    );

    //
    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
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Delin Это ты мне написал ? Если да то огромное спасибо, конечно. Я мне эту программку кто то помог решить уже давно.


 

Member
Статус: Не в сети
Регистрация: 17.10.2005
Откуда: Киров-ННовгород
silent_assassin ох, а на дату сообщения только сейчас посмотрел :crazy: да, делать ночью на работе просто было уже нечего.


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Delin Ну нечего я хоть вспомнил, а то за лето все забыл напрочь. Но ничего скоро мне твоя помощь возможно понадобится)


 

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 байт структуры - это оптимальнее в общем случае, в любом случае вот тут это точно хорошая практика


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Industrialice Здорова! Я уж думал ты нас покинул)


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
silent_assassin писал(а):
Здорова! Я уж думал ты нас покинул)

Не, я тут каждый день бываю и не вижу предпосылок к смене своего режима


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Industrialice писал(а):
Не, я тут каждый день бываю и не вижу предпосылок к смене своего режима


Это хорошо)


 

Member
Статус: Не в сети
Регистрация: 15.04.2007
Откуда: Челябинск №9180
народ, кто поможет с написанием программы для расчета комплексных корней квадратного уравнения :?:


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
AZZOT Кидай условие )


 

Member
Статус: Не в сети
Регистрация: 15.04.2007
Откуда: Челябинск №9180
silent_assassin писал(а):
Кидай условие )


написать программу для вычисления и проверки корней квадратного уравнения в действительной и комплексной части, А В С вводится в ручную
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
{
double a,b,c,x1,x2,D,y;
printf("\n Vedite a,b,c ",a,b,c);
scanf("%lf,%lf,%lf",&a,&b,&c);
D=b*b-4*a*c;
if(D==0)
{
 x1=(-b)/(2*a);
 printf("\nOtvet x=%lf",x1);
 y=a*x1*x1+b*x1+c;
 printf("\nProverka proshla uspeshno y=%lf",y);
}
else
 if (D>0)
  {
   x1=(-b+sqrt(b*b-4*a*c))/(2*a);
   x2=(-b-sqrt(b*b-4*a*c))/(2*a);
   printf("\nOtvet x1=%lf i x2=%lf",x1,x2);
   y=a*x1*x1+b*x1+c;
   printf("\nPervii koren' y=%lf",y);
   y=a*x2*x2+b*x2+c;
   printf("\nVtoroi koren' y=%lf",y);
  }
 else
  if (D<0)
   {
   printf ("\nKorni kompleksnii");
   D=-D;
   x1=(-b+sqrt(D))/(2*a);
   x2=(-b-sqrt(D))/( 2*a);
   printf("\nOtvet x1=%lf i x2=%lf",x1,x2);
   y=a*x1*x1-b*x1+c;
   printf ("\nPervii koren' y=%lf",y);
   y=a*x2*x2-b*x2+c;
   printf ("\nVtoroi koren' y=%lf",y);
   }
getche();
}

вот че я пытался наковырять :oops:


Последний раз редактировалось AZZOT 24.09.2012 16:30, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
AZZOT писал(а):
народ, кто поможет с написанием программы для расчета комплексных корней квадратного уравнения

Я бы помог конечно, но сейчас это выглядит как будто куда сложнее вспомнить что это за хрень такая, чем закодить


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
AZZOT Ты понимаешь примерно как должен действовать алгоритм? Если да опиши а то я не въеду.


 

Member
Статус: Не в сети
Регистрация: 15.04.2007
Откуда: Челябинск №9180
так
гугл в помощь
http://fxdx.ru/page/reshenie-kvadratnyh ... nyh-chisel
тут вроде подробно написано, как должно быть, нужно научить этому программку...

Добавлено спустя 1 минуту 9 секунд:
вся загвостка с мнимой единицей.... :oops:
либо надо считать с начало действительную часть потом мнимую, а как их соединить?


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
AZZOT ну первая ошибка в 7-ой строке, её нужно заменить на printf("\nVedite a,b,c ");


 

Member
Статус: Не в сети
Регистрация: 15.04.2007
Откуда: Челябинск №9180
Industrialice писал(а):
AZZOT ну первая ошибка в 7-ой строке, её нужно заменить на printf("\nVedite a,b,c ");

окей, еще соображения?


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
AZZOT писал(а):
окей, еще соображения?

printf("\nVtoroi koren' y=%lf",y); - в таких выводах лучше заменить %lf на %lg - иначе выводится куча хвостовых нулей. Можно и вручную при желании задать точность. Что касается программирования больше ничего особенного не вижу, а математику я попозже посчитаю - не раньше вечера. Корни выводит, правильные они или нет потом посмотрим

Добавлено спустя 28 минут 37 секунд:
Посчитал для случая когда дискриминант больше 0 - всё ок. Ну это было понятно


 

Junior
Статус: Не в сети
Регистрация: 27.12.2010
AZZOT
Если нужно просто найти комплексные корни при D < 0, то надо знать что, например,
sqrt(-9) == sqrt(-1 * 9) == sqrt(-1) * sqrt(9) = i*3

[url=http://ru.wikipedia.org/wiki/Квадратное_уравнение]читать[/url]

тогда
D = -D
(x1 = -b/2a + i(sqrt(D)/2a))
reX1 = -b/2a;
imX1 = sqrt(D)/2a;

(x2 = -b/2a - i(sqrt(D)/2a))
reX2 = -b/2a;
imX2 = -sqrt(D)/2a;
как-то так.

Если надо сделать как по ссылке, то программа даже и близко не верна.
Надо вводить действ. и мнимые части всех коэф. (reA, imA, reB, imB, reC, imC)
Все операции выполнять с этими данными. Результат надо будет всегда вычислять для действительной и для мнимой частей. Извлечение корня из дискрим. будет по алгоритму извл. корня из комплексного числа, деление комплексных чисел и т.д.
В общем геморроя немного поболее :)

Добавлено спустя 32 минуты 56 секунд:
может надо использовать #include <complex> ...


 

Member
Статус: Не в сети
Регистрация: 15.04.2007
Откуда: Челябинск №9180
Proton1927 писал(а):
может надо использовать #include <complex> ...

может быть, вот тут я вообще не вкурсе :oops:


 

Junior
Статус: Не в сети
Регистрация: 27.12.2010
AZZOT класс инкапсулирует весь вышеописанный геморрой с комплексными числами, и решение задачи сводится к вводу данных, простых формул как с обычным уравнением, и выводу re и im ответов.

надо пробовать
help в помощь


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 629 • Страница 30 из 32<  1 ... 27  28  29  30  31  32  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  



Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan