В самостоятельном обучении программированию такое задание: нужно записать программу, которая считает и последовательно выводит на экран значения математических выражений:
-8 разделить на -4
остаток от деления 100 на 3.
Первый день обучения с 0, не могу понять что неправильно. Вот мой вариант:
// BEGIN (write your solution here)
Ошибки я смотрела, но пока ничего в том описании понять не могу.
в избранное
alexm12 [258K]
а кто вам сказал что код на С++? — более года назад
ЕвгенийКХ [2.5K]
Это же код на php если я не ошибаюсь — более года назад
комментировать
Евген ийКХ [2.5K]
более года назад
Вообще у вас код на php код на с++ должен выглядеть примерно так
include
include //»подключение» библиотеки cmath, чтобы возвести число в степень функцией pow(иначе придется делать цикл)
using namespace std; //»подключение» библиотеки std, чтобы использовать вывод на экран через cout
автор вопроса выбрал этот ответ лучшим
комментировать
в избранное ссылка отблагодарить
inkas ta [17.2K]
более года назад
Как правильно сделать озвучку для видео? Как качественно записать голос?
Да, все правы). Я изучаю на Хекслет php-основы программирования. Это бесплатный курс для самостоятельного обучения. Начинаю с абсолютного нуля). Плохо еще понимаю термины и различия. Но пришла туда для изучения языка С++. Мне дали задание.
В общем, задание я смогла пройти . Просто в скобках между ними и значениями нужны были пробелы. В моем примере их нет. И в первом примере пропущен знак возведения в степень (2 звездочки, у меня — одна). Правильно это выглядит так:
// BEGIN (write your solution here)
Источник: www.bolshoyvopros.ru
Распространенные соглашения о написании кода на C#
Соглашения о написании кода предназначены для реализации следующих целей.
- Создание согласованного вида кода, позволяющего читателям сосредоточиться на содержимом, а не на структуре.
- Предоставление читателям возможности делать предположения, основанные на опыте, и поэтому быстрее понимать код.
- Упрощение процессов копирования, изменения и обслуживания кода.
- Предоставление лучших методик C#.
Майкрософт использует приведенные в этой статье рекомендации для разработки примеров и документации. Они были приняты в соответствии со средой выполнения .NET и рекомендациями по стилю программирования на C# . Их можно использовать или адаптировать в соответствии со своими потребностями. Они должны быть примером общих соглашений C#, а не заслуживающим доверия списком (см. руководство по проектированию платформы ). Основными целями являются согласованность и удобочитаемость в проекте, команде, организации или исходном коде компании.
Соглашения об именах
Существует несколько соглашений об именовании, которые следует учитывать при написании кода C#.
5 ОШИБОК при ЗАПИСИ голоса звука
В следующих примерах любое из рекомендаций, относящихся к помеченным public элементам, также применимо при работе с protected элементами и protected internal , которые должны быть видны внешним вызывающим элементам.
Регистр Pascal
Используйте регистр pascal («PascalCasing») при именовании class , record или struct .
public class DataService
public record PhysicalAddress( string Street, string City, string StateOrProvince, string ZipCode);
public struct ValueCoordinate
При именовании interface используйте регистр pascal в дополнение к префиксу имени I . Это явно указывает потребителям, что это . interface
public interface IWorkerQueue
При именовании public элементов типов, таких как поля, свойства, события, методы и локальные функции, используйте регистр pascal.
public class ExampleEvents < // A public field, these should be used sparingly public bool IsValid; // An init-only property public IWorkerQueue WorkerQueue < get; init; >// An event public event Action EventProcessing; // Method public void StartEventProcessing() < // Local function static int CountQueueItems() =>WorkerQueue.Count; // . > >
При записи позиционных записей используйте регистр pascal для параметров, так как они служат общедоступными свойствами записи.
public record PhysicalAddress( string Street, string City, string StateOrProvince, string ZipCode);
Дополнительные сведения о позиционных записях см. в разделе Позиционный синтаксис для определения свойства.
Дело верблюда
Используйте верблюдовый регистр («camelCasing») при именовании private internal полей и добавьте к ним _ префикс .
public class DataService
При редактировании кода C#, который следует этим соглашениям об именовании, в интегрированной среде разработки, поддерживающей завершение инструкций, при _ вводе отображаются все члены с областью объекта.
При работе с полями static , которые являются private или internal , используйте s_ префикс , а для потока статический используйте t_ .
public class DataService
При написании параметров метода используйте верблюдьи регистры.
public T SomeMethod(int someNumber, bool isValid)
Дополнительные сведения о соглашениях об именовании C# см. в статье Стиль программирования C#.
Дополнительные соглашения об именовании
- В примерах, которые не включают директивы using, используются квалификации пространства имен. Если известно, что пространство имен импортируется в проект по умолчанию, вам не нужно указывать полные имена из этого пространства имен. Полные имена, если они слишком длинные для одной строки, можно разбить после точки (.), как показано в следующем примере.
var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory();
Соглашения о макете
Чтобы выделить структуру кода и облегчить чтение кода, в хорошем макете используется форматирование. Примеры и образцы корпорации Майкрософт соответствуют следующим соглашениям.
- Использование параметров редактора кода по умолчанию (логичные отступы, отступы по четыре символа, использование пробелов для табуляции). Дополнительные сведения см. в разделе «Параметры», «Текстовый редактор», C#, «Форматирование».
- Запись только одного оператора в строке.
- Запись только одного объявления в строке.
- Если отступ для дополнительных строк не ставится автоматически, необходимо сделать для них отступ на одну позицию табуляции (четыре пробела).
- Добавление по крайней мере одной пустой строки между определениями методов и свойств.
- Использование скобок для ясности предложений в выражениях, как показано в следующем коде.
if ((val1 > val2) (val1 > val3)) < // Take appropriate action. >
Размещение директив using за пределами объявления пространства имен
Если директива using находится за пределами объявления пространства имен, импортированное пространство имен является его полным именем. Это более ясно.
Если директива using находится внутри пространства имен, она может быть либо относительно этого пространства имен, либо иметь полное имя. Это неоднозначно.
using Azure; namespace CoolStuff.AwesomeFeature < public class Awesome < public void Stuff() < WaitUntil wait = WaitUntil.Completed; … >> >
Предполагается, что на класс имеется ссылка (прямая или непрямая).WaitUntil
Теперь давайте немного изменим его:
namespace CoolStuff.AwesomeFeature < using Azure; public class Awesome < public void Stuff() < WaitUntil wait = WaitUntil.Completed; … >> >
И он компилируется сегодня. И завтра. Но когда-то на следующей неделе этот (нетронутый) код завершается сбоем с двумя ошибками:
— error CS0246: The type or namespace name ‘WaitUntil’ could not be found (are you missing a using directive or an assembly reference?) — error CS0103: The name ‘WaitUntil’ does not exist in the current context
Одна из зависимостей ввела этот класс в пространство имен, а затем заканчивается на .Azure :
namespace CoolStuff.Azure < public class SecretsManagement < public string FetchFromKeyVault(string vaultId, string secretId) < return null; >> >
Директива, размещенная using в пространстве имен, учитывает контекст и усложняет разрешение имен. В этом примере это первое найденное пространство имен.
- CoolStuff.AwesomeFeature.Azure
- CoolStuff.Azure
- Azure
Добавление нового пространства имен, соответствующего или CoolStuff.Azure CoolStuff.AwesomeFeature.Azure соответствующего глобальному Azure пространству имен. Его можно устранить, добавив модификатор global:: в using объявление. Однако вместо этого проще размещать using объявления за пределами пространства имен.
namespace CoolStuff.AwesomeFeature < using global::Azure; public class Awesome < public void Stuff() < WaitUntil wait = WaitUntil.Completed; … >> >
Соглашения о комментариях
- Комментарий размещается на отдельной строке, а не в конце строки кода.
- Текст комментария начинается с заглавной буквы.
- Текст комментария завершается точкой.
- Между разделителем комментария (/ /) и текстом комментария вставляется один пробел, как показано в следующем примере.
// The following declaration creates a query. It does not run // the query.
Рекомендации по использованию языка
В следующих подразделах описаны методики, которыми руководствуется команда C# для подготовки примеров и образцов кода.
Строковый тип данных
- Для сцепления коротких строк рекомендуется использовать интерполяцию строк, как показано в следующем коде.
string displayName = $», «;
var phrase = «lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala»; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) < manyPhrases.Append(phrase); >//Console.WriteLine(«tra» + manyPhrases);
Неявно типизированные локальные переменные
- В случаях, когда тип переменной понятен из правой части назначения или когда точный тип не важен, рекомендуется использовать неявное типизирование для локальных переменных.
var var1 = «This is clearly a string.»; var var2 = 27;
int var3 = Convert.ToInt32(Console.ReadLine()); int var4 = ExampleClass.ResultSoFar();
var inputInt = Console.ReadLine(); Console.WriteLine(inputInt);
var phrase = «lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala»; var manyPhrases = new StringBuilder(); for (var i = 0; i < 10000; i++) < manyPhrases.Append(phrase); >//Console.WriteLine(«tra» + manyPhrases);
foreach (char ch in laugh) < if (ch == ‘h’) Console.Write(«H»); else Console.Write(ch); >Console.WriteLine();
Примечание Следите за тем, чтобы случайно не изменить тип элемента итерируемой коллекции. Например, можно легко переключиться с System.Linq.IQueryable на System.Collections.IEnumerable в инструкции foreach , изменяющей выполнение запроса.
Беззнаковые типы данных
Как правило, рекомендуется использовать int вместо беззнаковых типов. В C# обычно используется int . Использование int упрощает взаимодействие с другими библиотеками.
Массивы
При инициализации массивов в строке объявления рекомендуется использовать сокращенный синтаксис. В следующем примере видно, что var нельзя использовать вместо string[] .
string[] vowels1 = < «a», «e», «i», «o», «u» >;
Если экземпляр создается явно, можно использовать var .
var vowels2 = new string[] < «a», «e», «i», «o», «u» >;
Делегаты
Используйте Func<> и Action<> вместо определения типов делегатов. В классе определите метод делегата.
public static Action ActionExample1 = x => Console.WriteLine($»x is: «); public static Action ActionExample2 = (x, y) => Console.WriteLine($»x is: , y is «); public static Func FuncExample1 = x => Convert.ToInt32(x); public static Func FuncExample2 = (x, y) => x + y;
Вызывайте метод с помощью сигнатуры, которую определяет делегат Func<> или Action<> .
ActionExample1(«string for x»); ActionExample2(«string for x», «string for y»); Console.WriteLine($»The value is «); Console.WriteLine($»The sum is «);
Если вы создаете экземпляры типа делегата, используйте сокращенный синтаксис. В классе определите тип делегата и метод с соответствующей сигнатурой.
public delegate void Del(string message); public static void DelMethod(string str) < Console.WriteLine(«DelMethod argument: «, str); >
Создайте экземпляр типа делегата и вызовите его. В следующем объявлении используется сокращенный синтаксис.
Del exampleDel2 = DelMethod; exampleDel2(«Hey»);
В следующем объявлении используется полный синтаксис.
Del exampleDel1 = new Del(DelMethod); exampleDel1(«Hey»);
Операторы try-catch и using при обработке исключений
- Рекомендуется использовать оператор try-catch для обработки большей части исключений.
static string GetValueFromArray(string[] array, int index) < try < return array[index]; >catch (System.IndexOutOfRangeException ex) < Console.WriteLine(«Index is out of range: «, index); throw; > >
Font font1 = new Font(«Arial», 10.0f); try < byte charset = font1.GdiCharSet; >finally < if (font1 != null) < ((IDisposable)font1).Dispose(); >>
То же самое можно сделать с помощью оператора using .
using (Font font2 = new Font(«Arial», 10.0f))
Используйте новый using синтаксис , который не требует фигурных скобок:
using Font font3 = new Font(«Arial», 10.0f); byte charset3 = font3.GdiCharSet;
Операторы и ||
Чтобы избежать возникновения исключений и увеличить производительность за счет пропуска необязательных сравнений, используйте вместо Enter a dividend: «); int dividend = Convert.ToInt32(Console.ReadLine()); Console.Write(«Enter a divisor: «); int divisor = Convert.ToInt32(Console.ReadLine()); if ((divisor != 0) (dividend / divisor > 0)) < Console.WriteLine(«Quotient: «, dividend / divisor); > else
Если делитель равен нулю, второе условие в операторе if вызовет ошибку времени выполнения. Но оператор замыкается, когда первое выражение имеет значение false. Это означает, что второе выражение не будет вычисляться. Оператор
ExampleClass instance2 = new();
Предыдущие объявления эквивалентны следующему объявлению.
ExampleClass instance2 = new ExampleClass();
var instance3 = new ExampleClass < Name = «Desktop», Location = «Redmond», Age = 2.3 >;
В следующем примере задаются точно такие же свойства, как и в предыдущем, но без использования инициализаторов.
var instance4 = new ExampleClass(); instance4.Name = «Desktop»; instance4.ID = 37414; instance4.Location = «Redmond»; instance4.Age = 2.3;
Обработка событий
Если вы определяете обработчик событий, который не нужно удалять позже, используйте лямбда-выражение.
public Form2() < this.Click += (s, e) =>< MessageBox.Show( ((MouseEventArgs)e).Location.ToString()); >; >
Лямбда-выражение сокращает приведенное ниже традиционное определение.
public Form1() < this.Click += new EventHandler(Form1_Click); >void Form1_Click(object? sender, EventArgs e)
Статические члены
Для вызова статических членов следует использовать имя класса: ClassName.StaticMember. В этом случае код становится более удобочитаемым за счет четкого доступа. Не присваивайте статическому элементу, определенному в базовом классе, имя производного класса.
Во время компиляции кода его читаемость нарушается, и если добавить статический член с тем же именем в производный классе, код может быть поврежден.
Запросы LINQ
- Используйте значимые имена для переменных запроса. В следующем примере используется seattleCustomers для клиентов, находящихся в Сиэтле.
var seattleCustomers = from customer in customers where customer.City == «Seattle» select customer.Name;
var localDistributors = from customer in customers join distributor in distributors on customer.City equals distributor.City select new < Customer = customer, Distributor = distributor >;
var localDistributors2 = from customer in customers join distributor in distributors on customer.City equals distributor.City select new < CustomerName = customer.Name, DistributorID = distributor.ID >;
var seattleCustomers = from customer in customers where customer.City == «Seattle» select customer.Name;
var seattleCustomers2 = from customer in customers where customer.City == «Seattle» orderby customer.Name select customer;
var scoreQuery = from student in students from score in student.Scores! where score > 90 select new < Last = student.LastName, score >;
Безопасность
См. также
- Рекомендации по написанию кода среды выполнения .NET
- Соглашения о написании кода в Visual Basic
- Правила написания безопасного кода
Источник: learn.microsoft.com
Рекомендации по написанию кода в C++ (часть 1)
Вы сталкивались с трудностями в понимании чужого кода? Если — нет, то вам еще рано изучать эту тему, если — да, то эта статья и последующие в этом разделе — для вас. Вы никогда не задумывались над тем, почему чужой код намного сложнее понять, чем свой собственный? Все дело в том, что у каждого программиста есть свой стиль написания кода.
Например, кто-то не ставит отступы для выделения области действия, а кто-то наоборот — ставит, но слишком большие. Кто-то, сам того не подозревая, дает магические имена переменным, которые ну никак по смыслу не связаны с их назначением. Многие не используют комментарии в коде, хотя это очень важно. Одни программисты пытаются соблюдать код-стандарты, но не полностью, другие — вообще ничего об этом не слышали и слышать не хотят. В итоге получается макаронный код, в нем сложно распознать даже самый простой алгоритм, в таком коде легко допустить ошибку и, самое главное, его трудно читать.
Вы спросите: «А зачем мне разбираться в чужом коде?» Как минимум для того, чтобы использовать уже запрограммированные алгоритмы, вы не будете тратить время на «изобретение своего велосипеда». Кроме того, если вы работаете над большим проектом и не один, а целой командой, вы просто обязаны понимать чужой код, и конечно же, вы обязаны писать код, который будет понятен другим программистам из вашей команды.
Что это дает? Это позволяет экономить кучу времени, вам и вашей команде. Но даже, если вы программируете сами для себя, и никто кроме вас не будет разбираться в вашем коде, вы все равно выигрываете, хотя бы потому, что спустя некоторое время, без использования код-стандартов, вам самим сложно будет разобраться в своем же коде. Переменные, которые вы объявляли неделю назад, станут не понятными, не говоря уже о том, что вы не будете знать, как именно работает программа.
Теперь, когда мы знаем, для чего нужны стандарты кодирования, приступим к их изучению. Существует очень много код-стандартов, у каждого из которых есть свои плюсы и минусы, по этой причине, в разных командах — разные стандарты написания кода, которые действуют в рамках данной команды разработчиков.
Данная статья не претендует на звание — «Код-стандарты С++», скорее, — это просто мои рекомендации по написанию кода в языке С++. Все эти рекомендации я не придумал, они существуют и в книгах и в интернете. Я же просто постараюсь вас хотя бы поверхностно с ними ознакомить:
- Всегда используйте IDE для программирования.
Ушли те времена, когда необходимо было составлять программы в блокнотах и потом вручную собирать написанный код в объектный файл. Друзья, в мире существует очень много классных программ, которые подсвечивают, код, форматирую его и автоматически его собирают в готовую программу. Кроме всего этого, IDE информирует об возможных ошибках, еще до этапа сборки программы, подсвечивают неиспользуемые переменные, а также легко настраиваются под индивидуальные требования программистов. IDE даже может сама писать код, как это удобно реализовано в MVS, например, мы объявляем оператор switch , IDE уже знает об этом и делает это сама, нам же остается только добавить нужные переменные и константы. Все эти полезности реализованы с одной единственной целью — сделать процесс составления программ намного приятнее и намного быстрее. Так пользуйтесь же всем этим! - Пользуйтесь системами контроля версий.
Если вы работаете над программой долгое время, около недели или больше, не поленитесь создать репозиторий для вашей программы. Зачем это нужно? Когда разработка программы сильно затянулась, то вы уже не всегда сможете вспомнить что и когда добавляли в программный код, откуда взялась та или иная ошибка. Система контроля версий поможет вам ответить на все эти вопросы. В конце концов, если вдруг вы случайно что-то поломаете в программе, система контроля версий всегда сможет восстановить предыдущую, рабочую версию программы. Не поленитесь в этом разобраться, система контроля версий — это очень классная штука. - Размещение фигурных скобок у функций:
int myFunction()
// Правильно: myFunction() searchInFile() // Неправильно: SearchInFile() search_in_file() myfunction() Myfunction() MYFUNCTION()
if () < // тут код >else < // и тут код >
Ну во первых, всегда ставьте фигурные скобки, даже если в операторе if нужно выполнить всего одну строку кода. Во вторых, переносите оператор else , на новую строку, хотя, на первый взгляд это может показаться и не удобно. В чем плюс? А плюс в том, что если вдруг вам нужно будет закомментировать или удалить блок кода с оператором else , то вам это будет сделать очень просто. И поверьте, такие ситуации встречаются очень часто.
Вот запись, как делать не следует:
if () < // тут код >else < // и тут код >
Оператор else стоит в строке с закрывающейся скобкой тела оператора if . Такая запись кажется намного компактнее и красивее. Но как я уже говорил, когда вам понадобится закомментировать блок кода else , вы случайно закомментируете или удалите и закрывающую скобку предыдущего блока. В результате получите ошибку, которая отберет у вас драгоценное время.
Такая запись, по моему мнению, также считается не правильной:
if () < // тут код >else < // и тут код >
#include using namespace std; int main() < const int august = 8; int currentMonth; cin >> currentMonth; if (august == currentMonth) < cout return 0; >
Это корректный код, он очень простой для понимания. Пользователь вводит номер месяца, если введенный номер равен 8 — август, то выводится сообщение. Обратите внимание, что в операторе if в условии я сравниваю значение константы, ведь август — это всегда 8-й месяц, а значит значение константы august меняться не должно. Теперь допустим одну маленькую ошибку в операторе if , вот код:
#include using namespace std; int main() < const int august = 8; int currentMonth; cin >> currentMonth; if (august = currentMonth) < cout return 0; >
Программа таrже, но уже с маленькой ошибкой в условии. Вместо оператора сравнения там стоит оператор присваивания. И тут нас спасет тот случай, что august — это константа, а константе присваивать ничего нельзя и компилятор об этом знает. То есть на этапе компиляции вылетит ошибка:
main.cpp:12: error: assignment of read-only variable ‘august’
Согласитесь, что очень удобно! Теперь сделаем august не константой, вот код:
#include using namespace std; int main() < int august = 8; int currentMonth; cin >> currentMonth; if (august = currentMonth) < cout return 0; >
На этом пункте решил завершить данную статью, продолжение напишу в следующей статье.
P.S.: Если у вас вдруг перестал работать роутер или вы купили роутер, но не знаете, что с ним делать, вам поможет — настройка роутера вызов мастера. Для тех, кто не знает, что это такое, пройдите по ссылке и вам станет все понятно.
Источник: cppstudio.com