Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Считывание переменных в цикле

Читайте также:
  1. Агрессор-Жертва-Спасатель наиболее зациклен.
  2. Блоки операторов часто используются для ограничения области действия переменных и просто для улучшения читаемости текста программы.
  3. Взаимоотношение эталонных переменных
  4. ДИФФЕРЕНЦИАЛЬНОЕ ИСЧИСЛЕНИЕ ФУНКЦИЙ МНОГИХ ПЕРЕМЕННЫХ
  5. Достаточные признаки наличия экстремума для функций двух и трех переменных
  6. Зачетное задание №3 Дифференцирование и интегрирование функции нескольких переменных
  7. Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
  8. Модели взаимосвязи зависимых и независимых переменных
  9. Определение функции многих переменных
  10. Определение эталонных переменных

Бывают случаи, когда нам нужно считать много переменных.

Если мы знаем количество переменных, то решение просто — пустить цикл.

  int n; cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i];

Если мы не знаем количество переменных, то для решения этой задачи мы будем использовать while.

Вот сам код:

  int a[1000], n; while (cin >> a[++n]) answer += a[i]; cout << answer << "\n";

Этим while -ом мы будим считывать переменные пока это возможно. Сама программа считывает некоторое количество чисел, попутно записывая их в массив, затем выводит их сумму.

На этом все, спасибо за прочтение. Темой следующего урока будут строки (string).

 

 

C++. Консольная змейка

Опубликовано 23.11.2012 автором admin

Любой начинающий программист мечтает написать игру.

Тем же грезил и я (а может и до сих пор). Конечно написать змейку с красивой 3D (ну хотя бы 2D) графикой у вас не получится, но поиграться в консоли нам не запрещали.

Тем кому лень читать код:

w — вверх

a — влево

s — вниз

d — вправо

пробел — секрет

Вот полностью рабочий код консольной змейки с комментариями:

  # include <iostream> # include <windows.h> # include <time.h> // библиотека, нужна для использования функции Sleep() # include <conio.h> // библиотека, нужна для использования функций kbhit() и getch() using namespace std;char main_color[] = "color ##"; // шаблон для цвета int snake_size, change_x, change_y, coordinates_x[1000], coordinates_y[1000], food_x = -1, food_y = -1; /* snake_size - размер змейки change_x, change_y - в какую сторону движется змейка coordinates_x[1000], coordinates_y[1000] - массивы, хранящие координаты частей тела змейки food_x, food_y - координаты еды PS: координаты головы змейки хранятся в coordinates_x[1], coordinates_y[1] */ char symbol, a[1000][1000]; /* symbol - хранит в себе ASCII код нажатой клавиши a[1000][1000] - наша таблица, в которой происходит вся игра */ const int N = 13, M = 17, INTERVAL = 200; /* константы, N - размер таблицы, а именно высота M - ширина таблицы INTERVAL - интервал в миллисекундах, через каждый этот промежуток времени змейка будет передвигаться */ void change_color() // функция изменения цвета консоли { char x = rand() % 16, y = rand() % 16; if (x == y) ++y; y %= 16; if (x > 9) x += 'A' - 10; else x += '0'; if (y > 9) y += 'A' - 10; else y += '0'; // выбираем рандомные цвета main_color[6] = x; main_color[7] = y; system(main_color); // меняем цвет } void change_direction() // функция, считывающая нажатую клавишу { symbol = getch(); // считываем нажатую клавишу с помощью функции getch() switch (symbol) { case 'w': if(change_x!= 1 || change_y!= 0) { change_x = -1; change_y = 0; } break; case 'a': if(change_x!= 0 || change_y!= 1) { change_x = 0; change_y = -1; } break; case 's': if(change_x!= -1 || change_y!= 0) { change_x = 1; change_y = 0; } break; case 'd': if(change_x!= 0 || change_y!= -1) { change_x = 0; change_y = 1; } break; // управление змейкой у нас через wasd case 32: change_color(); break; // если нажат пробел, то меняем цвет консоли default: break; } } void show_table() // функция для вывода таблицы { system("cls"); // очищаем консоль for (int i = 0; i <= N + 1; ++i) for (int j = 0; j <= M + 1; ++j) cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1? '#': a[i][j]) << (j <= M? "": "\n"); // выводим таблицу и края } void clear_snake_on_table() // очищаем координаты, в которых располагалась змейка { for (int i = 1; i <= snake_size; ++i) a[coordinates_x[i]][coordinates_y[i]] = ' '; } void show_snake_on_table() // красим координаты змейки { if(change_x == 1 && change_y == 0) a[coordinates_x[1]][coordinates_y[1]] = 'v'; if(change_x == -1 && change_y == 0) a[coordinates_x[1]][coordinates_y[1]] = '^'; if(change_x == 0 && change_y == 1) a[coordinates_x[1]][coordinates_y[1]] = '>'; if(change_x == 0 && change_y == -1) a[coordinates_x[1]][coordinates_y[1]] = '<'; // изменяем тип головы   for (int i = 2; i <= snake_size; ++i) a[coordinates_x[i]][coordinates_y[i]] = '@'; // красим змейку } bool game_over() // проверяем, съела ли змейка саму себя { for (int i = 2; i <= snake_size; ++i) if (coordinates_x[1] == coordinates_x[i] && coordinates_y[1] == coordinates_y[i]) return true; // если координаты головы змейки равны координате какой-либо части тела змейки, то змейка съела саму себя return false; // если все координаты различны, то все в порядке - играем дальше } void check_coordinates() // проверяем, не вышла ли змейка за поле, если да то возвращаем ее обратно { if (coordinates_x[1] > N) coordinates_x[1] = 1; if (coordinates_x[1] < 1) coordinates_x[1] = N; if (coordinates_y[1] > M) coordinates_y[1] = 1; if (coordinates_y[1] < 1) coordinates_y[1] = M; } void next_step() // функция следующего хода, в которой наша змейка сдвигается в сторону на 1 ячейку { clear_snake_on_table(); // чистим таблицу от змейки   for (int i = snake_size; i >= 2; --i) { coordinates_x[i] = coordinates_x[i - 1]; coordinates_y[i] = coordinates_y[i - 1]; } // передвигаем тело змейки   coordinates_x[1] += change_x; coordinates_y[1] += change_y; // передвигаем голову змейки   check_coordinates(); // проверяем в порядке ли координаты   if(coordinates_x[1] == food_x && coordinates_y[1] == food_y) { snake_size++; food_x = -1; food_y = -1; } // если голова змейки там же где и еда, то увеличиваем размер змейки и очищаем координаты змейки   show_snake_on_table(); // рисуем змейку   if (game_over() == true) // если змея укусила себя { cout << "You're looser! \n"; // сообщаем всю правду о игроке system("pause"); // приостанавливаем игру exit(0); // завершаем программу } } bool food_check() // функция проверки на наличие еды на карте { if(food_x == -1 && food_y == -1) return false; // если координаты еды неопределенны то возвращаем true return true; // в остальных случаях false } void place_food() // функция добавления еды на карту { srand(time(NULL)); for (int i = 1; i <= 9; ++i) { int x = rand(), y = rand(); if(x < 0) x *= -1; if(y < 0) y *= -1; x %= (N + 1); y %= (M + 1); if(x == 0) ++x; if(y == 0) ++y; if(a[x][y]!= '@' && a[x][y]!= 'v' && a[x][y]!= '^' && a[x][y]!= '<' && a[x][y]!= '>') { food_x = x; food_y = y; a[x][y] = '+'; return; } } // ставим в рандомное место еду } void standart_settings() // начальные установки { snake_size = 2; // размер змеи - 2   coordinates_x[1] = 1; coordinates_y[1] = 2; coordinates_x[2] = 1; coordinates_y[2] = 1; // змейка занимает две клетки вправо от координаты {1,1}   change_x = 0; change_y = 1; // змейка движется вправо } int main () { standart_settings(); // задаем стандартные настройки   while (1) // бесконечный цикл { if (kbhit() == true) // если нажата клавиша change_direction(); // обрабатываем нажатую клавишу   next_step(); // двигаем змейку   if(food_check() == false) place_food(); // если нет еды, то ставим ее   show_table(); // рисуем змейку   Sleep(INTERVAL); // "усыпляем" программу на заданный интервал } }

Текущая версия — 1.1

Обновления:

§ 1.0: реализовано движение змейки

§ 1.1: теперь появляется еда, которая увеличивает размер змейки, также можно менять цвет консоли

§ 1.2: обновлена функция random, теперь появление еды менее предсказуемо.

§ 1.3: обновлена реализация изменения цвета

Код будет улучшаться, а статья обновляться. Все писалось и компилировалось в Dev-C++. Надеюсь было интересно, спасибо за внимание!

 

 

С++. Тренировка набора на клавиатуре

Опубликовано 10.11.2012 автором admin

Всем привет))) Сегодня решил выложить код программы для обучения быстрому набору на клавиатуре. Тут все просто, объяснять ничего не буду, только выложу скриншот работы (кстати программа консольная;)). Все компилируется в Dev-C++.

Вот скриншот (на фоне кода ):

Теперь выложу код:

  #include<iostream> #include<windows.h> #include<string> #include<time.h> using namespace std; void divide() { cout<<"*-===========-*\n"; //строка для разделения } void after_game() { cout<<"-===********************************===-\n"; //строка для разделения (после игры) } main() { system("color 2F"); cout<<"Powered by Huzin Ruslan Copyright 2011, Inc. All rights reserved.\n"; Sleep(300); cout<<"Loading"; Sleep(500); for(int i=0; i<6; ++i) { cout<<"."; Sleep(500); } cout<<".\n"; cout<<" \n"; Sleep(1000); system("color 20"); system("cls"); start:; system("color 20"); system("title *==Fast_Writer==*"); string name; cout<<"Enter your name:\n"; cin>>name; string surname; cout<<"Enter your surname:\n"; cin>>surname; int word; sta:; system("color 20"); system("title *==Fast_Writer==*"); cout<<"How many words do you want to write?\n"; cin>>word; cout<<"************************\n"; int c=0,f=0,t=0; float duration,total=0,raiting=0; clock_t start,finish; string s[60]={"mother","form","pen","file","ok","phone","father","school","books","shoulder", "informatics","turkish","that","words","write","sister","car","notebook","pencils","house", "computer","socks","socket","netsend","samfile","profile", "hello","these","football","formula","chemistry","power","modem", "call","formation","information","horse","age","those","films","able", "time","rand","clock","read","memory","lyceum","english", "sea","think","mathematics","direct","connection","splitter","desk", "marker","paintball","paint","ball","ring"};//Массив слов(надо добавлять новые) Sleep(200); for(int i=1; i<=3; ++i) { Sleep(600); cout<<i<<endl; } Sleep(600); cout<<"GO\n"; Sleep(300); srand(word);   /*Основной цикл программы, производится вывод слова, сравнение и т.д.*/   for(int i=0; i<word; i++) { cout<<"---------------------\n"; string y=s[0+rand()%60]; cout<<"("<<i+1<<")"<<" "<<y<<"\n"; //вывод слова(рандомно) string m; start=clock(); cout<<" "<<" "<<" "<<" "; cin>>m; finish=clock(); duration=(float)(finish-start)/1000; total=(float)total+duration; if(duration>5){divide();cout<<"Time is up!!!\n";t++;goto next;}; divide(); if(m==y)cout<<"Correct\n",c++;else cout<<"False\a\n",f++; divide(); next: cout<<duration<<"\n"; Sleep(400); }   /*подсчет рейтинга, вывод результатов*/ system("color 30"); after_game(); cout<<" \n"; cout<<"Total time is: "<<total<<endl; cout<<" \n"; after_game(); cout<<" \n"; cout<<"You have "<<c<<" correct and "<<f<<" false answers\n"; cout<<" \n"; after_game(); cout<<" \n"; cout<<"And you didn`t write in time "<<t<<" answer(s)\n"; cout<<" \n"; after_game(); cout<<" \n"; raiting=(float)(word*c)/total+(f*t); cout<<"YOUR RAITING IS: "<<raiting<<endl; cout<<" \n"; after_game(); cout<<" \n"; cout<<" \n"; cout<<" \n"; cout<<"Exit(e)? If you want to continue write 'no'...\n"; exit: string q; cin>>q; if(q=="no") { system("cls"); goto sta; } while(q!="e") { goto exit; } return 0; }

Ну и конечно же сам exe-шник))).

Вроде все, сегодня ничего нового. Кстати, сейчас пишу чат, в котором будут вкладки для общения с пользователями и т.д. Вообщем что-то похожее на mail.ru агент. Ну конечно далеко до него но все же) Следите за блогом, добавляйте в закладки, как допишу так выкладу цикл статей как писать такого рода чаты(это не просто чат;))

Ладно вроде все)

 

 

C++. Персистентный стек

Опубликовано 23.10.2012 автором admin

В этой статье я хочу рассказать про персистентность, и самую легкую программу которую можно написать используя персистентность.
В нашем случае персистентность будет хранить предыдущую информацию не «злоупотребляя» памятью.

Персистентный стек. (Если вы не знаете структуру данных стек, то предлагаю для начала изучить её.)

Изначально будем хранить массив из чисел. В простом массиве числа идут друг за другом, но в нашем случае мы будем подвешивать ячейки
массива друг к другу.


Ниже приведен рисунок:


В этом коде подробно приведена реализация (C++):




Дата добавления: 2015-09-10; просмотров: 83 | Поможем написать вашу работу | Нарушение авторских прав

Какую IDE(Среду разработки) выбрать? | Логическая переменная — bool | Спасибо, до скорого! | Побитовые операции, подробнее о них здесь. | Первый индекс - это длина таблицы, второй - высота. | Создание функции. | ПОДЕЛИТЬСЯ В СОЦ. СЕТЯХ | A, abcdefg, abscissa, b, bbb, bbbbb, bulvar, bulvara, grajdanstvo, zub, zubnoy. | Структуры данных. Стек |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав