Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задание защита чеков. 
:(
    Опции темы
Ice08
Дата 13.6.2008, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.5.2008
Где: Украина

Репутация: нет
Всего: нет



Цитата

(Защита чеков) Компьютеры часто используются в системах выписывания чеков, платежных ведомостей, счетов на оплату. Циркулирует множество странных историй, связанных с ошибочной печатью платежных чеков на суммы свыше 1 миллиона долларов. Роковые счета печатаются компьютерными системами документи-
рования чеков из-за человеческих ошибок или машинных сбоев. Разработчики систем используют встроенный контроль для предотвращения выпуска таких ошибочных чеков.
Другой серьезной проблемой является интенсивная подделка чеков теми, кто намеревается мошеннически получить по ним деньги. Чтобы защитить написанные суммы счета от подделки, большинство компьютерных систем документирования чеков используют технику, называемую защита чеков.
Чеки, спроектированные для печати компьютером, содержат фиксированное количество пробелов, в которых компьютер может напечатать сумму. Предположим, что платежный чек содержит восемь пробелов, в которых компьютер должен напечатать сумму недельной оплаты. Если сумма большая, заполняются все восемь пробелов, например: 1,230.60 (сумма чека)
12345678 (номера позиций)
С другой стороны, если сумма меньше чем 1000 долларов, то несколько пробелов с левой стороны бланка останутся незаполненными. Например, 99.87
12345678
содержит три пустых пробела. Если чек напечатан с пустыми пробелами, сумму чека легко подделать. Чтобы защитить чек от подделки, многие системы документирования чеков вставляют начальные звездочки для защиты счета, как например: ***99.87
12345678
Напишите программу, которая вводит сумму в долларах, которая должна быть напечатана в чеке, и затем печатает ее в защищенном формате с начальными звездочками. Примите, что для печати суммы выделяется девять пробелов.


Мне задание делать не надо просто подскажите мысль как его можно сделать. 


Это сообщение отредактировал(а) Ice08 - 13.6.2008, 10:32
PM WWW   Вверх
fish9370
Дата 13.6.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



для Buildera:

Код

AnsiString szA = "99.87";
szA = szA.StringOfChar('*',9 - szA.Length()) + szA;

// на выходе ****99.87



--------------------
undefined
PM MAIL WWW ICQ   Вверх
Ice08
Дата 13.6.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.5.2008
Где: Украина

Репутация: нет
Всего: нет



А на с++ как это можно сделать?
PM WWW   Вверх
fish9370
Дата 13.6.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(Ice08 @ 13.6.2008,  14:17)
А на с++ как это можно сделать?

это вообще-то C++ Builder..

без использования VCL нужно так:

выделяешь буффер под строку (возьми с запасом), пишешь функцию у которой на входе код символа и количество повторений (аналог StringOfChar()), получаешь число в текстовом формате, определяешь длину этой строки с помощью функции strlen(), вычитаешь из 9 (согласно условию) эту длину, передаешь полученое число в созданую ранее функцию (аналог StringOfChar()), получаешь на выходе нужное количество звездочек в виде строки, прибавляешь с помощью функции strcat() к строке со звездочками строку с числом..

собственно это и было мной ранее реализовано.. ты же просил идею..

Это сообщение отредактировал(а) fish9370 - 13.6.2008, 15:20


--------------------
undefined
PM MAIL WWW ICQ   Вверх
IKM2007
Дата 13.6.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Еще можно так.
Код

#include <iostream.h>
#include <iomanip.h>
void main()
{
double x;
w:
cout<<"Enter x->";
cin>>x;
int y=int(x);
for(int i=0;y>0;y/=10,i++);
if(i>7)//проверка, если число имеет больше 9-и пробелов, снова вводишь
goto w;
i=7-i;
for(;i;i--)
cout<<"*";
cout<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint);
cout<<x<<endl;
}





--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Ice08
Дата 13.6.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.5.2008
Где: Украина

Репутация: нет
Всего: нет



спасибо, а с помощью какой ф-ии переводить числа в символьный тип?

Это сообщение отредактировал(а) Ice08 - 13.6.2008, 20:36
PM WWW   Вверх
jonie
Дата 14.6.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



itoa


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bronislav
Дата 14.6.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Цитата(Ice08 @  13.6.2008,  18:36 Найти цитируемый пост)
спасибо, а с помощью какой ф-ии переводить числа в символьный тип?

Ну можно еще так:
Код

std::ostringstream ss;
int n = 1234;
ss << n;
char *symbolic_n = ss.str().c_str();


Это сообщение отредактировал(а) bronislav - 14.6.2008, 20:14


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
IKM2007
Дата 14.6.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(Ice08 @  13.6.2008,  19:36 Найти цитируемый пост)
спасибо, а с помощью какой ф-ии переводить числа в символьный тип?

Если хочешь переводить числа от 0 до 9, то можно так
Код

char x;
int n=3;
x=n+'0';

И можешь без функции переводить числа в строку.
Так.
Код

char *x;
int n;
cin>>n;
int t=n;
for(int i=0;t>0;t/=10,i++);
x=new char[i];
t=n;
for(int j=i-1;j>=0;j--,n/=10)
x[j]=n%10+'0';
x[i]='\0';




--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
JackYF
Дата 14.6.2008, 21:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(IKM2007 @  14.6.2008,  19:49 Найти цитируемый пост)
И можешь без функции переводить числа в строку.
Так.
char *x;
int n;
cin>>n;
int t=n;
for(int i=0;t>0;t/=10,i++);
x=new char[i];
t=n;
for(int j=i-1;j>=0;j--,n/=10)
x[j]=n%10+'0';
x[i]='\0';

Велосипеды, особенно такого уровня, не очень приветствуются smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Ice08
Дата 14.6.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.5.2008
Где: Украина

Репутация: нет
Всего: нет



Спасибо ребята.
PM WWW   Вверх
fish9370
Дата 15.6.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Код

...
for(int i=0;t>0;t/=10,i++);
x=new char[i];                         // i на выходе из цикла будет неопределен, объявлять нужно вне цикла
...


Цитата(JackYF)

Велосипеды, особенно такого уровня, не очень приветствуются


я бы убил за это, особенно за его форматирование..  smile 

Это сообщение отредактировал(а) fish9370 - 15.6.2008, 13:16


--------------------
undefined
PM MAIL WWW ICQ   Вверх
IKM2007
Дата 15.6.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(fish9370 @  15.6.2008,  13:12 Найти цитируемый пост)
...
for(int i=0;t>0;t/=10,i++);
x=new char[i];                  // i на выходе из цикла будет неопределен, объявлять нужно вне цикла...

Кто сказал?
если бы было так
Код

...
for(;t>0;t/=10)
{
int i=0;

}
          
...

ты был бы прав, Но в данном случае i определен во всем маин-е.

Исправления, особенно такого уровня, не очень приветствуются. smile 

Это сообщение отредактировал(а) IKM2007 - 15.6.2008, 18:06


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
fish9370
Дата 15.6.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 1
Всего: 1



Цитата(IKM2007 @  15.6.2008,  17:53 Найти цитируемый пост)
Кто сказал?


компилятор С++ говорит..

т.е. ты пологаешь, что i

Код

for(int i=0; i<10; i++)
    ;


считается объявленым вне цикла?  smile 

Это сообщение отредактировал(а) fish9370 - 15.6.2008, 18:24


--------------------
undefined
PM MAIL WWW ICQ   Вверх
IKM2007
Дата 15.6.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(fish9370 @  15.6.2008,  18:20 Найти цитируемый пост)
компилятор С++ говорит..

Дает ошибку? У меня Visual Studio 6.0, и никакого намека на ошибку нет.
Какой компилятор используешь?

Цитата(fish9370 @  15.6.2008,  18:20 Найти цитируемый пост)
т.е. ты пологаешь, что 
for(int i=0; i<10; i++)    ;
считается объявленым вне цикла?


Я полагаю, что эти два кода идентичны.

Код

int i;
for(i=0; i<10; i++);


Код

for(int i=0; i<10; i++);

то есть i обьявлен вне цикла. smile 




--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.