Tous les messages de stylet

Utilisation des fichiers dans C ++. partie 2 – Библиотека fstream.




classe ofstream

retour classe ifstream, que nous avons examiné plus tôt, et est conçu pour écrire dans un fichier.

Comme dans ifstream, d'ouvrir ou de créer un fichier en utilisant un constructeur ou une méthode ouvrir().

ou le concepteur:

paramètre ios_base::app indiqué, si vous voulez ajouter à la fin d'un fichier existant. Par exemple, lorsque le programme tient un journal de leur travail

Pour la vérification d'un fichier ouvert rencontre tous les mêmes est ouvert()

Le principe est le même. Vous pouvez vérifier si un fichier est ouvert, en utilisant dans expression logique fichier très variables:

opérateur <<

Attaquants la sortie formatée dans un fichier. Le principe est le même, celle de l'analogue dans iostream.

Il est destiné à être affiché dans des fichiers texte. opérations de formatage contrôlées telles que largeur() ou setf(). Leurs homologues sont entièrement méthodes du même nom iostream.

La séquence de variables de sortie, comme indiqué à gauche à droite: La première variable sera sortie, liste le plus proche filet, il suit.

opérateur endl

De même, l'opérateur iostream fabrique dossier de transfert du chariot à une nouvelle ligne dans un fichier texte.

procédé d'écriture

Il est utilisé dans les fichiers binaires pour écrire le bloc de mémoire (tableau d'octets) dans le fichier comme ils sont. Toute variable est également tableau octet, plutôt elle peut être considérée comme. En conséquence, cette méthode écrit dans le fichier de la représentation de la machine (le genre de la façon dont il regarde dans la mémoire).

Cette méthode prend deux paramètres: Pointeur vers un bloc de données et le nombre d'octets, que cet appareil prend. Dans l'exemple, la chaîne prend strlen() octet, tout taille de() (qui donnera 4 entier de 32 bits et pour les systèmes d'exploitation 8 pour de vrai).

Encore une fois, je tiens à souligner la, que, contrairement à l'opérateur de sortie formaté <<, méthode écrire() Il ne présente pas les données sous forme de texte.

fermer cette méthode

Ferme méthode de fichier Fermer(). pour les fichiers, inscriptible, par opposition à la lecture de fichiers, la fermeture d'un fichier – rituel obligatoire. fichier non fermé ne peut pas obtenir les données. Cet effet peut se produire en raison de la mise en mémoire tampon lui-même OSes, lorsque les données, déversées dans le fichier, Ils sont stockés en fait à l'esprit et ne viennent pas à un fichier. Le système d'exploitation lui-même décide, lorsque les données est temps de fusionner.

une telle “différée” prunes appelé “engager” (du latin commit). Soit dit en passant cet effet très bien utiliser un système de gestion de base de données, où insérer des enregistrements tombent dans la mémoire de stockage (appelé transaction). Ce fut seulement après une commande spéciale en masse écrite dans le fichier de base de données elle-même. méthode Fermer() juste un exemple d'une équipe de clôture d'une transaction avec le fichier.

Il convient de mentionner juste au cas où, que si vous voulez engager à produire des données sans fermer le fichier lui-même, vous devez utiliser la méthode chasse d'eau()

Ces dépôts iront au dossier dans le fichier, mais il sera toujours ouvert pour les entrées. Cette méthode est souvent utilisée, mais utile de savoir à ce sujet.

Modes de mise en forme de largeur, précision

comme dans iostream, pour la belle mise en page des données dans le fichier de mise en forme de données peuvent être utilisées pour afficher l'opérateur << .

largeur() indique la largeur en caractères, qui sera mis à la valeur affichée, et précision() le nombre de chiffres de la partie décimale d'un réel. L'exemple le plus simple: table de sortie à un fichier texte les valeurs des fonctions trigonométriques:

 

méthodes de positionnement seekp, tellp

Pour déplacer un fichier comme dans le cas de ifstream Il y a une fonction de la position de la permutation. il est appelé seekp() et reçoit les mêmes paramètres que ceux décrits ci-dessus pour seekg().

Pour obtenir la position actuelle d'une fonction similaire en octets depuis le début du fichier tellp().

Vidéos sur le travail avec les fichiers en C ++:

Bulletin de nouvelles leçons sur la programmation:

Utilisation des fichiers dans C ++. partie 1 – Библиотека fstream.




tête fstream Il fournit la fonctionnalité de lecture des données à partir d'un fichier et écrire dans le fichier. En général, il est très similaire à l'en-tête iostream, qui travaille avec la console, parce que la console est également un fichier. Par conséquent, toutes les opérations de base sont les mêmes, pour les petites différences, comme dans le sujet précédent sur iostream.

Les opérations les plus fréquentes suivantes:

  1. Redirection Opérateurs O – << et >>
  2. Méthodes de lignes d'enregistrement et de lecture getline() et obtenir() c mettre()
  3. Streaming méthodes de lecture et d'écriture écrire() et lis()
  4. Méthode publique création et la fermeture de fichiers ouvrir() et Fermer()
  5. Les méthodes de vérification si le fichier est ouvert est ouvert() et si la fin de fichier est atteinte eof()
  6. Réglage de la sortie formatée pour >> par largeur() et précision()
  7. opération de positionnement tellg(), tellp() et seekg(), seekp()

Ce n'est pas toutes les possibilités, qui fournit la bibliothèque fstream. Tenez compte de tous maintenant, nous ne sommes pas, puisque leur champ d'application est assez étroite. Connaisseur ci-dessus. Commencez par lire la classe.

classe ifstream

Il offre la possibilité de lire les fichiers. Ouvrez le fichier de deux façons: méthode d'appel ouvrir() ou en entrant le chemin d'accès dans le constructeur. Vous devez préparer un fichier texte, avant, commencez à taper le code. Sur le disque d, créez un dossier nommé 1 et, créez un fichier avec l'extension txt – “файл.txt”.

Ouverture d'un fichier dans le constructeur ressemble à ceci:

Nous demandons donc d'ouvrir un fichier nommé fichier.txt txt, qui est dans le dossier avec le nom 1, et le dossier se trouve sur le lecteur d.

Utilisation de la méthode ouverte() confortablement, si le programmeur ne veut pas être lié directement à un fichier. Tout à coup, vous avez besoin d'une propriété de classe ou variable globale, bien, puis ouvrez le fichier déjà. Si vous avez besoin d'ouvrir un fichier dans une certaine fonction, de travailler avec lui et de fermer, vous pouvez définir le chemin vers le fichier directement dans le constructeur. En général, en fonction de la situation.

d'ouverture du fichier, souhaitable de prescrire par: s'il a ouvert? Comme il y a un certain nombre de raisons, sur lequel le fichier ne peut pas être ouvert, et nous ne voyons pas. par exemple, fichier avec le nom spécifié n'est pas dans le dossier ou le chemin prescrit n'est pas valide. Vous pouvez aller de deux façons: vérifier le fichier dans une variable expression logique (application de l'opérateur “!”, par exemple) ou d'utiliser la méthode est ouvert() :

Donc, tout va bien fonctionner et que le fichier sera ouvert:

библиотека fstream, travailler avec des fichiers en c ++, Programmation pour les débutantsMaintenant, essayez de saisir le nom du dossier n'est pas 1, et 2 ifstream fichier ("ré:\\<span style ="Couleur: #FF0000;"><fort>2</fort>\\файл.txt”); et redémarrez le programme. Étant donné que le nom du dossier spécifié, nous n'avons pas créé, le fichier, naturellement, Il ne peut pas être ouvert:

библиотека fstream, travailler avec des fichiers en c ++, Programmation pour les débutants

Les contrôles de second mode de réalisation utilisant le procédé est ouvert() :

méthode est ouvert() retour 1, Si le fichier est trouvé et ouvert avec succès. sinon retourne 0 et le code de travail prescrit dans le bloc autre.

Si le fichier est pas ouvert – souhaitable de gérer l'erreur. généralement, si tous le programme de travail associé au fichier, ils écrivent un certain message à la console, et de mettre sur le programme. Lorsque des erreurs graves communes pour revenir à une exécution de code (nombre), qui caractérisera une ou l'autre erreur. Les codes pour chaque type d'erreur l'auteur du programme peut inventer leur propre. L'une des façons de gérer les erreurs dans le programme, nous avons pris en compte dans l'article Exceptions en C ++.

Si le fichier est ouvert avec succès, de celui-ci, vous pouvez lire.

lire l'opérateur >>

Ainsi que dans iostream La lecture peut être organisé par l'opérateur >>, qui indique dans quelle variable sera à lire:

considère réel, chaîne et nombre entier. rangée fin de lecture, s'il y avait un espace ou à la fin de la ligne. Il est à noter, que l'opérateur >> Il a appliqué des fichiers texte. La lecture d'un fichier binaire pour faire le meilleur moyen de la méthode lis().

Soit dit en passant, cette déclaration est tout à fait pratique, si la tâche est de diviser le fichier en mots:

méthodes getline() и obtenir()

La lecture de la chaîne de caractères à la translation du chariot est fait le même que dans iostream par getline(). De plus, il est recommandé d'utiliser la version surchargée de la fonction, si vous lisez une ligne de type chaîne:

Si vous avez besoin de lire dans un tableau de caractères ombles[], non plus obtenir() ou getline() tout comme les méthodes:

Le principe est généralement le même, comme dans les analogues de iostream: Présentée comme une mémoire tampon de paramètres (variable, où la lecture se fera), ou plutôt un pointeur vers un bloc de mémoire (si la variable est déclarée statique: tampon de carbonisation[255] par exemple, il est écrit dans les paramètres &tampon), spécifie le nombre maximal de lisible (dans cet exemple n), afin de ne pas déborder est produit et la sortie des limites de la mémoire tampon et le caractère de séparation selon les besoins, à qui Relecture (Dans cet exemple, l'écart). J'espère que je ne l'ai pas mal sur la bande de roulement des fanatiques du tronc C, si la suie que ces deux fonctions sur 99% interchangeable, et 95% Ils peuvent être remplacés par lis().

méthode lis()

Comme dans l'exemple précédent?

En fait, ici le même résultat – Il est considéré comme un certain nombre de caractères. La seule exception, il est impossible de spécifier le séparateur. lis() utilisé pour l'entrée non formaté. Il est principalement destiné à lire les fichiers binaires. Étant donné que le fichier texte – un cas particulier d'un binaire, cette méthode est tout à fait applicable au fichier texte.

méthode Fermer()

ferme le fichier. Même rien à ajouter. Peut-être la seule remarque – sur, que le fichier, ouvert pour la lecture, ne sera pas fermé par cette méthode habituellement ne devienne pas pire. Situation très rare, lorsqu'il est ouvert pour la lecture se détériore fichier, si vous avez terminé le programme sans fermer le fichier. Ces dommages sont associés principalement avec des appareils non standard tels que les lecteurs de bande bande ou ce que certains flux de artificieux contrôleurs industriels, mais dans le Feng Shui de se rappeler – fichier ouvert doit être fermé. Il est considéré comme une bonne forme.

méthode eof()

Vérifie si la fin de fichier est atteinte. à savoir. s'il est possible de lui pour lire la suite. L'exemple ci-dessus de l'opérateur de mot de correction d'épreuves >> il suffit d'utiliser ce contrôle.

méthode seekg()

Installer la position actuelle à la souhaitée, indique le nombre. Cette méthode est également transmise méthode de positionnement:

  • ios_base::fin – Relevez un nouveau poste à la fin du fichier
  • ios_base::mendier – Relevez un nouveau poste depuis le début du fichier (positionnement absolu)
  • ios_base::cabot – Aller à n octets de la position actuelle dans le fichier (par défaut)

méthode tellg()

Parfois, vous avez besoin d'obtenir des informations sur, comme déjà lu. Cette méthode aidera tellg():

Il retourne une valeur de type int, ce qui montre combien a déjà passé en octets. Il peut être utilisé en tandem avec la méthode seekg(), Pour obtenir la taille du fichier:

À titre d'exemple des méthodes de lecture binaires peuvent être démantelées si classe:

classes d'emballage similaires utiles, s'il y a des problèmes de lecture à partir d'une structure entière binaire.

Vidéos sur le travail avec les fichiers en C ++:

Bulletin de nouvelles leçons sur la programmation:

Liste bidirectionnelle. Trier les champs et les conditions




Dans cet article, je vais décrire les œuvres de technique avec une liste bidirectionnelle dans sa forme classique. Liste des engagés, O et trier par diverses conditions et les champs des éléments de la liste. Je ne vais pas entrer dans la théorie des listes – Je passe à une description de, ce qui doit être fait pour résoudre ce problème, et le long de la façon dont je vais vous décrire pourquoi si je me suis arrangé un emploi.

Pour construire une liste que nous avons besoin de deux structures: un – Liste champ article. deuxième – il élément de liste avec des ancres, qui se lie ensemble les éléments.

La première structure peut ressembler à ceci:

Voici une liste de la structure de données. Il doit contenir le champ, directement à la liste elle-même (ou plutôt à sa structure ) avoir aucune relation, mais stocker des informations. Cette entrée – récipient (appelons-le donc).

La deuxième entrée:

Elle avait eu l'intention d'enregistrer un élément de conteneur, dans lequel nous emballons les données, et un champ pour la communication avec les éléments voisins dans la liste,.

Ce qui est nécessaire un tel tour sur deux structures? Il sera plus facile de trier. Dans des circonstances normales, la liste est triée en redirigeant ses champs ancres sur d'autres éléments (Prochain et Précédent Dans cet exemple,). à savoir. les données proprement dites, comme ils l'étaient dans la mémoire dans la même cellule (cellule) et restent, mais seulement changer les pointeurs vers les voisins. Et il est certainement bon et droit, mais il est difficile. La plus grande complexité, plus susceptible de se heurter à un bogue dans le programme. Par conséquent, il est nécessaire de simplifier le programme, de sorte que vous ne pouvez pas changer les ancres, et lieux des données (comme il se fait habituellement dans le tri des tableaux par exemple). Par conséquent les données appropriées dans une structure de bloc séparé, de les faire glisser un opérateur, plutôt que de faire glisser chaque champ séparément. Ci-dessous, vous verrez ce que l'on entend.

Pour travailler avec la liste des variables requises et la tête de la liste, nécessité, queue:

Et il devra examiner la procédure de remplissage liste:

Il peut également être divisée en deux: Le premier élément sera créé, le second lui aurait rempli d'une donnée utile du conteneur, mais il est au goût.

Ne pas oublier la sortie de la procédure de la liste. Laissant les ordures dans la mémoire – mauvais goût, Même si le système d'exploitation intelligente lui-même peut être nettoyé:

Procédure O:

Tant il est dû “marafeta”. Belle affichage – important programme de optionalité assez. Par conséquent, la largeur des éléments, et la vue de la table doivent être conformes.

Passons maintenant à la fête – Listes de tri. La procédure de la sorte, je me suis cassé en deux parties, retirant des conditions d'essai, qui analysent si les éléments triables devraient être promus par, selon les conditions de la liste. La même procédure de tri est la suivante:

Il sera d'accord pour transférer les options de tri: champ Nom, qui doit être trié, et la direction de tri (asc – par ordre croissant ou desc – descendant).

Dans la procédure utilisée tri à bulles, comme étant le plus châssis. Dans une double boucle est un appel-fonction analyseur, qui doit répondre de tri, Avez-vous besoin de réorganiser les éléments à trier ou non. vue, la suppression des conditions de tri, Je simplifié le code lui-même le tri des procédures. Même si vous avez besoin d'ajouter quelques autres conditions ou des champs, tri lui-même ne sera pas avoir à toucher.

fonction Analyzer ressemble à ceci:

Il effectue 4 conditions:

  1. si asc – ascendant, et le champ trié – x:
  2. si desc – descendant, et le champ du même
  3. si asc – ascendant, mais triés deuxième champ, strokovoe
  4. si desc – Descendant d'un champ de chaîne

Dans chacune de ces conditions, respectivement, sont comparés “plus grande” ou “moins” en fonction de l'ensemble des classements. Ainsi, cette fonction est une procédure de tri responsable, comment elle traite avec les éléments. En général, il est la liste complète bidirectionnelle algorithme de tri.




Nous mettons en un seul programme décrit ci-dessus et la fonction ajoute Principal():

S'il vous plaît noter: Je signale les mots, comment trier une liste de, pour lequel le terrain et l'ordre dans lequel la.

résultat:

Tri liste bidirectionnelle en C ++

Sur la deuxième liste, la méthode de tri par les ancres de perezatsepleniya peut lire programmersforum

À la demande de collègues sur place (qui bien sûr ont remarqué correctement) une valeur d'au moins une brève mention de C ++ et les vertus STL. Je veux dire la classe liste, ce qui représente en fait les listes (bi-directionnel). La promesse d'un simple,: tous, vous avez besoin de travailler avec une liste des déjà fait. Le bon, programmeur, travailler avec des listes, bien sûr, il est dans les affaires internes, choisir de travailler STL.

Je vais vous décrire un petit code à l'aide du conteneur, comme alternative à, comme décrit ci-dessus:

Tri liste bidirectionnelle en C ++

Si la tâche peut être utilisée STL – utilisation. La solution est fiable et ne sera pas de passer du temps sur leurs listes de l'invention, le mécanisme de stockage.

Le choix de ces deux méthodes ne devrait en fonction de la quantité de données utiles, qui sont entrés dans un élément de liste. Si ce couple douzaine de champs avec des chiffres ou des petites lignes, la meilleure façon, juste – déplacer le conteneur de données utiles (comme ici). Si les éléments de liste ont une taille énorme, le plus rapide des ancres de technique remaniement sera effectuée (changements Dernier et Prochain pour perezatsepleniya élément à un autre élément). Dans tous les cas, le choix du programmeur.

Pour soutenir notre site – cliquez sur la tirelire et choisir un moyen pratique.

Bulletin de nouvelles leçons sur la programmation:

bibliothèque iostream. les opérations de base

библиотека iostream, класс cin, класс cout, методы класса cout,  методы класса cin,  boolalpha, scientific, écrire, getline, obtenirМодуль (или как говорят в случае с Сихедер) или заголовочный файл iostream призван предоставить средства ввода-вывода, для стандартной консоли. à savoir. la, что вводит с клавиатуры и читает с экрана пользователь.

Все его возможности размещены в пространстве имен std, поэтому для его использования либо приходится приписывать префикс std, либо указывать пространство имен через using namespace

Или

В этой статье будем использовать первый вариантподключение пространства имен через using namespace.

iostream содержит два основных класса:

  • gin для обработки ввода с клавиатуры;
  • cout для вывода в консоль переменных или просто текста;

Есть еще классы cerr et clog, но их в целом, используют не так часто, и о них мы упоминать не будем. Если кому интересноэти классы используют для вывода ошибок при операциях и для логирования действий.

Сразу скажу, что не всё, что присуще этим классам будет описано. Только самое часто используемое из функционала. Это операторы перенаправления форматированного вывода (<< et >>), которые занимаются выводом значений переменных в зависимости от их типов и указанного формата. Это операторы неформатированного чтения\записи (lire: по байтам или посимвольно), méthodes obtenir(), mettre() et écrire() призванные просто вывести массив символов какими бы они ни были. И операторы форматирования setf(), largeur(), précision(), которые указывают для текущего вывода, как форматировать выводимое, как выравнивать его, по какой стороне и сколько ставить символов после запятой.

Класс cin

classe gin содержит множество методов. Все их можно увидеть, если ввести в среде разработки ключевое слово gin и поставить после него точку. Редактор кода предложит все имеющиеся методы этого класса на выбор:

библиотека iostream, класс cin, класс cout, Cidargaet

Как сказано выше, для начинающих программистов, мы рассмотрим только некоторые из них.

classe gin основан на классе istream, и содержит возможность перенаправления ввода. Используя перегрузку оператора >> , класс позволяет указать в какую переменную будет производиться ввод данных.

Перечисленные в примере переменные получают (считывают) свои данные согласно своим позициям в операции. В данном примере сначала считывается вещественное в , потом целое в je, и затем строковая переменная. Это нужно обязательно учитыватьнеправильная последовательность переменных может дать либо ошибку ввода, либо переменные могут получить данные им не предназначающиеся.

При считывании строки нужно помнить, что если при в ней встретится пробел, считка завершится (в операционной системе принято параметры отделять пробелами). Так удобно разбивать строку на слова. Проиллюстрировать это можно таким примером:

библиотека iostream, класс cin, класс cout, Cidargaet

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

Если нужно считать строку целиком до переноса каретки, стоит использовать рассматриваемый ниже метод getline().

méthode obtenir()

Позволяет ввести символ или строку. При вводе стоки поддерживает разделитель, указанный программистом, до которого будет читаться строка. По умолчанию стоит символ перевода строки ' N' То есть метод obtenir() ждет нажатия клавиши Энтер. Только потом обрабатывает считываемое.

При вводе символа в числовую переменную, метод возвращает код этого символа:

Cidargaet() часто ставят в конце программы, чтобы задержать консоль с результатами:

В классическом Си популярным аналогом является функция getchar() для такой задержки.

Чтобы сделать с помощью этого метода ввод строки, достаточно передать в его параметры указатель на массив символов, куда будет производиться запись, и количество символов, которое ожидается для ввода.

Схема простая: Передаем указатель на массив символов, передаем количество считываемого, и после нажатия клавиши Энтер, Cidargaet() считает в этот массив заданное количество символов. Остальные символы считаны не будут, поэтому чтобы освободить от них буфер ввода можно вызвать метод ignore().

Если указать третьим параметром символ-разделитель, Cidargaet() будет считывать либо сколько заказано символов, либо пока gin не встретит этот символ:

Тут в s строку считываются символы вплоть до первого пробела. Если пробелов не обнаружитсясчитываться будет либо до нажатия Энтер либо до n-ного символа.

méthode getline()

Аналогичен методу obtenir(). Помимо всего, que “умеетobtenir(), переопределен для строк типа chaîne. Так же как и obtenir() умеет считывать до символа, указанного в качестве разделителя, так же первым параметром указывается массив символов, а вторым количество символов для считывания.

Использование его переопределенной версии в хедере chaîne regards:

Класс cout

classe cout предполагает вывод данных в консоль. Базовый класс ostream. Основной оператор – surcharge << Он указывает, какую переменную выводить в консоль.

Правила последовательности те же, que gin вывод слева направо.

Для перевода каретки на новую строку рекомендуется использовать оператор endl. Или передавать старый добрый ‘\n

méthode mettre() выводит символ в консоль:

Выведет один символ.

méthode écrire() выведет блок символов из массива символов, переданный ему в качестве указателя

fondamentalement, dans écrire() можно передавать указатель на любой блок памяти, но для вывода в консоль характерны только массивы читаемых, понятных человеку символов.

библиотека iostream, класс cin, класс cout, cout.write

méthode largeur() задает ширину выводимого, если необходимо выровнять до определенного количества символов. Как правило применяется при построении таблиц. Типичный пример: Вывод таблицы вычисления формулы (пример ниже).

méthode précision() указывает сколько цифр будет в дробной части, если выводится вещественная переменная.

méthode setf() détermine, как будет выравниваться (влево, à droite, по центру) выводимое, и в каком формате оно будет.

Комплексный пример этих методов можно увидеть в задании построения таблицы параболы:

библиотека iostream, класс cin, класс cout, методы класса cout

16-тиричное представление строки можно вывести, par exemple, вот так :

библиотека iostream, класс cin, класс cout, методы класса cout, basefield

А так научный формат представления вещественного:

scientific, библиотека iostream, класс cin, класс cout, методы класса cout

Можно задать формат вывода булевских переменных:

библиотека iostream, класс cin, класс cout, методы класса cout, boolalpha

Поработайте с методами этих классов самостоятельно. Essayez de comprendre, что делает каждый из них. Такая самостоятельная практика будет вам очень полезна.

Bulletin de nouvelles leçons sur la programmation:


Je suis d'accord pour recevoir des messages de purecodecpp.com sur mon e-mail

tâche. Calculer le nombre de jours entre les dates.

La tâche est simple: Trouvez le nombre de jours entre deux dates. Fournir des années bissextiles.

Pour la pratique offert deux options:

  1. L'une des dates limites décrites seulement un an. Cela est, la date de début est entré en pleine (par exemple 25.12.2015), et le second seulement un an (par exemple 2016). Il compte les jours avant 01.01.2016
  2. Tant la date de pleine – décrit mois jour année.

Voici mon exemple, première partie cruciale version simplifiée:

ici, la fonction DaysCount() Il prend les trois premiers paramètres, la date de début (année, mois, jour) et la dernière limite de paramètre (année, 1-e jour de Janvier,)

Toute méthode peut résoudre, même si le cycle avec autre chose. Mais la décision du deuxième mode de réalisation ne montre pas :) Que ce soit les devoirs. bonne chance!

Questions à poser dans les commentaires

Bulletin de nouvelles leçons sur la programmation:

Recherche substring en course




Algorithmes de recherche ++, recherche substring dans l'AVC, c ++, comment trouver une sous-chaîne dans une chaîneMaintenant, nous allons examiner des exemples, Il pourrait ressembler à l'algorithme de recherche substring. Des exemples sont basés sur les fonctions de la bibliothèque standard, il est dans ces fonctions et présentent tous les avantages des programmes d'écriture. Mais l'algorithme d'analyse classique, basé sur cycles et des comparaisons, Il est également tout à fait remarquable. Par conséquent, nous allons considérer dans la même classe.

L'algorithme lui-même est très simple en principe,. Il y a deux lignes. par exemple "Bonjour le monde" et "il"

Le travail se fera en deux tours:

  1. La première sera de réaliser un passage à travers la ligne, et rechercher l'emplacement première lettre chaîne de recherche ( "il" ).
  2. deuxième, étant donné que la position de la première lettre trouvée – vérifier, dont les lettres sont après, et combien d'entre eux correspond à une rangée.

Nous illustrons la recherche de sous-chaîne:

Algorithmes de recherche ++, recherche substring dans l'AVC, c ++, comment trouver une sous-chaîne dans une chaîne, Programmation C ++ pour les débutants, rapport, travaux de cours

Les deux premières itérations de la boucle compare les lettres ne seraient pas les mêmes (en rouge). La troisième itération de la lettre désirée (le premier caractère du mot souhaité) Elle coïncide avec le caractère de la chaîne, où la recherche. Quand une telle coïncidence est inclus dans les travaux du second cycle. Il est conçu pour compter le nombre de caractères après le premier dans la chaîne de recherche, qui coïncidera avec les caractères de la chaîne d'origine. Si l'un des symboles ne correspondent pas – Cycle quitte. Il ne fait aucun sens de conduire le cycle gaspillée, après que le premier écart, car il est déjà clair, qu'il n'y a pas de titre.

Dans la troisième itération égal que le premier caractère de la chaîne, mais le deuxième ne correspond pas. Nous devrons poursuivre le travail du premier cycle. La quatrième itération donne les résultats requis – correspondre à tous les caractères de la chaîne avec une partie de la chaîne source. Et puisque tous les personnages appariés – substring trouvé. le travail de l'algorithme peut être complété.

Voyons voir, Il ressemble à une chaîne classique chaîne de code de recherche en C ++:

Deux cycles effectués chaque sa tâche. Un piétinement sur la ligne dans l'espoir de trouver “tête” mot de recherche (premier caractère). La deuxième découvertes, si on trouve après “tête” “corps” recherché. et les chèques, si elle ne se trouve pas “corps” en fin de ligne. à savoir. ne se trouve pas si la longueur de mot est un de plus que la longueur requise de la chaîne, considérant, terminateur Null qui tombe dans cette unité ( ' 0' ).

Algorithmes de recherche ++, recherche substring dans l'AVC, c ++, comment trouver une sous-chaîne dans une chaîne, Programmation C ++ pour les débutants, rapport, travaux de cours

Nous voyons, quel programme trouvé commencer substring cependant, dans les cellules de l'index de tableau de caractères 0 et 4. Mais pourquoi? Après tout, en un mot Parapapa 3 tels substring. La chose ' 0' .

D'une manière générale, au sens de l'algorithme se termine ici. Pas plus de difficultés que zéro à la fin de la ligne il n'y a pas. cependant, devraient prêter attention à la multiplicité de la recherche. Quoi, si nous avons besoin de trouver la ligne dans plusieurs positions? Combien de fois le terme de recherche se produit dans la ligne et dans quels endroits? Il est conçu pour contrôler et le troisième paramètre – int nnombre d'occurrences d'une chaîne. Si vous mettez l'appareil en – Il trouve le premier titre de correspondance. Si un deuce, il fera la première boucle à sauter le premier trouvé, et demander un deuxième. Si trois – comparer le troisième et ainsi de suite. Chaque terme de recherche a trouvé, les occurrences de ce compteur est décrémenté. Cela nous permet de décrire la boucle de recherche:

Autrement dit, pour trouver la première, deuxième, troisième, quatrième match de… Aussi longtemps que la fonction ne retourne -1, qui indiquent l'absence de N-tion du titre dans une rangée.

 

maintenant, comparer, Recherche substring C ++ Heder chaîne.

tous! classe chaîne C ++ est fourni par trouver(), renvoie le numéro de la cellule, qui commence avec le corps de la chaîne de recherche dans la chaîne source. résultat:

Algorithmes de recherche ++, recherche substring dans l'AVC, c ++, comment trouver une sous-chaîne dans une chaîne, Programmation C ++ pour les débutants, rapport, travaux de cours

Comment la multiplicité? Oui s'il vous plaît:

fonction trouver() prend deuxième paramètre numéro de symbole, à partir duquel commencer la recherche. à savoir. trouver la première occurrence, sa valeur est incrémenté et trouver() la recherche se poursuit avec le caractère suivant après la tête trouvée. résultat:

Algorithmes de recherche ++, recherche substring dans l'AVC, c ++, comment trouver une sous-chaîne dans une chaîne, Programmation C ++ pour les débutants, rapport, travaux de cours

Tout cela est en C ++, lui-même classe chaîne assez confortable pour travailler avec des cordes est, les deux lignes, plutôt que de simplement un tableau de caractères.

Bulletin de nouvelles leçons sur la programmation:

tri des inserts




tri par insertion c ++, inserts algorithme de tri, Programmation pour les débutantsun autre algorithme, conçu pour organiser des réseaux, algorithme est tri des inserts (Tri par insertion). cet algorithme (comme autre, vu sur notre site) assez simple. Il se compose de deux cycles (une noyée dans l'autre). Le premier cycle produit sur un tableau, et le second – le mouvement des éléments à. Disons simplement un coup d'oeil, Il pourrait ressembler à un code de tri, et déjà au-dessous d'analyser, comment cela fonctionne:.

algorithme tri des inserts Il peut être décrit par les points suivants:

  1. Rappelez-vous dans une variable temporaire ( chamois exemple) la valeur de l'élément de réseau actuel;
  2. Bien que les éléments de la gauche de la valeur mémorisée est supérieure à la stockée – Nous les déplaçons dans la bonne position. Il se trouve, l'élément précédent prendra la cellule stockée. et, qui est avant la précédente – se déplace à son tour la place de la précédente. Et les éléments se déplacent l'un après l'autre.
  3. Le mouvement se termine avec des éléments, Si l'élément suivant, vouloir se déplacer, Il est significativement moins, que le, rappeler qu'une variable temporaire au début du cycle.
  4. Le cycle prend l'élément suivant, et décale à nouveau tous, qui sont situés en face de lui et de grande valeur sur.

Nous allons montrer visuellement le mouvement des valeurs dans un tableau de sept éléments en cours de fonctionnement le tri des inserts:

tri par insertion c ++, inserts algorithme de tri, Programmation pour les débutants

A la première itération dans une mémoire tampon variable est écrite avec une valeur d'index de la cellule 1 et le cycle va vérifier ce point. On y trouve le nombre 2. Elle est supérieure à la valeur, est enregistrée dans la cellule zéro, de sorte que le mouvement n'est pas. En outre, la mémoire tampon variable est écrite la valeur de l'indice de la cellule 2 comparant à nouveau les valeurs aller à gauche, etc.. Seulement sur la quatrième itération de la boucle externe écrasera les valeurs. Trois premiers seront échangés avec les cinq, puis avec les quatre.

ainsi, pendant le tri des inserts enregistré dans l'élément chamois “tamisé” au début d'un tableau. dans les cas, lorsque l'élément d'une valeur inférieure à celle qui se trouve chamois ou le début de la séquence est atteinte – arrêts de tamisage.

Une bonne illustration visuelle de l'algorithme tri des inserts avoir à wikipedia:

tri par insertion c ++, inserts algorithme de tri, Programmation pour les débutants

Le temps passé sur le fonctionnement de cet algorithme est entièrement dépendant de la donnée initiale: le nombre d'éléments dans le tableau et l'ordre d'origine. Cela est compréhensible, que plus la matrice – plus le temps nécessaire à son traitement. En outre, plus de temps est nécessaire pour trier le tableau dans lequel la valeur est absolument pas ordonnée.

algorithme tri des inserts bon pour les petits réseaux (jusqu'à plusieurs dizaines d'éléments). Un travail plus efficace, si les données du réseau ont déjà été partiellement triées. Si le tableau sera ajouté de nouvelles données (de nouveaux éléments), algorithme peut les trier comme ils sont ajoutés (contrairement à bubble sort et option de tri). L'efficacité de l'algorithme augmente considérablement, si vous ajoutez dans l'algorithme de code recherche binaire.

Nous offrons aussi regarder un court vidourok sur ordinateur avec l'algorithme d'analyse tri des inserts:

Bulletin de nouvelles leçons sur la programmation:

Trier l'option C ++




tri Option c ++, choix de l'algorithme de tri, pour les débutantsСмысл sélection Trier (Sélection Trier) Il est de trouver la valeur minimale dans l'élément de réseau, и перемещения этого значения в начало массива. Il est nécessaire de faire une réservation, qui peut être appelé dans ce cas “le commencement” tableau (trouvés où le minimum se déplace de la valeur). “début” algorithme sélection Trier à chaque cycle de mesure est décalé vers la queue de la matrice. Par conséquent, dans la première itération de la boucle, найденное минимальное значение меняется местами со значением в нулевой ячейке массива. Dans la deuxième itération, “début” déjà pointera vers la prochaine (première) cellulaire, etc..

tri Option c ++, choix de l'algorithme de tri, pour les débutants

По факту получается простой обмен местами значений ячеек tableau. При таком обмене значениями не нужен сдвиг (doublage) tous les éléments du réseau, d'attribuer une valeur minimale dans la cellule appropriée. Autrement dit, l'algorithme sélection Trier Il ne nécessite pas de mémoire supplémentaire. Les valeurs Ecraser se produit immédiatement après avoir constaté la valeur minimale dans un tableau.

Le code du programme est assez simple, et ne nécessite pas de descriptions particulières:

rôle “début” Elle joue un compteur je la boucle externe. A chaque étape, la valeur de l'élément, qui compte le nombre de la variable, considéré comme minime. Вложенный цикл passe passer à travers la queue du tableau, calculer le nombre de cellules de la matrice avec la valeur minimale (rangée 18 – opérateur ternaire). Если после прохода вложенным циклом переменная min pas changé, signifie tout l'éventail de la queue, qui est transformé, pas de valeur minimale, et l'élément “début” Il reste en place. autrement – значение меняется местами с найденным.

tri Option c ++, choix de l'algorithme de tri, pour les débutants

La queue matrice traitée à chaque cycle de passage diminue et lorsqu'il atteint la fin du tableau, il (tableau) auront trié. l'algorithme sélection Trier arrêter.

Ceci est une excellente courte vidéo sur l'ordinateur avec l'analyse sélection Trier (Sélection Trier):

Aussi lire nos leçons suivantes consacrées à des algorithmes de tri: bubble sort et shyeikyernaya sortirovka tableau.

Bulletin de nouvelles leçons sur la programmation:

Les champs de bits en C ++




champ de bits avec ++, structures en c ++ pour les débutantsEn C ++, il est possible de demander à un certain nombre d'éléments de la structure de mémoire dans les bits. par exemple, si vous voulez créer une structure de données, taille registre correspondant dans tout dispositif. Le type d'élément (il est appelé un champ de bits) Une telle structure peut être un nombre entier (le plus souvent du type de non signé) ou dénombrable (enum).

Syntaxe champ bits dans la structure est définie comme suit:
champ de bits avec ++, structures en c ++ pour les débutantspar exemple:

Nous avons identifié la structure, dans laquelle les variables occupent un nombre déterminé de bits. 2 + 2 + 4 elle donne 8 bit (Nous nous sommes alignés en octets de taille). Si vous ajoutez à cette structure encore non signé court cinquième : 5; – Il sera déjà impliqué 2 octet. Dans le second octet plantera naturellement 8 – 5 = 3 les bits, être non réclamés.

à la différence de associations (syndicat) la taille des champs de bits varie, quel, combien de bits le programmeur a ordonné. si commandé 7 bit (dire que les deux variables sur 3 les bits, et une – 1 bit), puis C ++ prendra un octet (8 bit) dans ces trois variables. Si le programmateur commande 11 bit, puis C ++ prendra deux octets (16 bit). Et dans le second octet ne sera utilisée que 5 bit, et le reste sont susceptibles d'être, queue comme inutile. Par conséquent, dans la description des champs de bits doivent être considérés comme un “alignement” d'octets. à savoir. distribuer en tant que variables, de sorte que chaque bit a été revendiquée. Pour l'alignement de la mémoire peut être utilisé sans nom bitfields.

Voici un autre exemple court, dans laquelle les champs de bits sont attribués à la date et l'heure pour une démonstration de cette technologie.