Программирование - это просто
Advertisement
Главная arrow C#, Delphi, VB, F#, Web и пр. arrow Уроки Visual C++ arrow Microsoft visual c++ 2008. Урок 7. Считаем количество строк и слов в символьном файле (while, else)
16.06.2019 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Microsoft visual c++ 2008. Урок 7. Считаем количество строк и слов в символьном файле (while, else) Печать E-mail
Автор megabax   
31.08.2010 г.
New Page 1

Microsoft visual c++ 2008. Урок 7. Считаем количество строк и слов в символьном файле (while, else, конечный автомат).

И так, продолжим изучение Visaul C++. Сегодня мы напишем программу подсчета числа строк в файле, вводимо со стандартного устройства ввода-вывода (клавиатуры):

#include "stdafx.h"
#include <conio.h> //Для _getch()
#include <stdio.h> //Для getchar()
#define eof -1


int _tmain(int argc, _TCHAR* argv[])
{
       int c,nl;
       printf("Input string and press the key <ENTER>\n");
       nl=0;
       while((c=getchar())!=eof) if (c=='\n') nl++;
       printf("Strings is count: %d\n",nl);
       printf("Press any key to continue");
      _getch();
      return 0;
}

Вот скриншот работы данной программы:

Microsoft visual c++ 2008. Урок 7. Считаем количество строк и слов в символьном файле (while, else, конечный автомат).

А теперь попробуем сосчитать слова. Вот текст этой программы:

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#define eof -1
#define yes 1
#define no 0


int _tmain(int argc, _TCHAR* argv[])
{
    int c; //для ввод символа
    int nw; //счетчик слов
    int in; //флажок, показывающий, находиться ли программа внутри слова или нет
    nw=0;
    in=no;
    printf("Input string and press <ENTER>\n");
    while((c=getchar())!=eof) {

       //Если нажали пробел, enter или табуляцю - мы вне слова,
       if(c==' '||c=='\n'||c=='\t') in=no; else if (in==no) {

           //но если нажали другую кнопку, а мы были вне слова - то теперь мы в слове и нам надо его сосчитать
           in=yes;
           nw++;
       }
    };
    printf("Words: %d\n",nw);
    printf("Press any key to continue");
    _getch();
    return 0;
}

Работает она очень просто: в зависимости от текущего символа переходит в одно из состояний: внутри слова или вне его.  Если находит символ разделителя слов (пробел, табуляция, или символ конца строки), переходит в состояние "не в слове" (переменная in равна значению no), в остальных случаях программа принимает состояние "в слове" (переменная in равна yes). При смене состояния с из "не в слове" в состояние "в слове" счетчик слов увеличиваем на единицу.

Такой принцип работы получил название конечный автомат. Суть принципа конечного автомата состоит в том, что система в зависимости от каких либо условий меняет свои состояния, которые влияют на работу самой системы.

Символ "||" встречающийся в данной программе означает оператор "ИЛИ". Тоесть, в строке

      if(c==' '||c=='\n'||c=='\t') in=no; else if (in==no) {

условие оператора if выполниться тогда, когда переменная c будет иметь хотя бы одно из перечисленных значений: "пробел", "символ конца строки" или "символ табуляции".

Вот скриншот работы этой программы:

Microsoft visual c++ 2008. Урок 7. Считаем количество строк и слов в символьном файле (while, else, конечный автомат).

 

Последнее обновление ( 12.02.2014 г. )
 
« След.   Пред. »
 
© 2019 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше