Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Прошу небольшой совет.  (Прочитано 17617 раз)
0 Пользователей и 1 Гость смотрят эту тему.
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 ();
}

Вроде считает правильно, а вот сложность (старотовое значение суммы игрока) не меняется. Подскажите в чем ошибка? Еще небольшой вопросик, что бы стать мне неплохим программистом, высшую математику штудировать нужно? И второй, я начал изучать С++, линейное программирование, стоит мне продалжать учить линейное или переходить на объектно-орентированное??
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 11-02-2008 11:47 » 

Sardukar, ООП рулит Улыбаюсь Ну или хотя бы стремление к нему.  Высшую математику штудировать для программирования не надо (ну разве что для личного удовольствия) , если что то когда то понадобится для решения задачи - тот раздел и будешь учить
Записан

McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #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 Жаль
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #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);
- должно быть scanf("%i", &Slognost), по идее.
У меня DengiIgroka после этой правки принимает нужные значения согласно case-ам.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 11-02-2008 12:34 » 

Код:
  scanf ("%i",Slognost);
Здесь скорее всего, нужно тоже давать ссылку на переменную.
Код:
  scanf ("%i", &Slognost);
Код:
        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
Спокойный
Администратор

il
Offline 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, ООП рулит  Ну или хотя бы стремление к нему.
Тоесть мне смело можно "забить" на структурное и в упор заниматься ООП??
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-02-2008 12:53 » 

Цитата
Не подскажете как увеличить разрешаемое количество символов в перменной ImyaIgroka??
Использовать массив символов.
Самый простой вариант (но не самый лучший):
Код:
char ImyaIgroka[100];
scanf("%s", ImyaIgroka);
Не лучший он потому, что можно ввести больше символов, чем размер массива, и будет порча памяти.
PS. Ошибочка была с &ImyaIgroka
« Последнее редактирование: 11-02-2008 12:58 от Вад » Записан
Finch
Спокойный
Администратор

il
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 11-02-2008 13:07 » 

Ну напрашивается две функции. Одна, которая умеет играть в Блек Джек, вторая умеет играть в рулетку. А в функции main просто делаеш выбор между играми.

Кстати Правила рулетки слишком простые Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sardukar
Гость
« Ответ #13 : 11-02-2008 13:16 » 

Цитата
Ну напрашивается две функции. Одна, которая умеет играть в Блек Джек, вторая умеет играть в рулетку. А в функции main просто делаеш выбор между играми.
Можно немного подробнее, все таки новичок?? Код я постараюсь найти сам в книгах.
Цитата
Кстати Правила рулетки слишком простые
Тоесть добавить?:
1. Красное - Черное
2. Зеро
3. Четное - Нечетное
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #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
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #16 : 11-02-2008 13:36 » 

Sardukar, приемы описаны много где, какие то у тебя не те книги, а по поводу ВСЕХ "команд" Улыбаюсь это добро пожаловать в стандарт с++
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 11-02-2008 13:57 » 

Найди нормальный учебник по С++.  Сам того не подозревая, ты уже применил функцию. Это main. Она должна быть в единственном экземпляре в проекте. Иначе линковшик просто не с линкует в выполняемый файл и выдаст ошибку. Насчет имен других функций, допустимо но не желательно иметь две функции с одинаковыми именами выполняюшие разные действия.
Функции нужны для нескольких целей. Основные это Разделение функциональности и часто повторяемый код.
« Последнее редактирование: 11-02-2008 13:59 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 11-02-2008 14:24 » 

Цитата: Sardukar
И второй, я начал изучать С++, линейное программирование, стоит мне продалжать учить линейное или переходить на объектно-орентированное??
Линейное программирование - это вообще из другой оперы. Это, фактически, раздел математики. Структурное программирование.

Цитата: Finch
Sardukar, не верный вывод, Так как ООП это дополнение структурного программирования. А не замена.
Ни в коем случае. ООП встречается и в чистом виде (тот же Smalltalk, где даже управляющие конструкции типа условий являются по сути объектами). Применительно к C++ - да, лишь дополнение.

Итого: используя C++, лучше сначала научиться структурному программированию, а затем переходить к ООП. На некоторых других языках программирования можно учиться наоборот.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sardukar
Гость
« Ответ #19 : 11-02-2008 14:26 » 

Вобще я его изучаю по Страустрап и Либерти. А задачи стрельнул у друзей студентов-программеров. ИМХО проблемы этих книг в том, что они не дают точных определений некоторым важным вещам. Например я знаю, что точно нужно писать int main (), но не описывается, что это такое, какие у нее "характеристики", почему нужно писать return 0, в общем по мелочам )) Сори за терминологию...
« Последнее редактирование: 11-02-2008 14:35 от Sardukar » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #20 : 11-02-2008 14:35 » new

Книга Страуструпа не для начинаюших. Его лучше расматривать как справочник.

void main, int main(), int main(int argc, char *argv[]) Это функции, точки входа в программу. Когда линковшик строит программу. Он ишет именно эти функции, чтобы прописать, где находится начало программы. Естественно, точек входа не может быть несколько, а только одна, и как я уже сказал,  в проекте должна быть только одна такая функция. Какая именно, зависит только от задачи Улыбаюсь. return этот оператор возрашает из функции значение. Так уж повелось, что 0 обозначает, что программа выполнилась нормально. Другие значения отличные от нуля, это код ошибки выполнения программы. Поэтому ты и пишеш return 0; из других функций можеш возрашать любое значение, все зависит от спецификации.
« Последнее редактирование: 11-02-2008 14:43 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines