Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- namespace Zadacha2
- {
- class Program
- {
- public static string s;
- public static int pos = 0;
- public static char c;
- public static bool correct = true;
- public static char EOS = '\n';
- public static void No()
- {
- Console.WriteLine("NO");
- // File.WriteAllText("OUTPUT.TXT", "NO");
- // correct = false;
- Environment.Exit(0);
- System.Diagnostics.Process.GetCurrentProcess().Kill();
- }
- public static void NextChar()
- {
- if (pos < s.Length)
- {
- c = s[pos];
- pos++;
- }
- else
- {
- c = EOS;
- }
- }
- public static void Number()
- {
- if (c == '1')
- {
- NextChar();
- if ('0' <= c && c <= '9')
- {
- NextChar();
- }
- else
- {
- No();
- }
- while ('0' <= c && c <= '9')
- {
- NextChar();
- }
- }
- else
- {
- if ('2' <= c && c <= '9')
- {
- NextChar();
- while ('0' <= c && c <= '9')
- {
- NextChar();
- }
- }
- else
- {
- No();
- }
- }
- }
- public static string ElementWithIndex()
- {
- string element = "";
- if ('A' <= c && c <= 'Z')
- {
- element += c;
- NextChar();
- }
- else
- {
- No();
- }
- if ('a' <= c && c <= 'z')
- {
- element += c;
- NextChar();
- }
- if ('0' <= c && c <= '9')
- {
- Number();
- }
- return element;
- }
- public static void Formula()
- {
- string prev = ElementWithIndex();
- while (c != EOS)
- {
- string cur = ElementWithIndex();
- if (prev == cur)
- {
- No();
- }
- prev = cur;
- }
- }
- static void Main(string[] args)
- {
- char[] buffer = new char[1000 + 1];
- Console.WriteLine("Запись химической реакции всегда содержит описания нескольких веществ. \n" +
- "В свою очередь, описание одного химического вещества - строка, в которой входящие в него атомы химических элементов \nперечисляются в определенном порядке." +
- "При этом последовательности из двух и более одинаковых атомов, идущих подряд, \n" +
- "группируются: записывается сокращенное название химического элемента и количество одинаковых элементов подряд. \n" +
- "Обозначения химических элементов состоят из одной или двух английских букв, из которых первая - прописная, \nа вторая - строчная. " +
- "Необходимо проверить, является ли заданная последовательность подходящей под описание для \n" +
- "химической формулы выше");
- Console.WriteLine("Входные данные: В единственной строке записана непустая последовательность символов, содержащая только цифры и строчные и прописные английские буквы" +
- "Гарантируется, что в последовательности перед каждой строчной буквой идет прописная, \n"+
- "а все однобуквенные и двухбуквенные подстроки, начинающиеся с прописной буквы - правильные обозначения химических \nэлементов. "+
- "Длина последовательности от 1 до 1000 символов.Выходные данные: “YES” если формула корректна, \n“NO” если формула некорректна.");
- Console.WriteLine("Введите хим.формулу:");
- s = Console.ReadLine();
- //s = File.ReadAllText("INPUT.TXT");
- buffer = s.ToCharArray();
- pos = 0;
- NextChar();
- Formula();
- if (c != EOS)
- {
- No();
- }
- //if (correct == false) File.WriteAllText("OUTPUT.TXT", "NO");
- // else
- //File.WriteAllText("OUTPUT.TXT", "YES");
- Console.WriteLine("YES");
- // if (correct == false) Console.WriteLine("NO");
- //else Console.WriteLine("YES");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement