Archives de la catégorie: Les tableaux et les chaînes en C ++

Travailler avec des chaînes localisées




premier, vous devez être en mesure de le faire avec les chaînes localisées - un caractère enregistrement constantes large caractères localisés et de les distinguer des lignes conventionnelles carboniser[]. Pour cette ligne est écrit Éliminatoires de la L avant:

Le résultat sera:

Faites attention, la longueur de chaîne (nombre caractères) dans ce cas, nettement moins, que le nombre octet alloué à la chaîne (votre système d'exploitation, leur attitude peut être différente de, Je montre sous Linux, mais il ne modifie pas la technique de programmation).

Dans une telle ligne près de avec un égal succès peuvent être des symboles de la diversité: langues différentes, symboles mathématiques spéciaux, commun le leurke désignation de l'alphabet grec (un, e, Je, Fr., p, l, fa, Oh ...), notes de musique, etc.. Comment avez-vous, évidemment, savoir, tout aussi bien comme une partie de chaînes de caractères larges, avec un égal succès, et peut répondre aux caractères de l'alphabet latin (ASCII table principale), avec chaque symbole tiendra également 2 ou 4 octet (selon les accords adoptés dans le système d'exploitation), contrairement à l'habitude 1 octet.

Nous effectuons un certain nombre d'opérations avec les lignes russes, mais en les (tandis que) sous forme traditionnelle tableaux carboniser:

effectuer:

il semblerait, que (presque) tout fonctionne précisément un manuel, et pourquoi nous avons besoin d'importantes chaînes localisées? mais il est trompeur illusion! Le point ici est, que certains fonctions traditionnelles en minuscules (strcat(), strcpy(), strdup(), strstr() et al.) renverra les résultats corrects. Это потому что они выполняют операции над байтами, octet par octet, sans entrer dans la structure interne de caractères à copier.

Mais d'autres opérations (et faux résultat strlen() il a clairement points) ne fonctionnera pas correctement: strncpy(), strchr(), strsep(), strtok() et al. et они будут создавать вам очень неожиданные результаты, très difficile à interpréter. Regardezils comment fonctionne la chaîne octet inverse, et comment distinguer son travail sur les Anglais et ligne russe:

Il fonctionne si, и это определённо pas, ce que vous vous attendiez à recevoir:

net cela conclut notre discussion sur la possibilité de représenter les lignes de tableaux traditionnels russophones carboniser[] et le traitement de leurs fonctions traditionnelles en minuscules, et complète cet examen sortie: py gagner avec des lignes russes en tant que tableau carboniser boîte seulement:

et). ou lorsque l'on utilise des constantes de chaîne inchangées, seulement comme une ligne pour leur entrée-sortie inchangé;

b). ou pour le traitement de leurs fonctions (bibliothèque ou leur propre), qui ne tiennent pas compte de la structure interne des caractères, sans entrer dans la est contenuil est temps, et opérer avec eux simplement comme une séquence d'octets sans signification.

en tout sinon correctJe работа с кириллицей disponible seulement comme un large éventail de caractères localisés wchar_t (avec l'achèvementm строку широким нулевым символом L » 0′). Pour une représentation localisée des lignes de la bibliothèque C fournit large un ensemble de caractéristiques ligne, tout à fait semblable aux fonctions traditionnelles de minuscules, mais au lieu du préfixe str en leur nom préfixé par WCS: wcslen() au lieu de strlen(), wcsncpy() au lieu de strncpy() etc.

Voyons voir comment cela fonctionne sur l'exemple de:

Cette illustration est assez, pour voir les fonctions de manipulation directe des analogies avec des symboles wchar_t. la, qui a une certaine expérience de travail avec des chaînes carboniser sans effort Etalez larges cordes. locale Réglage de la langue (appel setlocale()) dispositifs O (terminal) - obligatoire, parce que le programme C / C ++ définit les paramètres régionaux par défaut “C” (età historiquement), ce qui permet la sortie seulement 128 caractères moins la moitié des caractères ASCII 8 bits.

Dans l'écriture illustré fonction définit les paramètres régionaux, utilisé dans le système d'exploitation par défaut - Je devine, que nous expérimentons dans le russophones le système installé. La nouvelle norme linguistique (C99) et introduit un nouveau format pour les fonctions de mise en forme de chaîne (printf(), sprintf()) - %ls, Cette chaînes de format wchar_t[].

Ten interne comme, Comme dans le cas des réseaux carboniser, convertit en C ++ de C, La bibliothèque C de introduit un analogue complet de la classe conteneur chaîne, mais contenant dans leur composition large des caractères localisés, et est connu sous le nom de la classe wstring:

Ici, la chaîne de sortie de caractères localisés (ws) il faut est émis vers le flux de sortie wcout (sens similaire cout, mais autre que cout).

Dans l'écriture illustré: lieu::global( lieu( “” ) ) - Ce paramètre de paramètres régionaux par défaut dans la manière OOP C de, semblable à, comme il a été démontré auparavant dans le mode de C.

lasondages IO chaînes de caractères large (à la borne ou à un fichier) séparée compliquée sujet, par conséquent un examen sera reporté à une seule note à ce sujet.

Bulletin de nouvelles leçons sur la programmation:

Localisation des chaînes de caractères




La localisation des chaînes de caractères dans c ++

Le grand nombre d'échantillons de code avec des chaînes de C / C ++ (dans toutes les sources publiées) Il fonctionne avec des réseaux zéro terminaux (ASCIZ) éléments carbonisent (dans le style de C), ou une chaîne de type à réservoir (dans le style de C ++), construit comme un add-on de tels tableaux. Tout cela fonctionne à merveille avec des cordes latine (Anglais) caractères, mais peut faire des courses sur les lignes, contenant des symboles de l'alphabet en langues étrangères (russe, chinois, Arabe et en hébreu). Il n'y a pas aussi simple que cela ... et très mal décrits dans la littérature, qui est compréhensible: auteurs anglophones accordent peu d'attention aux questions de localisation des langues étrangères, et auteurs nationaux, en majorité, la réécriture et l'adaptation des publications en langue anglaise, ne faites pas attention à cet aspect de la question.

langage C - un langage de programmation très ancienne, et C ++ hérite de formate et contraint par les exigences de compatibilité syntaxique avec C. à, ne pas avoir un C / C ++ problème avec ces lignes (appelé localisée) vous avez besoin de comprendre ce qui se passe avec ces ... Localisations

historique, symboles (carboniser) soumis (1963 année) standard ASCII plus jeune 7 les bits d'un octet, tandis que 8 bits supérieur destiné à un contrôle d'erreur, produite pendant le transfert de données. Ce codage permet de coder possible 128 différents symboles, et ce nombre est à peine suffisant pour les caractères de l'alphabet anglais (petits et grands), numérique (Code 0x30-0x39), gestionnaires (moins de code 0x20) et des caractères spéciaux. En ce qui concerne la soumission des alphabets nationaux, tapez la table de caractères alternatif, tels que KOI-7 pour la langue russe. Le passage à une table flux d'entrée-sortie pour symbole alternatif par le symbole avec le code 0x18 (le code est appelé: Contrôle de l'appareil 2) dans le courant, et revenir à la table principale ASCII - le symbole avec le code 0x17 (Contrôle de l'appareil 1).

plus tard, depuis les milieu des années 80, avec le temps IBM PC répandu et les remplacer d'autres familles d'ordinateurs, ASCII standard a été prolongée par le 8ème bit byte char, octet peut représenter 256 caractères: junior 127 représente la table ASCII originale (avec l'alphabet latin), et plus - alphabet national. mais, étant donné que les alphabets nationaux peuvent être diverses, est de soutenir chacun d'entre eux a été nécessaire pour entrer dans une page de code, par exemple, pour la langue russe, cela pourrait être la page CP-866 (MS в), CP-1251 (в de Windows), Non-8R (в UNIX, Linux) - et chacune de ces pages offre son, caractérisé par d'autres, l'ordre des caractères russes. ainsi, pour l'affichage correct (ou le décodage) une chaîne de caractères localisée, il est nécessaire de connaître la page de code dans lequel il est présenté.

à, de mettre fin à cette Babel de pages de code de langue, Il a été proposé (1991ville) représentation standard UNICODE, dans lequel le système de codage, chaque caractère est codé valeur de 32 bits (4 octet, mais pas toutes les valeurs 32 bits sont valides). Cette norme permet de coder un grand nombre de caractères de différents systèmes d'écriture. documents, codée standard UNICODE, peut comprendre un seul texte les caractères japonais et chinois, lettres latines, cyrillique, alphabet grec (un, e, Je, Fr., p, l, fa, Oh ...), symboles mathématiques, la notation musicale, symboles musicaux, symboles éteints, rare, peuples exotiques. Il n'y a pas besoin de changer la page de code. par exemple, Voici les quelques-uns des symboles de la langue, désigné comme “singaliskii”:

La première norme UNICODE a été libéré dans la 91 e année. Dernière au moment - en 2017 et il décrit 136755 différents symboles.

Mais UNICODE - est toujours seule représentation standard de chaque caractère. Pour représenter ce personnage dans un système d'exploitation particulier (ou le langage de programmation) besoin de plus système de codage de caractères Unicode.

  • système de codage est largement utilisé:
    UTF-32 - utilisé pour représenter chaque caractère 4 octet, La valeur numérique directe code UNICODE
  • UTF-32 - pour représenter les symboles les plus couramment utilisés 2 octet (premier 65536 positions), et le reste sous la forme d'un « paires de substitution ». Ce codage est utilisé sur les systèmes d'exploitation de Windows à partir de Windows NT.
  • UTF-32 - pour représenter chaque caractère utilise une séquence de longueur variable d'octets: à partir de 1 octets pour les caractères ASCII de la table principale, à 6 octet pour les caractères rarement utilisés (caractères de l'alphabet russe sont codés avec 2 octets). Ce codage a été créé plus tard que les autres systèmes d'exploitation pour le Plan 9 et Inferno en 1992. Ken Thompson et Robert Pike avec des collègues, et il est entré comme un codage unique et essentiel des chaînes de caractères dans la suite des langages de programmation Python et Go. Ce codage est utilisé, aujourd'hui, partout, dans les systèmes d'exploitation POSIX / UNIX, Linux.

De retour à la, que C / C ++ ancienne famille des langages de programmation, pour les représenter en caractères localisés nécessaires pour introduire un nouveau type de données - caractères larges wchar_t au lieu de char (le type de données est apparu dans la norme C89, mais, pleinement avec le soutien de l'API, Seulement dans la norme C99). Au lieu de la ligne C des fonctions de la bibliothèque sous forme str *() pour une large offrir à leurs homologues complètes, mais comme WCS *() (au lieu du préfixe préfixe str écriture WCS). Différents systèmes peuvent avoir différents bits wchar_t (sous Linux est int32_t, в de Windows int16_t) mais pour un programmeur qui n'a pas d'importance et ne crée pas de différences.

Pour le travail et la conversion des séquences multi-octets enregistrés dans le codage UTF-8 en C / C ++ introduit famille de fonctions mb *(): mbtowc(), mblen(), mbstowcs(), wcstombs() et al. Il est un mécanisme de conversion mutuelle entre tableau de caractères[] (qui a également exprimé des chaînes de caractères UTF-8) и wchar_t[]. Si vous n'êtes pas face à l'encodage UTF-8 (qui se produit probablement dans Windows), alors ce groupe de fonctions vous ne devriez pas prendre.

De même,, classe à la place de conteneurs C ++ classe chaîne introduit un conteneur similaire caractères larges wstring.

Plus précisément sur la technique des chaînes larges localisées seront discutées dans le prochain article. Entre-temps, le 1er exemple élémentaire ... sans commentaire - comme une occasion de réflexion (identifier et expliquer, que l'appel strlen() dans chaque cas, donne le nombre d'octets dans une chaîne ne correspond pas visuellement nombre apparent de lettres dans ce):

P.S. Avec les détails sur la localisation en C / C ++ et les chaînes localisées, qui sont intéressés plus en détail, peut être lu ici: localisation Langue de C / C ++ localisation Langue de C / C ++ - il y a une explication plus 22 pages de formats de documents de bureau.

Bulletin de nouvelles leçons sur la programmation:

Classes cordes et wstring. partie 5




c ++ débutants, classe string, classe wstring, La STL de контейнеры C , Standard Template Library, c ++ conteneurLa classe de chaîne bibliothèque standard de C est bien connue et utiliser facilement. Mais pas tout le monde et ne pas penser toujours sur le fait, la classe chaîne, avec quelques différences dans les détails - ce qui est le vecteur de conteneur: vecteur<carboniser> . vérité, Il a complété certaines fonctionnalités (mais ce code et vous serez capable d'écrire):

  • méthode Taille() zadublirovan par longueur(). Ils sont complètement identiques, pour des raisons de commodité. Juste pour avoir une longueur de ligne plus naturelle, quelle taille;

  • opérateurs surchargés définies +, += que le retour concaténation (union) temps;

  • certainement concepteur, initialise chaîne lorsque vous créez la valeur initiale de la chaîne de caractères dans le format ASCIIZ (carboniser* - Un pointeur sur un tableau de caractères en fin de style C à zéro);

  • certaine méthode c_str(), qui renvoie un pointeur sur le contenu interne de la chaîne dans le format ASCIIZ. Puisque tel est le sens intérieur, il peut être utilisé, mais ne pas essayer de le changer. Ce ne sera pas bien finir.

Dans tous se comportent exactement de la même ligne que le reste de la vecteur, et qui leur sont applicables toutes les opérations sur les vecteurs. entente, qui est une classe chaîne (vecteur<carboniser>) peut se permettre de créer un certain nombre d'effets inattendus. par exemple, parce que le caractère nul n'est pas vecteur<carboniser> pas de signification particulière (Contrairement à la ligne C), то его тоже вполне можно «заталкивать» в конец chaîne. Тем самым можно поместить в единственную переменную chaîne toute une série de C-cordes, ou même l'ensemble du texte.

voici, comment mettre de la même manière tous variables d'environnement (Environnement) le système d'exploitation un variable chaîne:

note: Ici, nous avons utilisé l'un des plus permis forme les principales fonctions du programme Principal() – 3-m paramètre qui est un tableau de pointeurs cordes (carboniser*) variables d'environnement (Environnement). Un signe de la fin d'un tableau de chaînes envp Il est un pointeur NUL (ceux. Documentation du système d'exploitation).

résultat:classe string, classe wstrting, La STL de контейнеры C , Standard Template Library, c ++ conteneur

Qu'en est-il du type de wstring? wstring - L'équivalent de vecteur<wchar_t> , vecteur "large", caractères localisés, représentant l'encodage de caractère international Unicode. Analyse des contenus (recherche, sélection de mots, les sauts de ligne, etc.) Russophones ou toute autre ligne (exemple chinois) Elle ne peut se faire sous la forme wtring (pas chaîne). При этом необходимо предварительно установить правильную локаль для программы (la localisation par défaut “C” Elle suppose que les caractères ASCII dans la représentation 7-bit). Pour IO wstring cours d'eau offertes, respectivement WCIN et wcout, au lieu de gin et cout, destiné à chaîne. Il est écrit comme un rappel.

A titre d'illustration, considérons une analyse de chaîne localisée wstring sur le thème de, que ce soit un palindrome.

Les espaces et la ponctuation sont ignorés pour les comparaisons:

La lettre L à l'avant d'une constante de caractère, que la ligne contient plus , écrit un caractère large wchar_t

résultat:classe string, classe wstrting, La STL de контейнеры C , Standard Template Library, c ++ conteneur

Localisation - c'est un sujet complètement différent, qui nous mènera loin de notre thème principal. Discussion de la localisation et caractères larges en C / C ++ peut être lire ici.

sûrement, cette partie est pertinent de noter les faits suivants, relatives à tous les types de conteneurs STL. Lorsque vous créez un constructeur de conteneurs sans paramètres, crée un conteneur vide, Plus ne contenant aucun élément (blanc pour l'avenir remplir le récipient). La taille du récipient (méthode Taille(), ou longueur() pour la période) zéro. Mais plus efficace, en termes de performances, L'inspection des conteneurs pour la méthode à vide vide(), qui est présent dans tous les types de contenants.

Bulletin de nouvelles leçons sur la programmation:

Les tableaux de dimension statique et dynamique. STL Часть 1




Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Libraryavant, vous commencez à digérer les types de conteneurs STL, raisonnable pour vous rafraîchir la mémoire sur l'organisation des réseaux de C et C. Parce que les conteneurs STL - ce sont des formes alternatives d'organisation de la collecte de données, exempt des limitations des tableaux.

Les tableaux - une des formes les plus utilisées de ces organisations, et historiquement une des premières formes, apparu dans les langages de programmation (Langues fin 50-s du XX siècle). tableau - Une représentation d'un ensemble consécutive similaire élément. D'une importance fondamentale dans cette définition sont 2 actuellement, qui doivent être remplies pour un tableau nécessairement:

  1. Chaque élément du tableau, vous devez spécifier nombre son emplacement dans une séquence des éléments similaires.

  2. Tous les éléments du tableau doivent nécessairement être odnotypnыmy. Quiconque est familier et compréhensible à la définition la plus simple, par exemple, réseau entier: int tableau[100] . Mais cela ne signifie pas, que les tableaux peuvent être organisés types que de simples intégrés de C ++. Le réseau peut être organisé des objets, les variables de tout type composite (classe, structure) et la complexité. La seule limitation est que, que tous les éléments de la même matrice doivent être du même type. par exemple, peut donc être décrite par un groupe d'étudiants:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

En cette circonstance très important - les types d'éléments dans le tableau - nous reviendrons à l'avenir.

Depuis l'époque des premiers langages de programmation (FORTRAN et d'autres.), réseaux impose de fortes restrictions: taille tableau doit être déterminé seulement entier constant, dont la valeur devrait être certainement de au moment de la compilation code. La même restriction conservée dans C, qui est devenu l'ancêtre de C ++. par exemple:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

En C ++ (classiquement, sauf pour les normes de ces dernières années!) cette restriction légèrement affaibli avant, que taille la matrice peut être une constante entière, dont la valeur peut calculé de au moment de la compilation code. par exemple, si:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template LibraryDans tous ces cas,, Après avoir déterminé la taille du tableau est fixé et nous ne serons pas en mesure de augmenter sa taille (si, par exemple, pendant les calculs seront, que nous n'avons pas assez de cette taille). Pour certains tableaux sont appelés tableaux avec statiquement annoncé (au moment de l'écriture du code) taille.

note: parce que, que tous les éléments de la matrice sont disposés en série (1-règle e de ce qui précède), pour calculer la taille de la matrice (à ses yeux) Il peut être utilisé comme indiqué dans l'exemple de la tour: taille de la matrice est la longueur de l'ensemble du réseau,, divisé par la longueur de l'un de ses éléments (car ils sont tous du même type).

Il peut sembler, que les différents réseaux sans la taille définie, mais avec une liste de valeurs d'initialisation:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Mais il est pas! Juste ici constance sens taille déclarer des tableaux est retiré de la liste des valeurs, et est égale à, dans l'exemple illustré 5.

la seule façon de créer un tableau, Classique C et C ++, taille des éléments N, calculé au moment de la création du réseau (runtime) - Il était une façon d'allouer dynamiquement un tableau. Dans laquelle C et C ++ est, respectivement:

par exemple, si:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Les normes les plus récentes (C99, C ++ 11) l'expansion fait, qui permettent la création de local tableaux avec fonctions Dimensions, calculable à l'entrée de la fonction. Dans ces conditions, le tableau sera alloué sur la fonction de la pile. Ceci est très important, quand nous ne pouvons pas savoir à l'avance la taille des données traitées. A titre d'exemple, regardez le problème de trouver tous les nombres premiers, ne dépassant pas N (tamis d'Eratosthène), où N est définie lorsque le programme démarre.

Le code que nous avons obligé de compiler indiquant la norme du C 2011 année (ou options de compilation, ou recueillis par les propriétés du projet):Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Mais même après toutes les extensions, tableau simple, comme une forme d'un ensemble d'objets, Il ne suffit pas souple. Le principal facteur limitant:

  • On ne sortirait pas déterminée par la taille de la matrice (constante ou un calcul pour déterminer le point) augmenter encore cette taille ne peut pas (si vous ne l'avez pas deviné à l'avance la taille requise, ou non prévu un stock suffisant).

  • En C / C ++ règles lors de l'appel des fonctions à la place du tableau en tant que paramètre au lieu d'un tableau est passé à son pointeur commençant (l'adresse du premier élément). ceci permet fortement améliorer l'efficacité de nombreux algorithmes de calcul, mais la perte d'informations sur la taille de la matrice, et il est nécessaire de transmettre un paramètre distinct. par exemple, si nous voulions former un tamis d'Eratosthène ne fonctionne pas Principal(), mais dans une fonction distincte, alors nous aurions à générer comme un défi erastof ( une, n ).

  • De nombreuses opérations de tableau intuitivement simples provoquent des difficultés. par exemple: un élément de tableau 15-élément numéroté 10 il faut insérer entre les éléments 2 et 3. En même temps que). tous éléments 3 sur 9 Vous devez copier une position vers la droite, b). cela doit être fait dans l'ordre décroissant de 9 à 3 et). pour tous les indices de ces opérations doivent surveiller en mode manuel.

Exigences de pratique exigé plus, qui a donné lieu à des conteneurs STL (Standard Template Library).

Bulletin de nouvelles leçons sur la programmation:

tâche: tableau Palindrome

Vérifiez le numéro dans le tableau de la présence de palindrome (il est à travers un réseau).

avec la solution du problème, palindrome, la présence d'un palindrome dans le tableau C ++, le nombre de palindrome, pratique de programmation
Détermination palindrome – site wikipedia

décision:

Le seul endroit, quel code peut entraîner des difficultés, est une affectation logique:

Il y a des personnages vérifiés égalité, otstoyashtih de je position à partir du début de la fin de la ligne d'étude. Si le résultat est négatif (pas égal), alors il est pas un palindrome, et peut laisser le cycle, et en outre la comparaison n'a pas été effectuée. variable poli ici il ne faut pas, et à gauche pour plus de clarté – vous pouvez prendre une décision (si) directement à partir des conditions contrôlées.

Des contrôles sont effectués jusqu'au milieu lignes, parce que la poursuite du cycle (en raison des conditions de symétrie) Seulement ensuite répéter, ce qui a été fait précédemment.

exécution:

avec la solution du problème, palindrome, la présence d'un palindrome dans le tableau C ++, le nombre de palindrome, pratique de programmationnote:

Comme on peut facilement noter les lecteurs d'observation, Ce code va vérifier sur le palindrome est non seulement un nombre record, mais une chaîne de texte, lorsque ces conditions sont remplies:

  • ligne contient seulement latin (pas russe, pas chinois, …) courrier (lettres internationales en Unicode semblent être plus que le 1er octet);
  • ligne ne contient pas d'espaces vierges et des signes de ponctuation (parce que les définitions de ces symboles sont palindromes, habituellement, exclus des comparaisons: “Je ydu tribunaux avec l'épée“, “Sur le front, imbécile“).

Bulletin de nouvelles leçons sur la programmation:

Bubble tri (tri “bulle”)




пузырьковая сортировка с++, сортировка пузырьком с++, bubble sort c ++

Le tableau d'algorithme de tri “bubble sort” On voit dans presque tous les manuels sur la programmation en C ++. Il est facile à comprendre pour les débutants. Il est clair et très simple. Dans la pratique, cet algorithme est presque personne utilise, car il est lent et il y a un des algorithmes plus rapides et plus avancés. Nous analysons aussi parce, ce genre “bulle” – Elle constitue la base de certains des algorithmes plus efficaces, qui sera présentée dans les articles suivants. cette “rapide” tri, “pyramidal” le tri et “shyeikyernaya” tri.

Comment ça marche? “bulle” tri? Supposons que nous avons unsorted tableau nombre de 5 éléments et nous placeront les valeurs en ordre croissant. Pour plus de clarté,, la figure représentent la matrice verticalement “Le tableau original”.

пузырьковая сортировка с++, сортировка пузырьком с++, bubble sort c ++

algorithme de tri “bulle” est répétée passe à travers le tableau à l'aide boucle imbriquée. Avec chaque passage à travers le réseau sont comparées entre une paire “voisin” élément. Si le nombre de certaines des paires par rapport sont disposées dans l'ordre correct – est échangé (doublage) les valeurs de la matrice de cellules. Métaphoriquement parlant, dans notre exemple 2 “plus facile” que 3 – de sorte que le change a, plus 2 “plus facile” que 7 – partager à nouveau, etc.. En comparant le zéro et le premier élément de notre dessin pas d'échange, depuis 2 “plus lourd” que 1. ainsi, une “poumon” sens, comme une bulle dans l'eau, monte jusqu'à la position souhaitée. Voilà pourquoi le nom de l'algorithme.

Considérons un algorithme de tri “bulle” dans:

Examinez attentivement l'exemple des commentaires détaillés, vous devriez être clair. Le résultat à l'écran tels:

bubble sort c ++ débutants, сортировка пузырьком с++, bubble sort c ++

Vous pouvez ajouter ce qui suit: après, que la boucle interne fonctionnera une fois, la valeur minimale de la matrice aura une cellule zéro. Par conséquent, au cours de la seconde passe, une autre valeur minimale du restant devra être placé dans la cellule suivante (je + 1). Ainsi, il n'y a pas besoin de comparer entre eux tous les éléments du tableau et de nouveau le nombre de valeurs traitées est réduite par 1. lors du tri “bulle” Vous devez passer TAILLE – 1 itérations de la boucle externe,, puisque le comparer un élément avec lui-même – Cela n'a aucun sens.

Il ne faut pas oublier que, ce que nous avons parlé au début – algorithme “bulle” le tri est inefficace et lent. Si nous avons un réseau partiellement trié et que vous voulez déplacer vers le haut d'une seule valeur, il faudra encore passer par tous les cycles d'itération. Autrement dit, pour faire une comparaison déjà trié tableau de valeurs, mais il est déjà possible et faire.

Améliorons cette situation. Ajoutez le code dans un autre peremennuyu-“drapeau”, qui donnera à connaître, s'il y avait un échange de valeurs dans une itération donnée de la boucle externe ou non. avant, comment se rendre à la boucle interne, “drapeau” sera déchargée dans 0. Si les valeurs d'échange dans ce cycle se produisent – “drapeaux” Il sera réglé 1, sinon – il sera égal à 0. Dans ce dernier cas, (si “drapeau” est 0) – Échange n'a pas été entièrement triée tableau. Par conséquent, le programme peut sortir de la boucle au début, afin de ne pas perdre de temps sur des comparaisons de suivi inutiles.

Prenons l'exemple suivant:

Nous voyons une image après le démarrage:

bubble sort c ++ débutants, сортировка пузырьком с++, bubble sort c ++

On peut constater que le programme imbriqué boucle à travers la matrice 1 temps, valeur décalée 2 au bon endroit et finalisé. Et ici, ce qui est sur l'écran, si vous commentez toutes les lignes de code, où peremennaya-“drapeau”:

bubble sort c ++ débutants, сортировка пузырьком с++, bubble sort c ++

Le programme est inactif 4 plier “chassé” le tableau, bien que la valeur de 2 déplacé dans la cellule souhaitée a la première passe imbriquée boucle.

Le réseau a une vidéo fraîche (auteur: AlgoRythmics ). il fournit “bulle” Tri une version améliorée (lorsque les éléments de matrice ne sont pas triées par rapport à l'autre). la seule – dans nos exemples, les valeurs de comparaison à partir du dernier élément. Et comme l'a proposé, – de zéro à la dernière. Regardez et voyez, comme éléments du tableau sont déplacés vers les bons endroits :)

Bulletin de nouvelles leçons sur la programmation:

Deux dimensions des tableaux en C ++




двумерные массивы c++, двумерные массивы с++, многомерные массивы с++

En plus des tableaux à une dimension, vous pourriez avoir besoin pour l'utilisation d'un tableau multidimensionnel (bidimensionnel, tridimensionnel…). Cette leçon sera considérée tableaux à deux dimensions. Ils sont les plus courantes, et le reste sont extrêmement rares.

Nous avons déjà discuté dans les articles précédents réseaux bidimensionnels et Si-stroki (tableaux de caractères).Il a dit, que les éléments de réseau sont placés consécutivement dans la mémoire – élément par élément. Visuellement, ils peuvent être représentés comme une seule ligne dans la mémoire de données. Pour accéder à un élément du tableau, suffit d'indiquer le nom et l'index article. La première différence est une matrice bidimensionnelle d'unidimensionnel – les éléments comprennent deux indices: int arr [3][4]; Les données de ce tableau peuvent être représentés, une table: 3 x 4.

двумерные массивы c++, многомерные массивы c++

Le premier nom de l'index de tableau – Cet indice de ligne, deuxième – index de colonne.

двумерные массивы c++, многомерные массивы c++

Lorsque vous avez regardé ces images, Il peut être dit à propos de la matrice à deux dimensions – un tableau de, dans lequel chaque élément de réseau est également. int arr [3][4]; – est une matrice de 3 éléments, dont chacun est un tableau de 4 éléments.

Ceux-ci matrice bidimensionnelle et sont agencés de manière séquentielle dans la mémoire, mais par la ligne. Premier indice de ligne 0 – les cellules du 0e-3e, dessous de la ligne avec l'index 1 – les cellules du 0e-3e …

Ce qui peut stocker les éléments de tableaux à deux dimensions? par exemple, Vous pouvez stocker le nombre de places de stationnement dans le parking à plusieurs étages (6 et sur chacun des étages 15 places de parking). Pour ce faire, déclarer un tableau à deux dimensions int floorsAndParkings[6][15]; et à écrire dans son numéro de cellule de sièges à chaque étage. Le tableau à deux dimensions peut stocker le C-line. par exemple: carboniser someStr [3][256]; Donc, nous avons annoncé un tableau, qui gardera 3 des lignes de 256 chacun des personnages.

L'initialisation d'une matrice bidimensionnelle.

Enregistrer les données dans le tableau à deux dimensions peuvent être dans sa déclaration. Prenons l'exemple d'une voiture lieux. Laissez-nous dans le stationnement 2 sur le sol 4 espace de stationnement sur chaque. Nous déclarons un tableau et initialisons:

int floorsAndParkings[2][4] = { { 1, 2, 3, 4 }, { 1, 2, 3, 4 } };

Pour initialiser cette regardé plus lisible, arranger pour:

Comme vous pouvez rappeler, selon la norme C ++ 11, marque = vous pouvez manquer. Les chaînes sont initialisés sur le même principe:

Comment afficher un tableau bidimensionnel de données? Vous pouvez aller un long chemin et se référer à chaque élément manuel:

двумерные массивы c++, многомерные массивы c++

La sortie du tableau à deux dimensions de C-chaînes sur l'écran un peu plus facile, puisque nous avons besoin de seulement préciser le nom de l'index du tableau et la ligne. En outre, le flux de sortie cout seule affiche tous les éléments du tableau de caractères, jusqu'à ce qu'il détecte ' 0'

двумерные массивы c++, многомерные массивы c++

bon! Et si nous avons besoin pour remplir une des données de tableau et d'affichage int floorsAndParkings[20][100] ou omble someStr[50][256]? Cela peut être un travail ingrat dix fois pour faciliter, en utilisant des cycles. plus précisément boucles imbriquées.

Prenons un exemple avec parking. Voir schéma de stationnement de l'utilisateur: étages et un espace de stationnement. Pour réserver une place, il doit choisir le numéro de plancher et le numéro de siège. Après la réservation, – valeur d'écriture 0 dans la cellule appropriée, cela signifierait “endroit très fréquenté”.

nous avons utilisé pour la boucle ,sur les lignes 15 – 24, pour écrire des données réseau et les afficher simultanément sur l'écran. Si elle est présente ce tableau à deux dimensions comme une table – la boucle externe pour passe dans les indices de lignes – 0-b à 6-j. boucle imbriquée – index sur les colonnes (les cellules des lignes de la table) – de 0 à j-9-j. lignes 32 – 82 Il est le cycle faire pendant. Son rôle dans la, offre encore et encore pour réserver une place pour la voiture, Il est requis par l'utilisateur. Il y a deux boucles imbriquées faire pendant. Ils mettent en œuvre une variété d'étages et parking avec protection contre les valeurs d'entrée incorrectes. lignes 57 – 81 comprennent bloc sinon , qui, dans le cas d'un bon choix de l'utilisateur affiche un message sur la réservation réussie. Si la place est occupée (cellule contient une valeur 0) – aviser le, Il propose une gamme de sol et répéter le site et affiche le système de stationnement mis à jour, qui a marqué sièges réservés.

Il fonctionne comme ceci:

двумерные массивы c++, многомерные массивы c++

extension…

двумерные массивы c++, многомерные массивы c++

Je recommande de regarder la vidéo. Tableaux à deux dimensions avec un 13 minutes.

Je propose de résoudre plusieurs tâches relatives Deux dimensions des tableaux.

Partager des liens vers des articles de notre site avec vos amis sur le réseau social. boutons sociaux. réseaux conformément à l'article. merci d'avance!

Bulletin de nouvelles leçons sur la programmation:

Fonctions de chaîne de manutention en C ++




функции strlen (), strcat (), strcpy (), strcmp () в C++

après, que nous connaissons chaînes et des tableaux de caractères en C ++, examiner les fonctions les plus courantes pour travailler avec eux. La leçon sera entièrement construite dans la pratique. Nous allons écrire leurs propres programmes-analogues pour le traitement des lignes et parallèlement à l'utilisation des fonctions de la bibliothèque standard cstring (string.h – dans les anciennes versions). Donc, vous êtes sur le point de se présenter, comment ils fonctionnent. Les fonctions de la bibliothèque standard cstring sont:

  • strlen() – calcule la longueur de la chaîne (nombre de caractères à l'exclusion \0);
  • strcat() – Il combine les chaînes;
  • strcpy() – copie les symboles d'une ligne à l'autre;
  • strcmp() – compare deux chaînes ensemble .

Il est certainement pas toutes les fonctionnalités, seules celles, qui est recouverte à l'article.

strlen() (la longueur des mots – longueur)

Notre programme, qui calcule le nombre de caractères par ligne:

Pour calculer les caractères d'une chaîne d'une durée indéterminée (que l'utilisateur pénètre), nous avons utilisé le cycle tandis que – lignes 13 – 17. Il passe par toutes les cellules du réseau (tous les caractères de la chaîne) alternativement, en commençant par zéro. Lorsque, à un cycle de l'étape pour répondre Box ourStr [amountOfSymbol], qui stocke le symbole \0, symboles de pause du cycle de buste et augmenter le compteur amountOfSymbol.

Ainsi, le code ressemblera, le remplacement de notre section de code sur la fonction strlen():

Comme vous pouvez le voir, Ce code de. Il n'a pas eu à déclarer des variables supplémentaires et utiliser une boucle. Le flux de sortie cout nous sommes passés dans la chaîne de fonction – strlen(ourStr). Il est suggéré que la longueur de la ligne de retour et le numéro de programme. Comme dans le code analogique précédent, symbole \0 pas inclus dans le nombre total de caractères.

Le résultat est le programme dans le premier et le second semblable:

функция strlen () в C++

strcat() (concaténation de mots – composé)

programme, que l'extrémité d'une ligne, ajoute la deuxième ligne. en d'autres termes, – Il combine deux lignes.

Selon les commentaires dans le code devrait être tout clair. Ci-dessous, nous écrivons un programme pour effectuer la même action, mais en utilisant le strcat(). Dans cette fonction, nous allons donner deux arguments (deux lignes) – strcat(someText1, someText2); . La fonction ajoute une chaîne someText2 à la ligne someText1. Dans le même symbole ' 0' à la fin someText1 Il remplace le premier caractère someText2. Elle ajoute également une finale ' 0'

La mise en œuvre de l'union de deux lignes, En utilisant la fonction standard, Je pris une ligne de code dans le programme – 14-rangée.

résultat:

strcat c++, strcat_s c++

Que doit prêter attention à la première et deuxième code – la taille du premier caractère de la matrice doit être suffisante pour que la deuxième rangée de caractères locaux. Si la taille est insuffisante – peut se produire la fin du programme anormale, depuis l'enregistrement de la ligne de mémoire, qui occupe la première rangée. par exemple:

Dans ce cas,, strokovaya constante “Apprendre C ++ c nous!” Il ne peut pas être écrit dans le tableau someText1. Comme il n'y a pas assez d'espace, pour de telles opérations.

Si vous utilisez une version récente de Microsoft Visual Studio environnement de développement, vous pouvez rencontrer l'erreur suivante:: “Erreur C4996: 'strcat’: Cette fonction ou variable peuvent être dangereux. Pensez à utiliser strcat_s au lieu. Pour désactiver deprecation, utilisation _CRT_SECURE_NO_WARNINGS. Voir l'aide en ligne pour plus de détails.” En effet,, qui a développé une nouvelle version, plus sûr de la fonction strcat – il strcat_s. Elle se soucie, afin qu'il n'y ait débordement de tampon (tableau de caractères, qui a produit enregistrement deuxième ligne). Environnement vous permet d'utiliser une nouvelle fonction, au lieu du jour. En savoir plus sur ce qui peut être sur le site msdn. Cette erreur peut se produire, si vous utilisez la fonction strcpy, qui sera discuté ci-dessous.

strcpy() (copie Slovénie – copier)

A vendre jusqu'à une rangée et l'insérer à la place d'une autre rangée.

Appliquer la bibliothèque de fonction standard cstring:

Essayez de compiler et d'abord, et un second programme. Vous verrez ce résultat:

strcpy c ++

strcmp() (Slovénie comparer – comparaison)

Cette fonction est conçue de sorte: Elle compare le caractère de deux C-string par le caractère. Si les chaînes sont identiques (et les symboles et leur nombre) – la fonction renvoie au numéro de programme 0. Si la première ligne est plus longue qu'une seconde – renvoie au numéro de programme 1, et si moins, la -1. nombre -1 à l'époque, lorsque la longueur des lignes est, mais les lignes des caractères ne correspondent pas.

strcmp c ++ programme avec strcmp():

strcmp c ++

Partager sur les réseaux sociaux nos articles avec vos amis, qui apprennent également les bases de la programmation en C ++.

Sur notre site a déjà la possibilité de souscrire, recevoir une notification des nouveaux articles. Pour vous abonner – entrez votre e-mail ci-dessous.

Bulletin de nouvelles leçons sur la programmation:

Cordes en C ++, et des tableaux de caractères





строки в С++

Avec des lignes que nous travaillons dans presque chacun de notre programme et de cette leçon. Plus précisément avec des constantes de chaîne – une séquence de caractères entre guillemets. Nous avions souvent pour afficher certaines informations. par exemple:

строки в С++

Texte entre guillemets est une constante de chaîne. Les guillemets sont utilisés pour déterminer le début et la fin d'une constante de chaîne, et il est souvent.

Très souvent, il est nécessaire non seulement d'imprimer des messages texte au cours du programme, mais aussi de travailler avec un certain texte, stocker quelque part, reportez-vous à modifier et, nécessité. K constantes de, discuté ci-dessus, nous ne pouvons pas appliquer au programme, par exemple, l'écraser (nous ne savons pas son nom ou une adresse dans la mémoire). Maintenant, vous en apprendrez davantage sur l'une des façons de travailler avec des chaînes en C ++. Plus tard, nous apprendrons plus à sens unique – en utilisant classe chaîne.

Ainsi, la première: en C ++ est utilisé pour stocker des tableaux de caractères de chaînes. Ce sont les mêmes tableaux, comme vous et moi avons déjà discuté dans l'article sur tableaux en C ++, mais ils ne stockent pas de données numériques, et le caractère. Vous pouvez imaginer les personnages du tableau en série dans les cellules de mémoire adjacentes – dans chaque cellule stocke un symbole et occupe un octet. Un octet parce que, que chaque élément est un tableau de caractères тип omble chevalier. Le dernier caractère de chaque symbole est une ligne \0 (caractère nul). par exemple:

строки в С++, символьные массивы в С++

le texte, l'espace, y compris, Il se compose de 11 caractères. Si la dernière cellule est telle . (point), pas de caractère nul \0 – le compilateur n'est pas la ligne. Et le travail devrait être avec cet ensemble de caractères, comme avec un réseau régulier – écrire à chaque cellule séparément et affichée caractère par caractère (en utilisant le cycle):

строки в С++, символьные массивы в С++

Heureusement, C ++ a une façon beaucoup plus pratique pour initialiser et accéder aux tableaux de caractères – rangée. Pour ce faire, le dernier caractère du tableau doit être un caractère nul \0. Il est celui qui fait l'ensemble d'une chaîne de caractères, travail qui, beaucoup plus facile, qu'avec un tableau de caractères.

ainsi chaîne déclarée – Nous créons un type tableau carboniser, Taille entre crochets est facultatif (il calcule le compilateur), opérateur = et des guillemets doubles écrire le texte de votre choix. Autrement dit, nous initialisons un tableau de constante de chaîne:

Prescrira le caractère nul n'est pas nécessaire. Il est présent implicitement et ceci est ajouté à chaque chaîne automatiquement constante. ainsi, malgré le fait que nous voyons 11 caractères par ligne, taille du tableau sera 12, depuis \0 aussi un symbole et occupe un octet de mémoire. Il prend la dernière cellule du tableau de caractères. Comme vous pouvez le voir, pour la sortie de la chaîne, suffit de se référer à elle par son nom: cout << str << endl; cout Il affiche un caractère par caractère, jusqu'à ce qu'elle rencontre dans l'une des cellules du réseau de nouvelle ligne \0 et la sortie est interrompue. Un tel appel au tableau de caractères ordinaire (tableau sans \0) inacceptable. Étant donné que le compilateur pour afficher les caractères sur l'écran, allant même au-delà de la portée du tableau, alors qu'il n'a pas rencontré un certain symbole de cellule de mémoire \0. Vous pouvez essayer de remplacer dans le premier exemple, au lieu de l'opérateur du cycle cout << str << endl; et voir, ce qui se passe. J'ai trouvé cette façon:

строки в С++, символьные массивы в С++

Je veux attirer votre attention sur la différence entre une constante de caractère (guillemets simples – 'F', '@' ) à partir d'une constante de chaîne (guillemets doubles "F", "@" ). pour la première, le compilateur C est alloué de un octet de stockage en mémoire. Pour le symbole enregistré entre guillemets, deux octets de mémoire seront attribués – pour la plupart des caractères et le zéro (ajouté par le compilateur).

Que faire si la ligne demandera à l'utilisateur avec le clavier? Dans ce cas, vous devez déclarer tableau carboniser indiquant sa taille suffisante pour stocker le caractère d'entrée, y compris \0. Ne pas oublier que le caractère nul. Si vous devez stocker 3 caractère du tableau, sa taille doit être un plus – à savoir 4.

строки в С++, символьные массивы в С++

initialisation à l'aide des guillemets vides, nous attribuons une valeur à chaque élément du tableau \0. Ainsi, la chaîne est effacée de “déchets” d'autres programmes. Même si l'utilisateur entre un nom contenant moins de caractères, après le nom est un symbole \0. Cela évitera des erreurs inutiles. À la mémoire de cette ligne ressemblerait à ceci:

строки в С++, символьные массивы в С++

à propos, si l'on suppose remplacer la cellule 11-ème du tableau – str[11] = ' 0';

строки в С++, символьные массивы в С++

et un réseau d'affichage à l'écran, on ne voit que purecodecpp malgré le fait, dans les cellules 12, 13, 14 ont été stockés symboles. caractère nul jouera un rôle majeur dans ce qui porte à l'écran et tout, qui est derrière elle ne sera pas affiché.

Parler de mettre des chaînes clavier Détail. le fait, qu'il ya des problèmes à connaître et qui doit apprendre à résoudre. Le programme suivant en entrant dans les lignes ne sont pas tous sera si lisse, comme nous voulons:

строки в С++, символьные массивы в С++

Ne vous inquiétez pas jusqu'à plus, cette entrée par l'intermédiaire gin neobhodimo latine productionodit. A propos de la manière d'introduire correctement l'alphabet cyrillique sera discuté dans un article distinct. Ici vous pouvez voir, que la citation, nous avons introduit, mais quand il est démontré, Nous voyons le premier mot uniquement. voici, que nous ne pouvons pas entrer un caractère nul à partir du clavier, et gin écart perçu, et l'onglet newline, comme la fin de la ligne. C'est, dans ce cas, gin J'ai lu le premier mot uniquement, une virgule et ajouté marquer automatiquement la fin de la ligne. Le reste des entrées placées dans la file d'attente d'entrée.

Ce problème est résolu simplement. En C ++, il existe des fonctions obtenir() et getline() , que nous pouvons utiliser avec gin. ils ressemblent à, mais le plus souvent utilisé est getline(). Dans cet article, nous ne considérerons pas la différence entre les. Remplissez notre entrée de programme getline ():

строки в С++, символьные массивы в С++

vous voyez, entre parenthèses, nous précisons deux arguments aux fonctions – dans ce qui est considéré comme un ensemble de symboles (nom du tableau) et la taille de la matrice – rangée 11. Le résultat nous convient – afficher toutes les correcte. Kinkgatlin() Il se lit dans un tableau de la ligne entière, y compris les espaces et les onglets, jusqu'à ce qu'une presse Entrer ou jusqu'à ce que la taille de la matrice est dépassée. newline caractère dans le tableau ne sera pas enregistré, et est remplacé par un caractère nul.

En C ++, les fonctions de manipulation chaîne, il y a beaucoup, dont nous parlerons dans le prochain article. Dans ce document, nous parlons des caractéristiques, ce qui permet d'écraser la ligne, unir les, par rapport à l'autre, etc..

En plus de la lecture, il est souhaitable de voir le tutoriel vidéo. Lignes 7 minutes:

Partager nos articles avec vos amis sur les réseaux sociaux – c'est le meilleur merci. Et si vous avez des questions et suggestions – laisser des commentaires.

Bulletin de nouvelles leçons sur la programmation:

Les tableaux en C ++ (vidéo)




массивы в c++, массивы в с++, одномерный массив

Les tableaux sont thème extrêmement important en C ++. Les programmes sont utilisés très souvent et de comprendre le sujet doit être soigneusement. Tout de suite vous plairez – de comprendre et d'apprendre comment utiliser les tableaux est assez simple, même un débutant.

si, Pourquoi avons-nous besoin des tableaux et à quoi ils ressemblent? Maintenant que vous connaissez déjà bien, que les données de programme sont stockées dans la déclaration nous variables d'un certain type (int, double, carboniser… ). Mais il se trouve, qui a besoin du programme pour stocker des centaines de (et plus encore) variables du même type de données, ainsi que la nécessité de travailler avec eux - attribuer des valeurs, les modifier, etc.. par exemple, il est nécessaire de stocker les numéros de série de lignes. accepter – tout le monde aurait peur à l'idée de, il est nécessaire de créer une centaine de variables de type int, donner à chacun un nom unique, et affecter une valeur de 1 à 500-ta. (J'étais déjà peur :) Dans ce cas,, Nous économisons simplement des tableaux.

Remarque terrain et passer à l'exemple pratique:

  • un tableau en C ++ - une combinaison d'un certain nombre de variables similaires, avec le même nom. par exemple, int tableau [3];. Cette entrée signifie, nous avons annoncé un tableau nommé tableau , qui il contient 3 variables de type int;
  • variables de tableau appelé éléments ;
  • Chaque élément a son propre code unique - un numéro de séquence. En utilisant l'index, on peut se référer à un élément spécifique. IMPORTANT - indexation d'éléments de réseau commence par 0. Ainsi, dans un tableau int tableau [3] le premier élément a un indice 0, et le dernier - 2. à l'adresse, par exemple, à l'élément zéro de la matrice et modifier sa valeur, il est nécessaire de préciser le nom du tableau entre crochets indiquent l'index – tableau [0] = 33.

Prenons l'exemple:

En ligne 12 on définit une constante entière TAILLE, qui stockera la taille du tableau (certains contacts, le nombre d'éléments). En ligne 13 déclarer un tableau: préciser le type de données, qui sera stocké dans une matrice de cellules, donner le nom et spécifier la taille entre crochets . important, entre crochets, nous ne pouvons enregistrer l'ensemble des valeurs constantes. Il doit être soit immédiatement entrer un nombre entier entre parenthèses à la déclaration de tableau (int firstArray[100];), ou définir un nombre entier constant de déclarer un tableau et mis entre crochets dans le nom de cette constante (dans cet exemple,). La seconde méthode est préférable d'utiliser, si au cours du programme que vous aurez plus de temps pour accéder au tableau grâce à un cycle. La raison en est, que lorsque nous annonçons le cycle, là, vous pouvez spécifier une condition de changer la valeur du compteur TAILLE. imaginez, que nous devons changer la taille du tableau avec 10 éléments sur 200. Dans ce cas,, il nous reste juste changer la valeur de la constante entier, et nous automatiquement par défaut à la nouvelle taille et valeur au tableau, et dans tous les cycles du programme. Vous pouvez essayer cet exemple, ajoutez une autre chiffre dans constante TAILLE. Et vous verrez, que le programme fonctionne très bien - pour créer un tableau de nombreux éléments, combien vous donnez, ses données et les affiche à l'écran.

lignes 15 - 19 définir cycle pour. son comptoir je Il servira d'index des éléments du tableau. Au début,, il est 0 et à chaque étape augmentera par un jusqu'à ce que, jusqu'à ce qu'elle devienne égale à TAILLE – le nombre d'éléments de réseau. S'il vous plaît noter, dans un cycle, et nous attribuons des valeurs différentes aux éléments du tableau, et dans le prochain appel de ligne pour les, pour afficher les données, ils stockent, l'écran.

Nous courons le programme et voir le résultat:

массивы в c++, массивы в с++, одномерный массив

Attribuer une valeur aux éléments de réseau peut être une variété de moyens - pour l'initialiser lors de la création ou à l'aide d'une boucle. Si la taille d'un grand tableau, il y a une grande possibilité d'utiliser une boucle pour ou tandis que pour initialiser ses éléments. Nous avons donc dans notre exemple. Vous pouvez remplir le tableau avec des nombres aléatoires – ce que nous avons Un article distinct.

Et si un tableau de très petite, par exemple sur 5 élément, initialize il peut être immédiatement à l'annonce:

массивы в c++, des tableaux en C ++, matrice bidimensionnelle

Étant donné que l'élément avec l'index 0 – firstArray[0] - sera fixé 11, et le dernier élément de la matrice firstArray[4] - valeur 15. Il y a une telle fonction - vous pouvez pas spécifier la taille de la matrice entre crochets, et procéder à un enregistrement:

массивы в c++, des tableaux en C ++, matrice bidimensionnelle

post précédent équivalent à celui. Seulement dans le second cas, le compilateur calcule automatiquement la taille du tableau, sur la quantité de données entre accolades.

En outre, lorsque l'initialisation des éléments de réseau, lorsque le tableau doit être nettoyé de « déchets » (les données résiduelles d'autres programmes en mémoire) il est préférable d'attribuer tous les éléments de la valeur 0. Il ressemble à ceci:

массивы в c++, des tableaux en C ++, matrice bidimensionnelle

devraient se rappeler, que cette initialisation est seulement possible de remplir avec des zéros. Si vous voulez remplir les éléments du tableau à tout autre numéro, mieux utiliser le cycle. En C ++ 11 (norme de codage) en utilisant la liste de l'initialisation (initialisation avec des accolades) même permis de laisser tomber signe = .

массивы в c++, des tableaux en C ++, matrice bidimensionnelle

Je veux montrer une autre initialisation de la réception pour créer un tableau. par exemple, pour un ensemble de 30 éléments que nous devons ajouter de la valeur 33 et 44 seulement avec l'indice de la cellule 0 et 1 respectivement, et le reste à remplir avec des zéros. Ensuite, nous le faisons:

массивы в c++, des tableaux en C ++, matrice bidimensionnelle

Ces données seront incluses dans le zéro et la première cellule, et le reste automatiquement la valeur 0.

Organiser le remplissage du tableau est possible et avec l'aide de l'opérateur gin:

Pour affecter ou modifier la valeur d'un élément particulier, il est nécessaire de s'y référer, en utilisant son index. par exemple, toutes les valeurs d'un tableau de 500 éléments qui nous conviennent, mais il est nécessaire de changer la valeur d'une seule. Ensuite, nous nous tournons vers elle par son index : firstArray[255] = 7;

Avec cela a été réalisé, Maintenant, regardons, comment le réseau se trouve dans la mémoire. Un tableau de type int des cinq éléments se 20 octets de mémoire – 4 octet (int) * 5 (le nombre d'éléments) – et ces données seront situées séquentiellement dans la mémoire, comme représenté sur la Figure:

массивы в c++, des tableaux en C ++, matrice bidimensionnelle
int tableau de cinq éléments dans la mémoire vive

Pour résumer et mentionner toute la chose la plus importante sur les tableaux:

  • syntaxe de déclaration de tableau :

tip_Dannyh_Massiva array_name [taille];

  • variables de tableau sont appelées éléments, et chaque élément a son propre numéro de série - index.
  • index de tableau de numérotation à partir de zéro!!!
  • initialiser un tableau seulement quand il est créé – int firstArray[3] = {1, 2, 3}; Initialiser plus tard n'est pas autorisé: firstArray[3] = {1, 2, 3}; Si le tableau n'a pas été initialisé au début, Vous pouvez attribuer des valeurs à ses éléments, en utilisant des cycles ou simplement référence à un élément souhaité par son index.
  • réseau peut être unidimensionnel – cette, Comme cela est décrit dans cet exemple, et multidimensionnelle – dvumernыm, en trois dimensions ... (ils seront discutés dans un de nos prochains articles).

Ne pas oublier la nécessité de pratiquer la résolution de problèmes – tâches: Les tableaux en C ++. Vous voulez en savoir plus sur les tableaux en C ++ (y compris tableaux de caractères et les chaînes)? Regardez ce tutoriel vidéo:

Bulletin de nouvelles leçons sur la programmation: