Sardukar
Гость
|
|
« : 11-02-2008 11:37 » |
|
Всем доброго времени суток! Пытаюсь сам научиться программированию, мало, что получается, но ничего )) Вот написал небольшую текстовую игру "Казино" #include <time.h> #include <stdlib.h> #include <stdio.h> #include <conio.h>
void main () { clrscr (); randomize (); int ChisloNaRuletke , DengiIgroka, Stavka, ChisloIgroka, Slognost; char ImyaIgroka; printf ("Vas privetstvuet kazino Cesar"); printf ("\n Predstavtes "); scanf("%c", &ImyaIgroka); printf ("\n Zdravstvuite %c", ImyaIgroka); printf ("\n Viberete uroven slognosti 1.easy 2.medium 3.hard"); scanf ("%i",Slognost); switch (Slognost) { case 1: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 5000"); DengiIgroka=5000; printf ("\n %i",DengiIgroka); break; case 2: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 3000"); DengiIgroka=3000; printf ("\n %i",DengiIgroka); break; case 3: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 1000"); DengiIgroka=1000; printf ("\n %i",DengiIgroka); break; default: printf ("Vvedeno nepravilnoe chislo"); } while (DengiIgroka > 0) {
printf ("\n Delayte stavki gospoda"); printf ("\n"); printf ("\n Kakuyu summu Vi hotite postavit?"); scanf ("%i",&Stavka); printf ("\n"); printf ("\n Na kakoe chislo vi gelaete postavit?"); scanf ("%i",&ChisloIgroka); ChisloNaRuletke=random(30); if (ChisloIgroka==ChisloNaRuletke) { DengiIgroka=DengiIgroka+(Stavka*36); printf ("\n Vasha stavka sigrala"); printf ("\n Vash denegniy balans = %i",DengiIgroka); } else { DengiIgroka=DengiIgroka-Stavka; printf ("\n Vasha stavka ne sigrala"); printf ("\n Vash denegniy balans = %i",DengiIgroka); } }
printf ("\n %c Vi proigrali vse vashi dengi",ImyaIgroka); getch (); }
Вроде считает правильно, а вот сложность (старотовое значение суммы игрока) не меняется. Подскажите в чем ошибка? Еще небольшой вопросик, что бы стать мне неплохим программистом, высшую математику штудировать нужно? И второй, я начал изучать С++, линейное программирование, стоит мне продалжать учить линейное или переходить на объектно-орентированное??
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #1 : 11-02-2008 11:47 » |
|
Sardukar, ООП рулит Ну или хотя бы стремление к нему. Высшую математику штудировать для программирования не надо (ну разве что для личного удовольствия) , если что то когда то понадобится для решения задачи - тот раздел и будешь учить
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #2 : 11-02-2008 12:02 » |
|
думаю у тебя вот здесь ошибка!!!
if (ChisloIgroka==ChisloNaRuletke) { DengiIgroka=DengiIgroka+(Stavka*36); printf ("\n Vasha stavka sigrala"); printf ("\n Vash denegniy balans = %i",DengiIgroka); } else { DengiIgroka=DengiIgroka-Stavka; printf ("\n Vasha stavka ne sigrala"); printf ("\n Vash denegniy balans = %i",DengiIgroka); } }
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sardukar
Гость
|
|
« Ответ #3 : 11-02-2008 12:08 » |
|
Хм..наверное, хотя у меня трабла заключается в следующем. Переменная DengiIgroka при выходе из кода switch (Slognost) { case 1: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 5000"); DengiIgroka=5000; printf ("\n %i",DengiIgroka); break; case 2: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 3000"); DengiIgroka=3000; printf ("\n %i",DengiIgroka); break; case 3: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 1000"); DengiIgroka=1000; printf ("\n %i",DengiIgroka); break; default: printf ("Vvedeno nepravilnoe chislo"); } При любом зачении Slognost принимает значени 256
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #4 : 11-02-2008 12:28 » |
|
char ImyaIgroka; printf ("Vas privetstvuet kazino Cesar"); printf ("\n Predstavtes "); scanf("%c", &ImyaIgroka);
Вот тут char ImyaIgroka - это переменная для 1 символа, и считывается 1 символ: это так и задумывалось? А ошибка - вот она, судя по всему: - должно быть scanf("%i", &Slognost), по идее. У меня DengiIgroka после этой правки принимает нужные значения согласно case-ам.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 11-02-2008 12:34 » |
|
Здесь скорее всего, нужно тоже давать ссылку на переменную. default: printf ("Vvedeno nepravilnoe chislo");
Ну и что, что введено не правильное число. Скорее всего нужно попросить ввести нормальное число. Что то типа такого сделав. do { scanf ("%i", &Slognost); switch (Slognost) { case 1: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 5000"); DengiIgroka=5000; printf ("\n %i",DengiIgroka); break; case 2: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 3000"); DengiIgroka=3000; printf ("\n %i",DengiIgroka); break; case 3: printf ("\n Slognost Easy, vash nachalniy denegniy balans = 1000"); DengiIgroka=1000; printf ("\n %i",DengiIgroka); break; default: printf ("Vvedeno nepravilnoe chislo"); } } while ((Slognost<1) || (Slognost>3));
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #6 : 11-02-2008 12:37 » |
|
Насчет математики, конечно все зубрить не нужно. Но понимать основы и уметь применять их это обязательное условие.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sardukar
Гость
|
|
« Ответ #7 : 11-02-2008 12:45 » |
|
Вад спс, ошибка действительно там )) Черт один символ пропустишь и вся прога не так работает. Вот тут char ImyaIgroka - это переменная для 1 символа, и считывается 1 символ: это так и задумывалось? Нет задумывалось больше. Если ввести больше одного символа в переменной ImyaIgroka то программа сама подставляет значения и "играет". Не подскажете как увеличить разрешаемое количество символов в перменной ImyaIgroka??
|
|
|
Записан
|
|
|
|
Sardukar
Гость
|
|
« Ответ #8 : 11-02-2008 12:48 » |
|
Sardukar, ООП рулит Ну или хотя бы стремление к нему. Тоесть мне смело можно "забить" на структурное и в упор заниматься ООП??
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #9 : 11-02-2008 12:53 » |
|
Не подскажете как увеличить разрешаемое количество символов в перменной ImyaIgroka?? Использовать массив символов. Самый простой вариант (но не самый лучший): char ImyaIgroka[100]; scanf("%s", ImyaIgroka);
Не лучший он потому, что можно ввести больше символов, чем размер массива, и будет порча памяти. PS. Ошибочка была с &ImyaIgroka
|
|
« Последнее редактирование: 11-02-2008 12:58 от Вад »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #10 : 11-02-2008 12:56 » |
|
Тоесть мне смело можно "забить" на структурное и в упор заниматься ООП??
Sardukar, не верный вывод, Так как ООП это дополнение структурного программирования. А не замена. Вот тут char ImyaIgroka - это переменная для 1 символа, и считывается 1 символ: это так и задумывалось? Нет задумывалось больше. Если ввести больше одного символа в переменной ImyaIgroka то программа сама подставляет значения и "играет". Не подскажете как увеличить разрешаемое количество символов в перменной ImyaIgroka?? сделай массив символов char ImyaIgroka[50]; printf ("Vas privetstvuet kazino Cesar"); printf ("\n Predstavtes "); scanf("%s", ImyaIgroka); printf ("\n Zdravstvuite %s", ImyaIgroka);
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sardukar
Гость
|
|
« Ответ #11 : 11-02-2008 13:04 » |
|
Спс большое за советы. Хм...может как-нибудь модернизировать ее, скажем добавить сюда еще и Блэк Джек : Будет правда в Досе, и нужно будет подумать как сделать выбор между рулеткой и "Очком".
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #12 : 11-02-2008 13:07 » |
|
Ну напрашивается две функции. Одна, которая умеет играть в Блек Джек, вторая умеет играть в рулетку. А в функции main просто делаеш выбор между играми. Кстати Правила рулетки слишком простые
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sardukar
Гость
|
|
« Ответ #13 : 11-02-2008 13:16 » |
|
Ну напрашивается две функции. Одна, которая умеет играть в Блек Джек, вторая умеет играть в рулетку. А в функции main просто делаеш выбор между играми. Можно немного подробнее, все таки новичок?? Код я постараюсь найти сам в книгах. Кстати Правила рулетки слишком простые Тоесть добавить?: 1. Красное - Черное 2. Зеро 3. Четное - Нечетное
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #14 : 11-02-2008 13:17 » |
|
Sardukar, код не нужно искать, его нужно писать!!!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sardukar
Гость
|
|
« Ответ #15 : 11-02-2008 13:22 » |
|
Sardukar, код не нужно искать, его нужно писать!!! Я понимаю, но дело в том, что в книгах (во всяком случае те, что есть у меня) совершенно не описываются приемы программирования и даже не все "команды" если можно так выразиться.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #16 : 11-02-2008 13:36 » |
|
Sardukar, приемы описаны много где, какие то у тебя не те книги, а по поводу ВСЕХ "команд" это добро пожаловать в стандарт с++
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #17 : 11-02-2008 13:57 » |
|
Найди нормальный учебник по С++. Сам того не подозревая, ты уже применил функцию. Это main. Она должна быть в единственном экземпляре в проекте. Иначе линковшик просто не с линкует в выполняемый файл и выдаст ошибку. Насчет имен других функций, допустимо но не желательно иметь две функции с одинаковыми именами выполняюшие разные действия. Функции нужны для нескольких целей. Основные это Разделение функциональности и часто повторяемый код.
|
|
« Последнее редактирование: 11-02-2008 13:59 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #18 : 11-02-2008 14:24 » |
|
И второй, я начал изучать С++, линейное программирование, стоит мне продалжать учить линейное или переходить на объектно-орентированное?? Линейное программирование - это вообще из другой оперы. Это, фактически, раздел математики. Структурное программирование. Sardukar, не верный вывод, Так как ООП это дополнение структурного программирования. А не замена. Ни в коем случае. ООП встречается и в чистом виде (тот же Smalltalk, где даже управляющие конструкции типа условий являются по сути объектами). Применительно к C++ - да, лишь дополнение. Итого: используя C++, лучше сначала научиться структурному программированию, а затем переходить к ООП. На некоторых других языках программирования можно учиться наоборот.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sardukar
Гость
|
|
« Ответ #19 : 11-02-2008 14:26 » |
|
Вобще я его изучаю по Страустрап и Либерти. А задачи стрельнул у друзей студентов-программеров. ИМХО проблемы этих книг в том, что они не дают точных определений некоторым важным вещам. Например я знаю, что точно нужно писать int main (), но не описывается, что это такое, какие у нее "характеристики", почему нужно писать return 0, в общем по мелочам )) Сори за терминологию...
|
|
« Последнее редактирование: 11-02-2008 14:35 от Sardukar »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #20 : 11-02-2008 14:35 » |
|
Книга Страуструпа не для начинаюших. Его лучше расматривать как справочник. void main, int main(), int main(int argc, char *argv[]) Это функции, точки входа в программу. Когда линковшик строит программу. Он ишет именно эти функции, чтобы прописать, где находится начало программы. Естественно, точек входа не может быть несколько, а только одна, и как я уже сказал, в проекте должна быть только одна такая функция. Какая именно, зависит только от задачи . return этот оператор возрашает из функции значение. Так уж повелось, что 0 обозначает, что программа выполнилась нормально. Другие значения отличные от нуля, это код ошибки выполнения программы. Поэтому ты и пишеш return 0; из других функций можеш возрашать любое значение, все зависит от спецификации.
|
|
« Последнее редактирование: 11-02-2008 14:43 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
|