Дан массив данных, как доделать программу. что бы работала
А что, как говорил WinMain не получается ?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
1) исправилось, вводится нормально.
А выводом проблеммы.
А при сравнение всё равно ошибка, выводит только 3-и данные, если 2-е данные не соответствуют условию, или 2-е и 3-и данные. если 3-и не
соответствуют условию.
Ерунду выводит.
А выводом проблеммы.
А при сравнение всё равно ошибка, выводит только 3-и данные, если 2-е данные не соответствуют условию, или 2-е и 3-и данные. если 3-и не
соответствуют условию.
Ерунду выводит.
1. Где программишь, в какой среде ? Если в Bulder или VS, то попробуй отключить оптимизацию. Похоже оно слепило 2 цикла в один.
2. Попробуй выводить std::endl вместо "\n".
3. Попробуй заменить одинарные кавычки двойными.
4. После условия в if, поставь "{", а в конце оператора вывода - "}".
2. Попробуй выводить std::endl вместо "\n".
3. Попробуй заменить одинарные кавычки двойными.
4. После условия в if, поставь "{", а в конце оператора вывода - "}".
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Я был уверен, что ты знаешь ISD, если ты из Днепропетровска" писал(а):ISD


Я повторюсь, но оно того стоит. Оптимизация в компиляторе, это чуть-ли не одна из его основных фич. Если эта фича работает некорректно, то от такого компилятора отказываются, либо, если виноваты люди, которые написали кривой код, то код нужно переписывать, а людей, если они продолжают выдавать на гора код с запашком, то увольнять следует таких людей, да и всё. Сборка проекта, сделанная без оптимизации никому не нужна. Сборка без оптимизации - первый признак профессиональной непригодности команды.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Я знаю ISD, но не работал там. У нас, в городе, на тех проектах, что я знаю, оптимизация вырублена. Не знаю как у вас, в Крыму.Romeo писал(а):Я был уверен, что ты знаешь ISD, если ты из ДнепропетровскаТак вот, я работаю именно в ISD
Оптимизация в SoftLabMic врублена по максимуму как на Win в студии, так и на AIX серверах.
Одна из фич оптимизации: раскрытие циклов. Как прикажеш её делать в том примере ?Я повторюсь, но оно того стоит. Оптимизация в компиляторе, это чуть-ли не одна из его основных фич. Если эта фича работает некорректно, то от такого компилятора отказываются, либо, если виноваты люди, которые написали кривой код, то код нужно переписывать, а людей, если они продолжают выдавать на гора код с запашком, то увольнять следует таких людей, да и всё. Сборка проекта, сделанная без оптимизации никому не нужна. Сборка без оптимизации - первый признак профессиональной непригодности команды.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Короче, ладно, хватит флудить. Я наконец-то нашёл время, чтобы разобрать код. Естественно оптимизация здесь не при чём, а виноваты, как обычно, кривые руки программиста 
При работе с потоками STL есть известная рекомендация не смешивать чтение строк через оператор >> и с помощью функции getline. Следует использовать либо только одно, либо только другое. Всё дело в том, что оператор >> прячет от пользователя все переводы кареток, расценивая их, как управляющие символы, то есть он завершает ввод строки, когда встречает перевод каретки. Функция getline тоже читает до перевода каретки (либо до другого делиметра, но в нашем коде дилиметр не указан, значит подразумевается дилиметр '\n'). То есть вроде оба способа учитывают перевод каретки и но вот только дейтсвуют они по разному. Оператор >> при достижении '\n' возвращается, оставляя '\n' в потоке, а getline возвращается, удаляя '\n'. Таким образом, если вызвать сначала оператор >>, то следующий за ним вызов getline проскочит за счёт того, что он увидит первым символом в потоке символ '\n', который был оставлен там оператором, и тут же выйдет, вернув пустую строку.
Самый правильный фикс - перейти целиком на использование оператора >>.
Можно также рассмотреть менее кардинальный способ, который предложил WinMain, то есть после КАЖДОГО вызова оператора >>, насильно забирать из потока перевод каретки. Alex.K, обрати внимание на слово, которое я написал большими буквами. Скорее всего ты сделал забор каретки из потока только в одном месте, в то время, как у тебя в программе встречается два места, где вызывается оператор >>.
Вот работающий код:
Сравнение у тебя написано верно и работает оно также верно, я проверил у себя. Если не работает, то давай конкретный пример данных, на которых это видно. Будем разбирать.
Если у тебя есть сомнения, что оптимизацию тут вообще можно применить, то почему говоришь, что в оптимизации дело? Ведь если её нельзя применить, то её здесь нет
(это вопрос чисто о логике, есть здесь оптимизация на самом деле или нет, это вопрос отдельный)

При работе с потоками STL есть известная рекомендация не смешивать чтение строк через оператор >> и с помощью функции getline. Следует использовать либо только одно, либо только другое. Всё дело в том, что оператор >> прячет от пользователя все переводы кареток, расценивая их, как управляющие символы, то есть он завершает ввод строки, когда встречает перевод каретки. Функция getline тоже читает до перевода каретки (либо до другого делиметра, но в нашем коде дилиметр не указан, значит подразумевается дилиметр '\n'). То есть вроде оба способа учитывают перевод каретки и но вот только дейтсвуют они по разному. Оператор >> при достижении '\n' возвращается, оставляя '\n' в потоке, а getline возвращается, удаляя '\n'. Таким образом, если вызвать сначала оператор >>, то следующий за ним вызов getline проскочит за счёт того, что он увидит первым символом в потоке символ '\n', который был оставлен там оператором, и тут же выйдет, вернув пустую строку.
Самый правильный фикс - перейти целиком на использование оператора >>.
Можно также рассмотреть менее кардинальный способ, который предложил WinMain, то есть после КАЖДОГО вызова оператора >>, насильно забирать из потока перевод каретки. Alex.K, обрати внимание на слово, которое я написал большими буквами. Скорее всего ты сделал забор каретки из потока только в одном месте, в то время, как у тебя в программе встречается два места, где вызывается оператор >>.
Вот работающий код:
Код: Выделить всё
#include <iostream>
using namespace std;
int j, g;
struct Works{
char fio[30];
char adres[30];
int year;
};
int main(){
setlocale(0,"RUS");
const int count = 3;
int data;
char temp[2];
cout<<"Введите дату:";//дата для сравнения
cin>>data;
cin.getline(temp, 2);
Works workers[count];
for (int i = 0; i < count; i++)
{
cout<<"Введите ФИО: ";
cin.getline(workers[i].fio,30);
cout<<"Введите адрес: ";
cin.getline(workers[i].adres,30);
cout<<"Введите дату трудоустройства: ";
cin>>workers[i].year;
cin.getline(temp, 2);
}
for (int i = 0; i < count; i++)
{
if ((data-workers[i].year) >= 5)//сравнение
cout << "\nНе менее 5 лет проработал(а): \n"<< workers[i].fio
<< "\nАдрес: " << workers[i].adres << '\n'
<< "\nДата трудоустройства: " << workers[i].year << '\n'
<< '\n';
}
system("pause");
return 0;
}
Я работаю в Севастополе над теми же проектами, над которыми люди работают в Днепропетровске. У нас нет отдельного проекта. Если говоришь, что знаешь проекты, в которых оптимизация отключена, то название проектов, плиз, в студию. Прямо сейчас зайду и посмотрю в настройках и в билд скриптах." писал(а):Я знаю ISD, но не работал там. У нас, в городе, на тех проектах, что я знаю, оптимизация вырублена. Не знаю как у вас, в Крыму.
Одна из фич оптимизации - её интеллектуальность. Оптимизация делается в нужном месте в нужное время. Если она не может быть применена, то она не делается." писал(а):Одна из фич оптимизации: раскрытие циклов. Как прикажеш её делать в том примере ?
Если у тебя есть сомнения, что оптимизацию тут вообще можно применить, то почему говоришь, что в оптимизации дело? Ведь если её нельзя применить, то её здесь нет

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Среда Microsoft Visual C++ 2008 Express Edition.
отключить оптимизацию
Отлючать JIT-оптимизацию при загрузке модуля(только управляемый код).галочка стоит.
Ещё есть оптимизация кода в Конструкторе Windows Forms там true .
Но это помоему другое
Какую?
Romeo.
Скопировал ваш код.
Ввожу.
дата 062009
ФИО F
адрес ulf
Дата труд. 122001.
далее соот.
i
uli
062003
o
ulo
052008
Выводит 2-е и 3-и данные.
Предложения Airhand проверил,
Набираю как и для вашего кода,
выводит тоже самое.
отключить оптимизацию
Отлючать JIT-оптимизацию при загрузке модуля(только управляемый код).галочка стоит.
Ещё есть оптимизация кода в Конструкторе Windows Forms там true .
Но это помоему другое
Какую?
Romeo.
Скопировал ваш код.
Ввожу.
дата 062009
ФИО F
адрес ulf
Дата труд. 122001.
далее соот.
i
uli
062003
o
ulo
052008
Выводит 2-е и 3-и данные.
Предложения Airhand проверил,
Набираю как и для вашего кода,
выводит тоже самое.
А вы возьмите калькулятор и посчитайте на нем разницу между введенными вами датами. По-моему, результат вполне ожидаем. Либо разделите месяц и год, либо при вычислении разности учитывайте, чем месяц отличается от года. Вы просто находите разность двух целых чисел, и нигде не сказано, что это дата.Alex.K писал(а):выводит тоже самое.
Ваше сравнение будет работать корректно только в том случае, если месяц поступления на работу такой же, как и в data.
Вообще говоря, это неверно. В ISD много тим, и если вы работаете в разных странах или городах над теми же проектами, это ещё не значит, что в одной тиме.Romeo писал(а): Я работаю в Севастополе над теми же проектами, над которыми люди работают в Днепропетровске. У нас нет отдельного проекта. Если говоришь, что знаешь проекты, в которых оптимизация отключена, то название проектов, плиз, в студию. Прямо сейчас зайду и посмотрю в настройках и в билд скриптах.
Покажи где я говорил, что дело в оптимизации. Я говорил, что она МОЖЕТ давать такой результат. Остальное твои фантазии.
Одна из фич оптимизации - её интеллектуальность. Оптимизация делается в нужном месте в нужное время. Если она не может быть применена, то она не делается.
Если у тебя есть сомнения, что оптимизацию тут вообще можно применить, то почему говоришь, что в оптимизации дело? Ведь если её нельзя применить, то её здесь нет(это вопрос чисто о логике, есть здесь оптимизация на самом деле или нет, это вопрос отдельный)
Классная логика, точнее её отсутствие: говоришь без пробелов, а те что между скобкой и "code", скобкой и "cpp" не считаются ?Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
#define while if
Оптимизация по размеру:
#define struct union
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Alex.K, ну так а кто будет рассказывать в каком ты формате хочешь дату иметь? Мы сами не можем догадаться. В коде у тебя вообще написанно year, то есть год. Я туда и вводил просто год и у меня всё работало.
Если хочешь, чтобы число, которое ты ввёл расценивалось не как число, а как некая сложная конструкция, то ты сам должен обеспечить правильное сравнение для чисел подобного рода. Например, если формат у тебя должен быть таким: mmyyyy (две цифры под месяц и четыре под год), то месяц ты можешь получить по формуле date / 1000, а год по формуле date % 1000. Далее делаешь те проверки, которые тебе нужны.

Те же, кто умеют размышлять, сразу должны понять почему я так написал. Всё очень просто. Если бы я написал тэги без пробелов, то они бы были съедены движком форума и пользователи бы увидели лишь отформатированный текст. Для того, чтобы движок не съел тэги и все могли увидеть как правильно эти тэги писать, я поместил в них пробелы, а в конце сообщения указал, что пробелы, на самом деле должны быть удалены. Неужели это не понятно?
Если хочешь, чтобы число, которое ты ввёл расценивалось не как число, а как некая сложная конструкция, то ты сам должен обеспечить правильное сравнение для чисел подобного рода. Например, если формат у тебя должен быть таким: mmyyyy (две цифры под месяц и четыре под год), то месяц ты можешь получить по формуле date / 1000, а год по формуле date % 1000. Далее делаешь те проверки, которые тебе нужны.
Не надо мне рассказывать об устройстве мой фирмы, я лучше его знаю. Я попросил указать название продукта, в котором оптимизация отключена, для того, чтобы я это проверил. В продукте, над которым работает моя тима - это не так. Я могу проверить любой продукт, не только свой, лишь скажи его название." писал(а):Вообще говоря, это неверно. В ISD много тим, и если вы работаете в разных странах или городах над теми же проектами, это ещё не значит, что в одной тиме.
Для недалёких людей естественно логика отсутствует" писал(а):Классная логика, точнее её отсутствие: говоришь без пробелов, а те что между скобкой и "code", скобкой и "cpp" не считаются ?

Те же, кто умеют размышлять, сразу должны понять почему я так написал. Всё очень просто. Если бы я написал тэги без пробелов, то они бы были съедены движком форума и пользователи бы увидели лишь отформатированный текст. Для того, чтобы движок не съел тэги и все могли увидеть как правильно эти тэги писать, я поместил в них пробелы, а в конце сообщения указал, что пробелы, на самом деле должны быть удалены. Неужели это не понятно?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.