Funcții pentru lucrul cu simboluri. Formarea unui nou simbol dintr-un obiect complex cu umplere în gradient

05.11.2019 Știri

Simbol

Un simbol este un singur semn. Oricare – literă, număr, semn aritmetic sau spaţiu, semne de punctuație sau subliniere... Și, de asemenea, caractere speciale - linie nouă, Spațiu înapoi, semn dolar sau la sută. Tipul „caracter” în Delphi este notat cu Char:

ShowMessage("Ați introdus " + c);

ShowMessage("Mutați la nou" + c + "linie");

Am spus deja că simbolurile sunt luate din tabelul de simboluri ANSI sau UNICODE. Cele mai multe simboluri sunt folosite, unele simboluri sunt auxiliare. Rețineți că majusculă„A” și „a” mic sunt simboluri diferite! De asemenea, „s” latin și „s” rusesc sunt simboluri diferite, deși sunt la fel de asemănătoare ca două mazăre într-o păstaie.

Caracterul nul nu este folosit, este rezervat ca nul complet. Programatorii au găsit o utilizare demnă pentru acest caracter, folosindu-l în evenimentele de introducere a textului atunci când trebuie să împiedice utilizatorul să introducă caractere. Nu putem vedea caractere de serviciu în text camp. Simbolurile de serviciu sunt , <introduce>, <Tab> si altele. Fiecare caracter este procesat de computer ca un număr de la 0 la 255, astfel cuvânt„HELLO” în memoria aparatului va arăta ca un set de numere: „207 208 200 194 197 210”.

Funcții de simbol

În practică, este adesea necesară procesarea caracterelor individuale. Variabilelor tipului de caracter Char li se pot atribui valori în acest fel:

Deoarece pentru un computer un simbol este un număr, datele simbolice pot fi comparate între ele. În acest caz, cel mai mare simbol va fi cel al cărui număr din tabelul de simboluri este mai mare. De exemplu, „i” va fi mai mare decât „a”:

dacă b > c atunci ShowMessage ("Adevărat!")

else ShowMessage("Fals!");

Când lucrați cu variabile caracter, funcțiile Chr() și Ord() sunt adesea folosite. Funcţie Chr() ia un număr ca parametru și returnează caracterul care se potrivește cu acel număr din tabel ANSI:

funcția Chr (X: Byte): Char;

Funcţie Ord() face exact opusul, ia un caracter ca parametru și returnează numărul sub care acest caracter este stocat în tabel ANSI:

funcția Ord (C: Char): Byte;

Variabilele de caractere pot fi utilizate cu aceste funcții:

În prima linie, în variabila a am scris simbolul „ȘI”, care corespunde numărului 200 din tabelul de simboluri. În a doua, variabilă întreagă, am scris numărul 200, deoarece simbolul cu acest număr a fost scris în variabila a, pe care am trecut-o ca parametru . În cele din urmă, în a treia linie am scris numărul 102 în întreaga variabilă; acest număr corespunde simbolului „f”.


Linia

Un șir este un set de caractere. Un șir poate fi reprezentat ca o matrice statică sau dinamică de date de caractere. Am discutat deja despre tipurile de șiruri în „Control construct if, for loop”: AnsiString – un șir din ANSI– simboluri și WideString– un șir de caractere UNICODE –.

Tipul String nu este un tip separat; este implicit AnsiString. Cu toate acestea, poate fi reconfigurat la WideString, deși acest lucru nu este necesar. Deci, nu ezitați să specificați variabile șir ca șir:

s:= „Acesta este mai multe linii” + #13 + „șir”;

După cum puteți vedea din exemplu, un șir poate fi compus din mai multe subșiruri și chiar și caractere individuale pot fi adăugate la el. În exemplu, am adăugat caracterul numărul 13, acesta este noul caracter de linie. Ca rezultat al executării acestui cod, procedura ShowMessage() va afișa un mesaj împărțit în două linii:

Acesta este multilinie

ShortString– un șir scurt de la ANSI– simboluri. Poate conține de la 0 la 255 de caractere. Folosit rar. De fapt, puteți declara un tip String cu o dimensiune pre-specificată:

După cum puteți vedea, șirul este declarat cu un index numeric, aproape ca matrice. De fapt, șir de caractere si aici este matrice datele de caractere și le puteți gestiona în același mod. Indexarea caracterele dintr-o linie încep cu unul, adică indicele 1 corespunde primului caracter al liniei.

string:= „Bună ziua”;

șir := „a”; //a schimbat al 5-lea caracter al liniei

ShowMessage(stroke); //rezultat: șir „Privat”

Acesta este și un șir și va trebui să ne ocupăm de el în viitor. Acest șir funcționează complet diferit de String. String reprezintă matrice caractere, al căror element zero conține numărul octet, alocate pe această linie. A variabil tip PChar– aceasta nu este linia în sine, dar indicator până la începutul liniei, adică variabil indică primul caracter al unui șir din memoria computerului. Atunci unde PChar depozitează cantitatea octetîn linie?! Și nicăieri! Am vorbit deja despre tabelul de simboluri ANSI, și am aflat că caracterul nul este gol. Iată ultimul personaj PChar tocmai acest simbol este cel care stochează, și calculator, după ce l-a găsit, consideră că linia s-a încheiat.

Cu sfori PChar este foarte incomod să lucrezi, dar va trebui să facem acest lucru atunci când lucrăm direct cu funcțiile WinAPI. Funcțiile WinAPI sunt funcții ale Windows, nu Delphi. Cu toate acestea, Delphi vă permite să le utilizați. Uneori, acest lucru este necesar, de exemplu, atunci când instrumentele Delphi nu sunt suficiente pentru a finaliza sarcina intenționată. Utilizarea unor astfel de funcții nu este întotdeauna convenabilă, dar ele sunt executate de procesor mult mai rapid, deoarece sunt conținute în sistem de operare. Exemplu – funcţie MessageBox().

Sunteți deja obișnuit să afișați mesaje folosind funcția ShowMessage() a lui Delphi? Obișnuiește-te cu noua funcție!

Application.MessageBox("linia 1", "linia 2",[ butoane + tip_fereastră]);

· linia 1 - afișează text în interiorul ferestrei.

· linia 2 – text în titlul ferestrei.

Dacă nu specificați [buttons + window_type], atunci va apărea o fereastră simplă cu un buton OK, ca în funcția ShowMessage().

Cuvântul „simbol” are multe semnificații; în special, sub simbolul în programul Adobe Illustrator înțelege un obiect vectorial care este stocat în paletă Simboluri(Simboluri) (Fig. 1), deschis prin comandă Fereastra => Simboluri(Fereastră => Simboluri) și este destinat utilizării repetate. Lucrul cu simboluri amintește oarecum de clonarea obiectelor, dar numai la prima vedere, deoarece acest lucru este fundamental tehnologii diferite cu capacităţi şi scopuri diferite. Singurul lucru în comun este că orice simbol din paletă Simboluri poate fi multiplicat de multe ori.

Printre posibilitățile de lucru cu obiecte simbolice în Adobe Illustrator nu se numără doar inserarea repetată a unui anumit simbol din paletă. Simboluri, dar și diverse manipulări cu acesta. Simbolurile pot fi pulverizate precum vopsea spray, mărite, reduse și rotite, aranjarea simbolurilor într-un grup, densitatea obiectelor simbolice, gradul de transparență și umbrire etc. pot fi modificate. În aceste scopuri, programul are un grup de instrumente simbolice speciale Instrumentul pentru simboluri, care include instrumente Pulverizator simbol(Sprayer de caractere), Schimbător de simboluri(schimbarea caracterelor), Scruncher de simboluri((Densitatea obiectului), Simbol Sizer(Dimensiunea caracterelor), Simbol Spinner(Rotația caracterelor), Colorator de simboluri(Tonifiarea caracterelor), Screener de simboluri(Transparența caracterelor) și Simbol Styler(Stilizarea caracterului) (Fig. 2). Și ceea ce este cel mai important este că, dacă schimbați un simbol, puteți actualiza instantaneu toate copiile la imagine creată; și nu contează cât de semnificative au fost schimbările pe care le-ați făcut.

Este de remarcat faptul că utilizarea obiectelor simbolice în imagini are multe avantaje: datorită faptului că simbolurile reprezintă obiecte asemănătoare între ele (aceasta înseamnă că fiecare element din imagine se referă la eșantionul său de simbol original), volumul total al imaginea este redusă, ceea ce este important ca atunci când se creează grafică web, precum și atunci când se dezvoltă animație, imagini cartografice etc. În plus, lucrul cu imaginea este simplificat semnificativ, deoarece orice modificare a unui simbol din paleta Simboluri duce automat la editarea corespunzătoare a tuturor obiectelor grafice construite pe baza sa în imagine, ceea ce accelerează semnificativ dezvoltarea. Acesta din urmă este deosebit de important pentru designerii implicați în dezvoltarea obiectelor cartografice - hărți, diagrame și diagrame care conțin un număr mare de elemente similare care joacă rolul de simboluri. Acest lucru îi salvează pe designeri de operațiuni repetate de copiere și lipire, precum și de editarea manuală a fiecărui caracter de același tip. Din punct de vedere tehnic, întregul proces de dezvoltare, de exemplu, a unei hărți este mult simplificat, iar numărul de pași necesari este redus. Ca urmare, pentru a crea o imagine cartografică, este suficient să plasați obiectele simbol în locurile potrivite, iar toate celelalte caracteristici ale acestora pot fi configurate ulterior și simultan pentru toate elementele de același tip implicate în imagine.

Simbolurile furnizate sunt situate în mai multe biblioteci (deși numărul lor total nu este mare (Fig. 3)), iar accesul la biblioteca necesară poate fi obținut folosind comanda Window => Bibliotecă de simboluri(Fereastră=>Biblioteca de simboluri). Numărul de simboluri poate fi mărit de multe ori, atât prin descărcarea simbolurilor necesare pentru lucru de pe Internet, cât și prin crearea de noi simboluri cu propriile mâini. De fapt, orice obiect, grup de obiecte sau imagine întreagă poate fi stocată ca simbol, indiferent dacă include elemente desenate, text, imagini încorporate sau o combinație a acestor elemente. Acest lucru este foarte convenabil, deoarece vă permite să vă extindeți biblioteca. Simboluri acele elemente grafice care sunt folosite în mod repetat într-o anumită dezvoltare.

Lucrul cu simboluri individuale în paleta Simboluri

Plasarea caracterelor individuale într-un document

De exemplu, luați în considerare cea mai simplă situație, când un anumit algoritm trebuie reprezentat sub forma unei diagrame. Creați un document nou și deschideți biblioteca de simboluri Diagrame folosind comanda Window=>Biblioteca de simboluri=>Diagrame(Fereastră=>Biblioteca de simboluri=>Hartă). Apoi trageți succesiv simbolurile dorite din paleta de simboluri în diagrama creată și plasați-le după cum doriți. Există o altă modalitate de a muta un simbol într-o imagine - puteți selecta simbolul și faceți clic pe butonul Place Simbol Instanță paleta (Place Symbol Instance). Simboluri, ceea ce va face ca o instanță a simbolului să apară în centrul imaginii. Apoi simbolul inserat poate fi mutat în același mod, selectându-l mai întâi cu instrumentul Selecţie(Evidențiați) sau Selectie directa(Selecție parțială).

La sfârșitul lucrării, pentru a obține o anumită simetrie a elementelor circuitului, va trebui să selectați secvențial cu instrumentul de selecție directă în timp ce țineți apăsată tasta Schimb acele simboluri care trebuie plasate în centrul documentului, orizontal sau vertical, și faceți clic pe butoanele din paletă corespunzătoare Alinia(Aliniere). Rezultatul poate să semene cu orezul. 4.

Dacă dimensiunile unor obiecte nu vi se potrivesc, atunci acestea pot fi modificate cu ușurință selectând un anumit obiect simbolic cu instrumentul Selecţie, care va închide automat obiectul într-un container dimensional și va ajusta dimensiunea în mod obișnuit - trăgând unul dintre marcatoarele containerului (Fig. 5).

Dacă trebuie să schimbați designul tuturor simbolurilor sau doar al unora, cel mai simplu mod este să utilizați unul dintre stilurile încorporate. Pentru a face acest lucru, selectați obiectele care vor fi editate cu instrumentul Selecţie(Fig. 6) și faceți clic pe stilul corespunzător din paletă Stiluri(Stiluri) în acest exemplu stilul a fost selectat Blue Goo(Fig. 7).

Dacă niciunul dintre stilurile de design nu vă convine în această situație, atunci va trebui să rupeți legătura cu elementele simbolice ale paletei Simboluri, selectând obiecte imagine cu instrumentul Selecţieși făcând clic pe butonul Rupe legătura către simbol Simboluri. Aspectul zonei selectate se va schimba imediat: simbolurile vor fi închise în containere mari și se vor transforma în obiecte vectoriale obișnuite (Fig. 8). Aceasta va însemna că puteți modifica caracteristicile de umplere și chenar ale oricărui element, de exemplu prin setarea unei umpleri cu gradient și să efectuați orice alte transformări cu acestea (Fig. 9).

Orez. 8. Schimbarea naturii selecției elementelor circuitului după întreruperea conexiunilor

Copierea caracterelor dintr-un document

Obiectele de tip caracter sunt la fel de ușor de copiat ca și obiectele vectoriale obișnuite doar cu o apăsare a unei taste Alt. De exemplu, trageți oricare dintre simbolurile din paletă Simboluri la foaia de lucru. Dacă este necesar, ajustați dimensiunea acestuia și apăsați tasta Altîn mod repetat, începeți duplicarea prin mișcarea mouse-ului în timp ce țineți apăsat butonul din stânga (Fig. 10).

Editarea caracterelor individuale dintr-un document

Elementele simbolice încorporate într-o imagine pot fi transformate (redimensionate, rotite, afișate etc.), precum obiectele vectoriale obișnuite și aliniate folosind butoanele paletei Alinia(Aliniere), modificați transparența și modul de amestecare în paletă Transparenţă(Transparență) (Fig. 11 și 12) și decorați cu diverse stiluri din paletă Stiluri(Stiluri).

Orez. 12. Rezultatul introducerii unei serii de simboluri într-o imagine raster cu transformarea lor ulterioară, schimbarea gradului de transparență și a modului de amestecare

Datorită prezenței unor instrumente simbolice speciale din grup Instrumentul pentru simboluri Puteți edita caractere individuale într-un mod complet diferit; în unele cazuri, acest lucru se dovedește a fi mai convenabil decât, de exemplu, opțiunile clasice de transformare. Pentru a evalua capacitățile instrumentelor din grup Instrumentul pentru simboluri, să experimentăm puțin cu ele folosind exemplul creării unei noi imagini. Mai întâi, să trecem de la paletă Simboluri simbol al focului (Fig. 13). Activați instrumentul în paleta de instrumente Simbol Sizer(Dimensiunea caracterelor) și faceți clic pe simbolul încorporat de mai multe ori până când dimensiunea imaginii devine suficient de mare (Fig. 14). Câteva avantaje ale aplicării Simbol Sizer comparativ cu selecția obișnuită a unui obiect cu un instrument Selection iar redimensionarea ulterioară prin mutarea punctelor de limită ale containerului dimensional este că pentru a redimensiona proporțional nu este nevoie să țineți apăsată tasta Schimb, deoarece în mod implicit instrumentul este configurat să redimensioneze proporțional.

După aceea, luați unealta Schimbător de simboluri(Shift simboluri) și trageți simbolul în colțul din dreapta jos (Fig. 15). Folosind un instrument Simbol Spinner(Rotiți simbolurile) rotiți ușor obiectul simbol (Fig. 16), adăugați un alt simbol din biblioteca de simboluri în prim-plan Natură, pentru a deschide care folosesc comanda Window=>Biblioteca de simboluri=>Natura(Fereastră=>Biblioteca de simboluri=>Natura) (Fig. 17). Apoi vom schimba tonul culorilor simbolului focului cu instrumentul Colorator de simboluri(Tonifiarea caracterelor) pentru a face acest lucru, selectați caracterul cu instrumentul Selection, setați culoarea corespunzătoare în fereastră Completati(Umpleți) și faceți clic pe simbol. În cele din urmă aspect imaginea se va schimba instantaneu: tranzițiile de culoare vor fi păstrate, dar tonul lor va deveni diferit, apropiindu-se de culoarea specificată în fereastră Completati(Fig. 18). Vă rugăm să rețineți că folosind instrumente simbolice puteți modifica tonalitatea, dar nu culoarea de umplere sau chenarul obiectelor simbolice, aceasta din urmă este posibilă numai după ruperea conexiunii dintre simbolul din paletă. Simboluriși copia sa în imagine (comandă Rupe legătura către simbol Rupe legătura cu simbolul).

În cele din urmă, să reducem ușor transparența simbolului focului. Pentru a face acest lucru, selectați simbolul și selectați instrumentul Screener de simboluri(Character Transparency) și modificați mai întâi parametrii, deoarece implicit reduce foarte mult transparența. Faceți dublu clic pe instrument Screener de simboluriși reduceți intensitatea impactului instrumentului prin reducerea valorii în câmp Intensitate(Intensitate) de la 8, de exemplu, la 2 (Fig. 19). Să facem clic pe simbolul focului, iar rezultatul rezultat poate să semene cu o imagine. 20.

Acum, să transformăm imaginea într-un desen în creion schimbând stilizarea obiectelor folosind instrumentul Simbol Styler(Stilizarea personajelor). Selectați ambele caractere cu instrumentul Selecţie, porniți instrumentul Styler simbol, iar apoi activați stilul dorit în acest exemplu, stilul a fost selectat 1-pt în afara cursei(Fig. 21).

Orez. 21. Desen în creion format pe baza de obiecte simbolice

Crearea de noi simboluri

După cum s-a menționat, simbolurile pot fi create din oricare dintre obiectele utilizate în Adobe Illustrator, inclusiv căi simple și compuse, obiecte text, imagini pixeli importate, rețele de gradient și grupuri de obiecte, precum și simbolurile în sine.

Formarea unui nou simbol dintr-un obiect complex cu umplere în gradient

Să presupunem că aveți deja un obiect vectorial sub forma unui buton cu o plasă de gradient (Fig. 22). Pentru a crea un simbol pe baza acestuia și a-l plasa în paletă Simboluri, trebuie să selectați obiectul cu instrumentul Selecţieși trageți-l în paletă sau faceți clic pe butonul Simbol nou (Simbol nou) în paletă Simboluri(Fig. 23). În același mod, vom crea o altă imagine identică un buton similar, dar verde (vom avea nevoie de ambele simboluri în munca in continuare) (Fig. 24). Dacă este necesar ca acest simbol să devină simultan un simbol în imagine, adică să apară o conexiune între simbol și obiectul simbolic corespunzător din imagine, atunci în timp ce trageți, trebuie să țineți apăsată tasta Schimb.

Orez. 22. Imagine originală (buton și paleta Straturi corespunzătoare)

Este în regulă dacă un simbol plasat în paletă se dovedește a nu avea succes - este ușor să îl eliminați selectând-l în paletă Simboluriși făcând clic pe butonul Șterge simbolul(Șterge simbolul) din această paletă.

Vă rugăm să rețineți că atunci când deschideți sau creați o nouă imagine, paleta care se deschide Simboluri va avea aspectul inițial, adică noile simboluri create nu vor fi acolo. Prin urmare, este necesar să salvați imaginea cu noile simboluri în paletă în mod obișnuit folosind comanda Fișier => Salvare(Fișier => Salvare) cu extensia *ai. După aceasta, paleta salvată poate fi deschisă ca bibliotecă corespunzătoare și utilizată în munca dumneavoastră.

Acum să încercăm să folosim simbolul creat folosind exemplul generării unei imagini cartografice. Deschideți harta originală (Fig. 25), la care trebuie să adăugați locațiile orașelor și stațiunilor sub formă de pictograme speciale. Să deschidem paleta Simboluri cu comanda simboluri nou creată Window=>Biblioteca de simboluri=>Altă bibliotecă(Fereastră=>Biblioteca de simboluri=>Alte biblioteci), apoi plasați secvențial butoanele albastre în locațiile orașelor (Fig. 26), butoanele verzi în stațiuni (Fig. 27).

Orez. 27. Apariția finală a imaginii cartografice create cu orașe și stațiuni marcate

Dacă ați creat o imagine care conține mai multe copii ale simbolurilor și doriți să modificați unele dintre ele, de exemplu, să reduceți transparența unora dintre simboluri (vor corespunde unor stațiuni mai puțin costisitoare), atunci această acțiune se realizează în două etape . Mai întâi trebuie să selectați în imagine cu un instrument Selectie directa obiecte caracter editabile și apoi reduceți opacitatea lor în paletă Transparenţă(Fig. 28). În același mod, puteți modifica dimensiunea elementelor caracterului apelând comanda Transform => Scala(Transformation=>Size) din meniul pop-up (Fig. 29) și o serie de alți parametri. Dacă sunt necesare modificări mai serioase, de exemplu pentru a schimba umplerea, mai întâi va trebui să transformați simbolul într-un obiect vectorial și abia apoi să îl editați.

Orez. 28. Rezultatul modificării simultane a transparenței mai multor obiecte simbolice (imagine și paleta Transparency)

Orez. 29. Rezultatul redimensionării simultane a mai multor obiecte simbolice (imagine și fereastra Scalare)

Formarea unui nou simbol folosind o tranziție Blend

Acum să ne uităm la o opțiune mai complexă. Să presupunem că sarcina noastră este să creăm o hartă cu indicații de conducere, de exemplu, către un birou al companiei (astăzi hărți similare sunt disponibile pe internet pe multe site-uri). Dacă, la pregătirea unei astfel de hărți, nu se ține cont de diversitatea arhitecturii, iar toate clădirile sunt afișate sub forma unor clădiri standard stilizate, atunci cu ajutorul obiectelor simbolice din programul Adobe Illustrator acest lucru poate fi realizat destul de rapid. .

Pentru a crea o clădire tipică, vom crea două căi vectoriale dreptunghiulare și le vom conecta folosind o tranziție Blend, setând opțiunea Culoare netedă(Tranziție de culoare netezită) (Fig. 30), rezultatul va fi un paralelipiped, care va afișa clădirea. Apoi îi vom adăuga ferestre și, având în vedere că va trebui să desenăm destul de multe ferestre, va fi mai ușor să creăm mai întâi simbolul corespunzător și să-l plasăm în paletă Simboluri(Fig. 31). După aceasta, vom adăuga ferestre la clădirea stilizată prin simpla glisare a simbolului ferestrei pe clădire (Fig. 32).

După cum sa menționat deja, harta schematică propusă va consta din clădiri complet identice, drept urmare clădirea creată ar trebui să fie salvată ca simbol în paletă. Simboluri, după ce îl selectați anterior cu instrumentul Selecţie(Fig. 33). După aceasta, începerea creării unei hărți nu va mai fi dificilă; va fi suficient să introduceți simbolurile casei în părțile necesare ale hărții, să le aliniați față de centru (buton Centru de aliniere verticală palete Alinia) și relativ unul față de celălalt (butoane Centru de distribuție verticalăȘi Centru de distribuție orizontală palete Alinia), adăugați numere la case și creați străzi și zone verzi între ele. Poate că, la începutul lucrării, harta schematică va arăta ceva ca cea din Fig. 34.

Formarea unui nou simbol dintr-o perie

În următoarea etapă a creării unei diagrame, trebuie să indicați ruta către birou, care se face cel mai convenabil folosind săgeți. Puteți să creați pur și simplu un contur al unei astfel de căi și să o proiectați cu o perie potrivită sub forma unei săgeți, dar această opțiune are două „dar”: în primul rând, calea pare adesea discontinuă (în special, trebuie să săriți peste numele străzilor , etc.), drept urmare, va trebui să creați mai multe contururi și, atunci când creați fiecare contur, să ajustați setările periei, ceea ce este incomod și, în al doilea rând, este foarte posibil să nu doriți să utilizați direct perie în formă de săgeată, deoarece conturul creat cu ajutorul ei nu va fi suficient de atractiv.

Puteți, desigur, să creați unul nou pe baza unei perii potrivite, dar există o altă modalitate, care este mai rapidă și mai convenabilă: creați un simbol special bazat pe o perie în formă de săgeată și editați-l după bunul plac. Să ne uităm la această opțiune în detaliu: din biblioteca de pensule, deschideți paleta Săgeată Probă prin folosirea comenzii Window=>Brush Library=>Arrow Sample(Window=>Symbol Library=>Arrow Patterns), selectați o perie potrivită (în acest caz, se folosește pensula Arrow 144) și formați un fragment din săgeată (Fig. 35). Trageți-l în paletă Simboluri când tasta este apăsată Schimb astfel încât modelul din imagine să se transforme automat într-un simbol, acesta va fi un simbol temporar " Săgeată" Apoi reduceți-i dimensiunea în mod obișnuit, întrerupeți legătura cu paleta Simboluri făcând clic pe butonul Rupe legătura către simbol(Întrerupe legătura cu simbolul) situat în partea de jos a paletei Simboluri, și adăugați, de exemplu, un chenar la săgeată (puteți aplica și ceva mai interesant - aplicați un filtru potrivit, creați o tranziție Blend etc.). După aceea, trageți-l înapoi în paletă Simboluri, și ștergeți simbolul temporar „Săgeată” selectându-l și făcând clic pe butonul Șterge simbolul(Simbol de ștergere) din această paletă (Fig. 36). În cele din urmă, desenați calea către birou folosind simbolul pe care tocmai l-ați creat " Săgeată" Nu uitați că va fi mai rapid să multiplicați simbolurile nu trăgându-le în mod repetat din paletă Simboluri, și prin deplasarea simbolului din imagine în timp ce apăsați tasta Alt. Este posibil ca în final imaginea să ia forma prezentată în Fig. 37.

Înlocuirea automată a caracterelor dintr-un desen

Dacă imaginea creată folosește deja unele simboluri (dintre cele incluse în livrare sau create manual) și în timpul lucrului se dovedește că unele dintre ele trebuie înlocuite cu altele disponibile în paletă Simboluri, atunci această acțiune va dura câteva secunde. Pentru a face acest lucru, în Fig. 27 selectați cu instrumentul Selectie directa caractere înlocuibile, în paletă Simbol s selectați simbolul cu care doriți să îl înlocuiți și selectați comanda Înlocuire din meniul paletei Simbol(Simbol de înlocuire) (Fig. 38) toate simbolurile selectate vor fi înlocuite.

Orez. 38. Rezultatul înlocuirii mai multor obiecte simbolice (imagine și paleta Simboluri)

Editarea simbolurilor în paleta Simboluri

Să presupunem că unele dintre simbolurile paletei Simboluri(indiferent dacă face parte dintr-una dintre biblioteci sau a fost creat de dvs.) trebuie schimbat radical. Acest lucru este posibil numai după ce conexiunea a fost întreruptă, așa că selectați unul dintre simbolurile butoanelor pe care le-am creat deja și faceți clic pe butonul Rupe legătura către simbol(Întrerupe legătura cu simbolul) situat în partea de jos a paletei Simboluri. Simbolul va deveni din nou un obiect vectorial normal și va fi ușor să îl schimbați. Să schimbăm, de exemplu, culoarea butonului de la verde la roșu (Fig. 39).

Orez. 39. Paleta Simboluri modificate cu simboluri de butoane încorporate și un simbol editat sub forma unui obiect vectorial (acesta poate fi văzut din marcatorii de selecție)

Pentru a înlocui un simbol în paletă Simboluri versiunea sa editată, selectați simbolul modificat, activați simbolul original în paletă Simboluri iar apoi din meniul paletei selectați comanda Redefiniți simbolul(Redefinire simbol) (Fig. 40) Acest lucru va schimba simbolul din paletă (Fig. 41). Vă rugăm să rețineți că dacă ați editat simbolul din imaginea în care a fost folosit, în cazul nostru, de exemplu, în paleta modificată Simboluri(vezi Fig. 27), apoi redefinirea unui simbol va duce automat nu numai la înlocuirea lui în paletă Simboluri, dar și la actualizarea tuturor copiilor acestuia din imagine (Fig. 42).

Orez. 42. Imagine cartografică după redefinirea simbolului folosit anterior pentru a indica stațiunile, în conformitate cu paleta Simboluri

Lucrul cu grupuri de caractere

Dacă vorbim despre plasarea simultană și prelucrarea ulterioară nu a uneia, ci a mai multor cazuri ale aceluiași simbol (adică un grup de simboluri), atunci vor fi necesare instrumente speciale pentru simboluri. Instrument de simbol: Pulverizator de simbol(Sprayer de caractere), Schimbător de simboluri(schimbarea caracterelor), Scruncher de simboluri((Densitatea obiectului), Simbol Sizer(Dimensiunea caracterelor), Simbol Spinner(Rotația caracterelor), Colorator de simboluri(Tonifiarea caracterelor), Screener de simboluri(Transparența caracterelor) și Simbol Styler(Stilizarea personajelor). Fiecare instrument din acest grup are propriile setări, care sunt definite în caseta de dialog Opțiuni pentru instrumentul de simbolism(Character Objects Tool Options) apelat dublu click soareci.

Astfel de grupuri de simboluri reprezintă un singur obiect (Fig. 43), iar toate transformările posibile ulterioare în legătură cu acestea: transformarea, modificările de saturație, culoare, locație, dimensiune, rotație, transparență și suprapunerea stilurilor sunt aplicate imediat tuturor elementelor grupul.

Pulverizarea unui grup de personaje

De exemplu, să deschidem imaginea (Fig. 44) și să încercăm să pulverizăm fulgi de zăpadă pe ea, un exemplu potrivit de fulg de zăpadă este disponibil în biblioteca de simboluri Natură. În comparație cu dimensiunea imaginii originale, eșantionul de fulg de nea este prea mare, așa că mai întâi inserați o singură instanță a acesteia în mod obișnuit, trăgând-o din paletă pe desen (Fig. 45). Apoi activați instrumentul Selecţieși, fără a deselecta fulgul de nea, reduceți dimensiunea acestuia la o dimensiune acceptabilă (Fig. 46) în timp ce apăsați tasta Schimb pentru a menține proporțiile. Trageți noul eșantion de simbol fulg de zăpadă în paletă Simboluriși lăsați-l acolo ca simbol activ.

După aceea, selectați instrumentul Pulverizator simbolși decorați imaginea prin pulverizarea fulgilor de zăpadă peste design; nu este dificil, mai ales că tehnologia de lucru cu Pulverizator simbol foarte asemănător cu lucrul cu un pistol de pulverizare în orice pachet grafic. Este foarte posibil ca unii dintre fulgi de nea să ajungă în afara imaginii (Fig. 47), în acest caz, selectați întregul grup de fulgi de nea cu instrumentul de selecție și redimensionați-l în mod obișnuit (Fig. 48).

Orez. 47. Ca urmare a pulverizării simbolurilor cu instrumentul Symbol Sprayer, unii dintre fulgi de zăpadă au ajuns în afara imaginii

Dacă setările instrumentului Pulverizator simbol nu sunteți mulțumit (în mod implicit, se iau valori medii pentru toate setările sale), apoi pot fi corectate cu ușurință făcând dublu clic pe instrument și efectuând ajustările corespunzătoare în fereastră Opțiuni pentru instrumentul de simbolism. Să presupunem, de exemplu, că nu suntem mulțumiți de culoarea fulgilor de zăpadă și de densitatea aranjamentului lor. Pentru a schimba culoarea, sau mai degrabă pentru a vă asigura că simbolurile sunt create ținând cont de culoarea selectată în fereastră Completati(Umplere), în listă Pata Opțiunea (Colorare) va trebui instalată Definit de utilizator(Definit de utilizator). Și pentru a crește densitatea, ar trebui să creșteți valoarea parametrului Densitatea setului de simboluri(Densitatea setului de caractere), de exemplu, ca în Fig. 49. Rezultatul poate să semene cu orezul. 50.

Orez. 50. După crearea unor obiecte simbolice suplimentare, fulgii de zăpadă sunt dispersați mai dens și au o nuanță mai închisă în conformitate cu culoarea setată în fereastra Fill.

Printre setări, puteți modifica valorile următorilor parametri:

  • Mesteca cu zgomot(Densitatea obiectelor) densitatea relativă a obiectelor ținând cont Dimensiunea originală simbol;
  • mărimea(Mărime) dimensiunea simbolurilor pulverizate, ținând cont de dimensiunea simbolului original;
  • A învârti(Rotație) determinarea rotațiilor caracterelor generate ținând cont de mișcarea cursorului mouse-ului;
  • Ecran(Transparența) ținând cont de gradul de transparență al simbolurilor;
  • Stil(Stil) determinarea designului caracterelor simbolurilor, ținând cont de parametrii stilului activ.

Pentru fiecare dintre acești parametri, sunt posibile două setări: In medie(Mediu) adaugă o nouă instanță a unui simbol cu ​​un mediu valorile parametrilor, A Definit de utilizator(Definit de utilizator) oferă generarea de simboluri pe baza setărilor specifice utilizatorului.

În câmp Diametru(Diametru) setează diametrul cercului de influență al sculei, în câmp Intensitate(Intensitatea) determină gradul de modificare a caracterelor generate cu cât valoarea este mai mare, cu atât este mai mare gradul de modificare.

De asemenea, este mai bine să lucrați cu caseta de selectare activată Afișați dimensiunea și intensitatea pensulei(Afișează dimensiunea și intensitatea pensulei) în acest caz, dimensiunea spray-ului simbol este afișată pe ecran sub forma unui cerc, care determină zona de impact a instrumentului.

Editarea unui grup de caractere

Să luăm Fig. ca imagine originală. 51, pulverizați simboluri de iarbă din biblioteca de simboluri în partea inferioară Naturăși editați dimensiunea grupului de caractere rezultat în conformitate cu dimensiunea imaginii originale (Fig. 52). Apoi, pentru a crește densitatea obiectelor din acest grup de simboluri, apelați meniul instrument Scruncher de simboluri(Densitate obiect) făcând dublu clic pe instrument și mărind valoarea parametrului Densitatea setului de simboluri(Densitatea setului de caractere), de exemplu ca în Fig. 53. Apoi, faceți clic pe grupul de simboluri selectat, ceea ce va duce la compactarea acestora (Fig. 54).

Să completăm imaginea prin pulverizarea altor câteva grupuri de simboluri de iarbă și să adăugăm două obiect caracter sub formă de pietre. Să-l mutăm pe acesta din urmă sub iarbă, pentru aceasta trebuie să selectați fiecare dintre obiecte, faceți clic dreapta pe el și selectați comanda Aranjare => Trimite înapoi ( Mutare => Deplasare înapoi) (Fig. 55).

Orez. 55. Imagine după adăugarea mai multor grupuri de caractere și a două caractere individuale

Să întunecăm iarba din colțul din dreapta jos al imaginii folosind instrumentul Colorator de simboluri(Umbrirea caracterelor). Selectați grupul corespunzător de simboluri cu instrumentul Selection, setați culoarea ferestrei la verde închis Completati(Umpleți) și faceți clic pe grupul de simboluri (Fig. 56) pentru un efect mai mare, puteți muta mouse-ul peste grupul de simboluri, ceea ce va duce la o recolorare treptată a simbolurilor. Ca urmare, simbolurile de iarbă vor rămâne, dar tonul lor de culoare se va schimba pentru a se potrivi cu culoarea definită în fereastră Completati(Fig. 57).

Orez. 56. Impactul instrumentului Symbol Stainer asupra unui grup de simboluri

După aceea, luminează iarba din colțul din stânga sus. Acest lucru se poate face folosind metoda descrisă mai sus, după setarea în prealabil a culorii la verde deschis în paletă sau prin modificarea gradului de transparență al grupului corespunzător de simboluri cu instrumentul Screener de simboluri(Transparența caracterelor). Să folosim a doua metodă, adică să selectăm un grup de simboluri și să facem clic pe grup (sau trageți peste el; depinde de câte simboluri și în ce măsură vor fi afectate) cu instrumentul Screener de simboluri(Fig. 58). Este posibil ca după transformări imaginea să înceapă să semene cu Fig. 59.

Orez. 58. Impactul instrumentului Symbol Screener asupra unui grup de simboluri

După ce am trecut prin matrice, acum putem înțelege ce este textul ca structură de date specifică a unui limbaj de programare: textul este un set de caractere sau un tablou ale cărui elemente sunt tipul de date caracter Chr. De exemplu, dacă textul nostru este format din 100 de caractere, atunci l-am putea declara după cum urmează: Type Text=rry of chr; În multe limbaje de programare, ele lucrează cu text ca o matrice de caractere, procesând fiecare caracter separat. Aceste mijloace combină, pe de o parte, conceptul de...


Distribuiți-vă munca pe rețelele sociale

Dacă această lucrare nu vă convine, în partea de jos a paginii există o listă cu lucrări similare. De asemenea, puteți utiliza butonul de căutare


Tip de date șir. Lucrul cu caractere și șiruri.

După ce am trecut peste matrice, acum putem înțelege ce este textul ca structură de date specifică a unui limbaj de programare: textul este un set de caractere, sau un tablou, ale cărui elemente sunt tipul de date caracter Char. De exemplu, dacă textul nostru este format din 100 de caractere, atunci l-am putea declara după cum urmează:

Tip

Text=matrice de caractere;

În multe limbaje de programare, textul este procesat ca o matrice de caractere, procesând fiecare caracter separat. Dar limbajul de programare TurboPascal oferă instrumente mai convenabile pentru lucrul cu textul decât alte limbi, permițând utilizatorului să efectueze operațiuni de bază asupra textului: combinarea de fraze, propoziții sau fragmente de text, ștergerea cuvintelor, calcularea lungimii textului, căutarea și inserarea unui anumit text. fragmentați într-o poziție dată și alte operațiuni direct folosind instrumentele, funcțiile și procedurile furnizate în limbajul însuși. Aceste instrumente combină, pe de o parte, conceptul de text ca o matrice de caractere și, pe de altă parte, vă permit să lucrați cu tot textul specificat utilizând un instrument special declarat.variabilă șir, ca și în cazul unei întregi structuri, a unei întregi părți.

Un tip de date șir este declarat folosind un cuvânt rezervat Snur scurt:

a: șnur scurt;

b: șir scurt;

Variabila a este o variabilă șir care este destinată introducerii și efectuării operațiunilor pe șiruri de caractere cu lungimea de până la 255 de caractere (de la 1 la 255). Octetul zero al unui șir stochează întotdeauna valoarea lungimii sale curente. Dacă un șir conține mai puțin de 255 de caractere, atunci octetul zero va conține codul binar de lungimea curentă și va fi imposibil să accesezi caractere goale cu numere care depășesc lungimea șirului. Lungimea curentă a șirului poate fi întotdeauna găsită folosind o funcție specială Lungime , despre care se va discuta mai târziu, sau accesând direct octetul lui zero.

Lungimea șirului b desemnat imediat în 80 de caractere. Șirul real poate fi mai mic decât această valoare, dar nu poate depăși 80 de caractere. Este logic să limităm un șir dacă știm că variabila noastră șir poate stoca oricare dintre valorile sale, fără a depăși niciodată o anumită dimensiune. De exemplu, dacă stochează un răspuns fără ambiguitate („da”, „nu” sau „nu știu”), atunci în acest caz este indicat, pentru a economisi memoria computerului, să se folosească o variabilă șir formată din caractere (pentru cea mai lungă frază „nu știu”: 6 litere și încă un spațiu).

Odată ce am creat variabile șir, acum li se pot atribui valori șir, indicate prin apostrofe, astfel:

a:=când au intrat elevii în birou;

a:=primavara BAL";

b:=se formeaza echipajul, domnule”;

b:= FOTBAL ;

a:=#4$& *&^;

b:=15478 564 22; jdjjk;

a:=2547;

b:=adevarat;

Trebuie să distingeți șirurile de numere și valori reale. De exemplu, cu linia A nu putem efectua nicio operaţie aritmetică deoarece a (2547) în acest caz doar un set de caractere, nu un număr. De asemenea, sensul b nu este o variabilă logică, ci doar cuvântul „adevărat”.

Când am inițializat variabile la începutul programului, le-am dat o valoare, de obicei 0. Șirurile sunt inițializate cu un operator gol‘’ . Această procedură scrie o valoare a lungimii șirului de 0 în octetul nul. Rețineți că scrierea unui spațiu și a unui șir nul sunt acțiuni diferite. Cu alte cuvinte, după operații a:= "; b:=; linia a va conține un spațiu și linia b va fi gol, fără caractere.

Pentru a introduce un șir de la tastatură, puteți utiliza operatorul obișnuit read() fără a organiza o buclă pe lungimea sa (spre deosebire de introducerea matricelor):

Citeste o);

readln(b);

Ieșirea liniilor de pe ecran este similară:

scrie o);

scrieln(b);

Caracterele unui șir pot fi accesate direct. În acest caz, șirul acționează ca o matrice:

a:=ы;

scrie (b);

În primul caz, al 10-lea caracter al liniei A ia valoarea literei " s ", iar în al doilea caz scoatem al 3-lea caracter al liniei b . Ai grijă doar: dacă liniile nu conțin aceste caractere (lungimea lor actuală va fi mai mică sau linia va fi goală), atunci programul va fi întrerupt din cauza unei erori, așa că oferiți diverse opțiuni și verificați întotdeauna lungimea curentă a liniei software(prin lungime)!

Operația de concatenare este aplicabilă șirurilor, în termeni numiți concatenare . Această operație combină mai multe linii într-una mare. Pentru a adăuga mai multe șiruri, trebuie să folosim operatorul obișnuit de adăugare „+”. Iată cum arată în exemple:

a:=Adăugare + rânduri; //a=Adăugarea de șiruri

a:=Adăugarea +primului +și+al doilea+ rând;

//a=adăugarea primei și a doua rânduri

De asemenea, puteți combina variabilele șir, de exemplu:

a:=a+b;

Pentru a lucra cu variabile șir în limbajul Pascal Sunt prevăzute următoarele proceduri și funcții speciale:

1. Funcția de lungime:

Lungime(e: șir): întreg;

Această funcție returnează lungimea curentă a șirului s într-o variabilă întreagă.

Iată un exemplu de utilizare a acestei funcții:

N: întreg;

A: șnur scurt;

ÎNCEPE

a:=1-a linie ;

n:=Lungimea(a); //n=10

Sfârşit.

2. Funcția Pos:

Pos(Substring, s:string): octet;

Funcția Pos returnează o valoare întreagă de tip Byte corespunzătoare indexului primului caracter al subșirului care apare în șirul s. Dacă subșirul nu este conținut în șirul s, atunci funcția returnează 0.

Exemplu:

n:=Pos(șir, A); //n=5; (valori luate din primul exemplu)

3. Funcția de copiere:

Copiere(e: șir; Index, Număr: întreg): șir;

Funcția Copiere copiază o parte din șirul s, începând cu caracterul cu număr de index, pentru numărul de caractere Count.

Exemplu:

B: șnur scurt;

ÎNCEPE

a := prima linie;

b:=Copy(a, 3, 5); //b conține pagina a-a

Sfârşit.

4. Funcția Concat:

Concat(s1; s2; …; sn): șir;

Această funcție concatenează mai multe șiruri de caractere prin efectuarea unei operații de concatenare pe argumentele sale. Această operație poate fi efectuată și folosind operatorul de adăugare „+”, așa cum am văzut mai sus.

5. Procedura Val:

Val(s: șir; Var v; Var Cod: întreg;);

șirul de numere, variabilă de tip vîntreg sau real

O procedură, spre deosebire de o funcție, nu returnează nicio valoare, ci pur și simplu își schimbă parametrii. În timp ce unei variabile i se poate atribui o valoare de funcție, o valoare de procedură nu poate fi atribuită.

Funcția Val returnează în variabilă v numărul găsit în șir. În acest caz, întreaga linie trebuie să conțină doar un număr. Altfel, dacă

conversia a eșuat, valoarea codului conține numărul poziției din linia în care a apărut o eroare în timpul conversiei, altfel returnează valoarea 0.

Exemplu:

A: șnur scurt;

V, m: întreg;

ÎNCEPE

a:=2356;

Val(a, v, m); //v=2356, m=0

Sfârşit.

Procedura 6.Str:

Str(y; s: șir);

Variabila y este un număr aparținând unora dintre tipurile de date numerice.

Procedura Str convertește un număr într-un șir s.

Exemplu:

Str(10254, A); //linia a conține acum 10254

7. Procedura de inserare:

Insert(s1: șir; Var s2: șir; index: întreg);

Procedură Inserare inserează șirul s1 în șirul s2, începând de la poziție index . Dacă șirul rezultat s2 devine mai lung de 255 de caractere, atunci caracterele care nu sunt incluse la sfârșit sunt pur și simplu aruncate.

Exemplu:

S1, s2: șir scurt;

Ind:întreg;

ÎNCEPE

s1:=1- i ;

s2:= șir ;

Inserare (s1, s2, 7); //s2= linia 1

Sfârşit.

8. Procedura de ștergere:

Delete(Var s: șir; Index: întreg; Număr: întreg);

Procedura Ștergeți scoate dintr-un șir s partea sa pornind de la pozitie index si continuand pt numără elemente.

Exemplu:

A: șnur scurt;

P, m: întreg;

ÎNCEPE

a:=șir;

Delete(a, 2, 3); //liniaa a început să conţină ska

Sfârşit.

Exemple de programe pentru utilizarea tipului de date șir.

1) Scrieți un program care găsește numărul de litere „k” găsit în text.

programul Pr_27_28_1;

($APPTYPE CONSOLA)

utilizări

SysUtils;

A, a_salvare: șir;

s:octet;

Const bukva="k";

ÎNCEPE

Writeln("Vvedite text");

Readln(a); // introduceți text

a_salvare:=a; //textul în sine se va schimba, așa că salvăm o copie a acestuia

s:=0; //inițializarea contorului de litere „K” înregistrând inițiala

//valori

În timp ce Pos("k",a)>0 face //atâta timp cât „K” apare în text

ÎNCEPE

Delete(a,Pos("k",a),1); //eliminați litera „K” (pentru a găsi litere noi „K”)

s:=s+1; //și mărește contorul cu 1

Sfârşit;

Writeln("Textul dvs.: ",a_save, " soderjit ",s, " bukv "k""); // ieșire de testare și

Readln; //numărul de litere „K” găsite în el

Sfârşit.

2) Acum să vedem cum puteți evidenția unele cuvinte sau grupuri de cuvinte în text. Dacă putem folosi algoritmul programului pentru a determina unde se află cuvintele textului, vom putea efectua operațiunile necesare asupra acestor cuvinte și a textului în ansamblu (copiere, modificare, ștergere, adăugare de simboluri între cuvinte și multe alte operații). ).

Lungimea textului nostru poate fi determinată folosind funcția Length(s). Astfel, bucla, care va trece prin toate caracterele textului nostru, este scrisă după cum urmează (i variabilă de tip întreg, s textul nostru):

In timp ce eu

ÎNCEPE

Sfârşit;

Fiecare cuvânt din text se termină cu un anumit simbol, de exemplu, un spațiu, un punct, două puncte sau un fel de semn (semn de exclamare, semn de întrebare, ghilimele etc.). Pentru a ne simplifica sarcina, vom presupune că toate cuvintele din text sunt separate prin spații, iar textul în sine se termină cu un punct. După cum s-a spus în lecția despre tipul de date de caractere Char, fiecare caracter are propriul său caracter cod unic. O listă cu toate codurile este conținută în tabelul ASC2, în care codul de spațiu corespunde numărului 32. Pentru a accesa orice caracter, trebuie fie să specificați caracterul în sine în apostrofe, fie să specificați codul acestuia după semnul hash.# . Caracterul spațiu este un caracter care nu poate fi afișat, așa că accesăm acest caracter astfel:#32 .

Pentru a evidenția orice cuvânt din text, trebuie să găsim sfârșitul acestui cuvânt: un spațiu sau un punct (pentru ultimul cuvânt). Bucla care găsește fiecare cuvânt al textului este scrisă după cum urmează:

inach:=i;

în timp ce (S[i]<>#32) și (S[i]<>„.”) face

ÎNCEPE

St:=St+S[i]; inc(i);

Sfârşit;

Variabila I stochează numărul caracterului text curent, inach stochează numărul primului caracter al unui cuvânt (în raport cu sarcina noastră, un cuvânt poate fi considerat atât un număr, cât și orice set de caractere afișate). Variabil S conţine textul nostru, iar în Sf Cuvântul nostru evidențiat este format literă cu literă.

Dacă dorim să ștergem un cuvânt găsit, de exemplu, dacă acest cuvânt conține mai mult de 8 litere, trebuie să scriem următorul fragment de program:

inach:=i;

în timp ce (S[i]<>#32) și (S[i]<>„.”) face

ÎNCEPE

St:=St+S[i]; inc(i);

Sfârşit;

Dacă i>8 atunci

Delete(S, inach, i-1);

else inach:=inach+i-1;

Acum să scriem un program care va genera un nou text care să conțină text sursă numai cuvintele care încep și se termină cu aceeași literă:

programText2z;

($APPTYPE CONSOLA)

utilizări

SysUtils;

Var S,St: sfoară;

Z: 0..50;

Inach,i: octet;

B: char;

ÎNCEPE

Writeln("Scrie predlogenie");

Readln(S);

i:=1; z:=0; St:=""; inach:=1; //inițializare

In timp ce eu do //buclă generală (până când tot textul este terminat)

ÎNCEPE

b:=S[i]; //selectați primul caracter

în timp ce (S[i]<>#32) și (S[i]<>".") face // bucla selectează un cuvânt

ÎNCEPE

St:=St+S[i]; inc(z); inc(i);

Sfârşit;

Dacă b<>S atunci //dacă prima și ultima literă ale cuvântului nu sunt egale, atuncidelete(St,inach,z) //trebuie să ștergeți acest cuvânt din generat

//text

Altfel

începe inach:=inach+z+1; St:=St+#32; Sfârşit; //altfel puteți trece mai departe, //adăugând un spațiu după cuvânt

dacă S[i]<>"." Apoi inc(i); z:=0; //dacă nu a fost atins sfârșitul textului, apoi resetați contorul pentru numărul de caractere din cuvântul (z) și creșteți numărul caracterului curent cu 1

Sfârşit;

Writeln("Predlogenie necesară:");

Writeln(St); //se scoate textul rezultat

Readln;

Sfârşit.

Alte lucrări similare care vă pot interesa.vshm>

2764. Tip șir 22,07 KB
Reprezentarea memoriei Unele limbaje de programare impun restricții asupra lungime maximașiruri de caractere, dar majoritatea limbilor nu au astfel de restricții. Principalele probleme în reprezentarea mașinii a tipului de șir: șirurile pot avea o dimensiune destul de semnificativă, până la câteva zeci de megaocteți; Mărimea se modifică în timp, ceea ce face dificilă adăugarea și eliminarea caracterelor. Reprezentarea matricei de caractere În această abordare, șirurile sunt reprezentate ca o matrice de caractere; dimensiunea matricei este stocată într-un spațiu separat...
7176. ORGANIZAREA BAZEI DE DATE ȘI SISTEME DE MANAGEMENT BAZ DE DATE 116,07 KB
De exemplu ca Sistem informatic Vă puteți uita la orarul trenurilor sau la cartea de comenzi. Un atribut înregistrat pe orice suport de stocare se numește element de date, câmp de date sau pur și simplu câmp. La procesarea datelor, sunt adesea întâlnite obiecte de același tip cu aceleași proprietăți.
8335. Informații analogice și discrete. Medii de stocare a datelor. Operații cu date. Codificarea datelor. Sisteme numerice. Entropia și cantitatea de informații 227,54 KB
Sisteme numerice. Sisteme numerice Codificarea datelor a fost folosită de mult timp: codul Morse alfabetul semnalelor maritime Braille etc. În istoria omenirii, două sisteme numerice sunt cele mai cunoscute pentru codificarea numerelor: non-pozițional și pozițional. Ambele sisteme de numere sunt caracterizate de bază prin numărul de cifre diferite folosite pentru a scrie numere, de exemplu de la 0 la 9 m.
8334. Formule Shannon și Hartley. Calculul cantității de informații. Codificarea caracterelor, a datelor grafice și audio. Datele structurează formula lui Shannon 140,5 KB
Pentru a rezolva probleme inverse, când incertitudinea (H) sau cantitatea de informație obținută ca urmare a înlăturării acesteia (I) este cunoscută și este necesar să se determine câte alternative la fel de probabile corespund apariției acestei incertitudini, se folosește inversul Formula Hartley, care este derivată în conformitate cu definiția logaritmului și arată și mai simplă ...
10584. Lucrul la un dicționar 12,01 KB
Lucrul la vocabular este unul dintre scopurile și obiectivele principale în metodologia predării unei limbi străine și, în același timp, una dintre cele mai dificile probleme din mai multe motive, dintre care unul este natura dinamică a vocabularului. În ceea ce privește compoziția lexicală a modernului Limba germană atunci numărul de unități lexicale folosite de vorbitorii nativi în comunicarea de zi cu zi Stndrtsprche variază de la 300. Este destul de evident că stăpânirea unui astfel de volum este dificilă, dacă nu imposibilă, chiar și pentru un vorbitor nativ, ca să nu mai vorbim...
19204. Lucrul cu presa 31 KB
Furnizarea de materiale pentru presă, pe baza cărora jurnaliştii pregătesc apoi mesaje, reportaje, articole, eseuri; răspunderea la întrebările presei și furnizarea de servicii de informare cuprinzătoare (oportunități pentru jurnalişti de a colecta și procesa tehnic informațiile sursă), monitorizarea - urmărirea, analizarea și evaluarea mesajelor de presă, radio și televiziune. Luarea de măsuri, dacă este necesar, pentru corectarea erorilor din mesaje și emiterea de respingeri.
3933. Lucrul cu matrice în PHP 8,92 KB
Inserarea eliminării și înlocuirii elementelor dintr-o matrice Funcția rry_push adaugă unul sau mai multe elemente la sfârșitul matricei, iar funcția rry_pop elimină ultimul element al matricei. Funcția rry_splice elimină lungimea elementelor de matrice începând cu offset offset și, dacă este specificat al treilea parametru, înlocuiește elementele șterse cu elemente de matrice.replcement, dacă parametrul de lungime nu este specificat, elimină elementele până la sfârșitul matricei. Funcția rry_unique elimină valorile duplicate dintr-o matrice, lăsând doar una dintre ele. Funcția rry_merge fuzionează...
3696. Lucrul cu preparate macroscopice 4,7 KB
Forma organului se păstrează sau nu, dacă nu, care este deformarea. Dimensiunea organului este mărită și redusă de aproximativ de câte ori. Culoarea organului de la suprafață.
3936. Lucrul cu sistemul de fișiere în PHP 9,24 KB
Fiecare fișier, pe lângă nume și conținut, are un set de parametri care îi determină caracteristicile (momentul creării, ID-ul proprietarului, numărul de link-uri către acest fișier V Sistemul de fișiereși așa mai departe.). Funcțiile de mai jos oferă acces la aceste informații
6343. ENERGIE, MUNCA, PUTERE 59,23 KB
Conceptele de energie și muncă sunt utilizate pe scară largă în viața de zi cu zi. Se știe că se lucrează din cauza rezervei de energie și, dimpotrivă, făcând muncă, puteți crește rezerva de energie în orice dispozitiv. De exemplu, lucrând la bobinarea unui ceas, creăm o rezervă de energie în primăvară, datorită căreia ceasul funcționează apoi. Conceptul de energie leagă împreună toate fenomenele naturale.

p»їAgenția SEO de încredere din India poate crește veniturile întreprinderilor mici

80% utilizatori caută pe Google și alte motoare de căutare înainte de a face o achiziție și peste 50% dintre întrebările generate prin motoarele de căutare sunt convertite. Aceste două statistici demonstrează importanța optimizării pentru motoarele de căutare. Există multe statistici și fapte ca atare care arată clar: orice afacere la scară mică, mijlocie sau mare are nevoie de servicii SEO profesionale. Întreprinderile mici și startup-urile se confruntă adesea cu probleme bugetare. Ei pot lua ajutorul oricărei agenții SEO de încredere din India pentru a obține cel mai bun serviciu SEO în bugetul lor pentru a-și crește veniturile.
Căutarea are un impact mare asupra minții consumatorilor. Conform diverselor statistici împărtășite de experții majori în optimizarea motoarelor de căutare pe diverse site-uri web autorizate, cum ar fi Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot etc. SEO captează majoritatea clienților potențiali. De asemenea, clienții potențiali care provin din rezultatele căutării organice au o rată de conversie mai mare. Aceste statistici și comportamentul consumatorilor arată mai clar că cel mai bun serviciu SEO nu este un lux, ci o necesitate pentru orice afacere.
Pentru a ocoli concurența și pentru a crește creșterea afacerii, fiecare organizație trebuie să utilizeze serviciile de optimizare pentru motoarele de căutare. Marile branduri pot investi suficienți bani pentru serviciul expert SEO oferit de o companie SEO de top sau un specialist SEO, dar proprietarii de afaceri mici fac adesea compromisuri cu privire la calitatea acestui serviciu din cauza bugetului mai mic. Este un fapt greu că afacerile mici și startup-urile ajung să părăsească oportunitățile care pot fi create cu serviciul SEO profesional sau să folosească un serviciu SEO ieftin, care nu dă rezultate pozitive.
Proprietarii de afaceri mici și startup-urile pot beneficia de servicii SEO profesionale chiar și în bugetul limitat. Cea mai bună soluție este găsirea unei companii SEO de încredere cu sediul în India. În India, există mulți experți SEO care lucrează cu agenția de marketing digital și oferă cele mai bune servicii din industrie. Îți pot oferi serviciile SEO necesare în bugetul tău. Salariile pot fi negociate cu o agenție SEO din India pentru a obține servicii mai bune la tarife mai mici. Cu toate acestea, nu vă îndrăgostiți de un serviciu SEO ieftin, care taxează mai puțin și promite că veți oferi mai mult, deoarece expertiza vine pe propriile lor costuri. Trebuie să vedeți portofoliul sau să puneți întrebări adecvate înainte de a contracta o companie pentru afacerea dvs.
Experții SEO din India sunt calificați cu cele mai bune practici de optimizare pentru motoarele de căutare. De asemenea, există unii specialiști SEO în India, cum ar fi Ash Vyas, care se specializează în crearea celei mai bune strategii de optimizare pentru motoarele de căutare pentru o afacere cu bugetul declarat. Profesioniștii SEO vor crea un plan clar și, de asemenea, vor împărtăși care pot fi rezultatele așteptate. În acest fel, puteți fi bine conștienți de investiția și rentabilitatea dvs. Acest lucru ajută la luarea unei decizii de afaceri mai bune.
O idee bună este să găsiți și să contractați o companie SEO de încredere din India, care să ofere cele mai bune servicii SEO cât mai curând posibil. De asemenea, puteți începe cu un buget mic și activități limitate pentru a începe să vă indexați paginile web și să vă îmbunătățiți cuvintele cheie în motoarele de căutare. Nu așteptați momentul perfect sau o zi când veți avea mii de dolari pentru a investi în cele mai bune servicii SEO. Începerea devreme vă va ajuta să obțineți rezultate mai rapide atunci când puteți deveni agresiv cu abordarea dvs. de marketing. O companie SEO de încredere cu sediul în India vă va ajuta să vă definiți planurile actuale și viitoare pentru a obține rezultate bune. Mai multe pagini indexate au sporit clasamentele și marca credibilă a afacerii tale realizate cu practici SEO profesionale continue vor dubla întrebările, afacerile și veniturile. Orice afacere mică poate începe cu investiții de două cifre în serviciile profesionale SEO. Există multe agenții SEO în India care oferă un buget redus, dar rezultă din servicii de optimizare a motoarelor de căutare.

sondaje din exil

  • CraigWew

    12.04.2018

    p»їImportanța stabilirii raportului cu clientul în domeniul imobiliar și vânzări generale

    Importanta stabilirii unui raport cu clientul.
    Stabilirea relației cu un client trebuie să fie câștigată și trebuie abordată ca o parte integrantă a procesului de vânzare.
    Pentru a face ca un client și pe tine însuți să relaționați pe o bază reală, unul la unul, implică două lucruri!
    În primul rând, va trebui să fii conștient și să fii acolo! În al doilea rând, trebuie să înțelegeți că există două etape diferite care vor avea loc în timpul acestui proces.
    A-Fii acolo-ce înseamnă asta?
    o Majoritatea oamenilor nu ascultă cu adevărat o altă persoană în timp ce vorbește. În general, ei sunt atât de ocupați să formuleze următorul răspuns sau afirmație încât nu au putut să asculte cu adevărat.
    o Dacă asta sună ca tine, a fi acolo înseamnă taci și ascultă!
    B-Care este prima sau etapa inițială?
    o În general, aveți doar câteva minute pentru a vă stabili în mintea clienților ca cineva cu care doresc să aibă de-a face.
    o Când aveți îndoieli, este mai bine să puneți mai întâi întrebări care să-i atragă și să vorbească despre ei înșiși.
    o De asemenea, este întotdeauna sigur să arăți ca un profesionist - nu mă refer la stoic sau sec, ci la cineva care știe ce face și vorbește și arată rolul.
    C-Alte etape
    o Pe măsură ce timpul trece, prin conversații și întrebări pe care le vor avea, fie îți vei stabili capacitatea, fie nu.
    o Fiți conștienți de faptul că probabil că vă vor măsura pentru o perioadă. Vestea bună este că, la un moment dat, dacă ați reușit să stabiliți un raport, ei se vor relaxa și vă puteți concentra amândoi pe găsirea sau vânzarea casei.
    Ce altceva mă poate ajuta să dezvolt relația?
    o Încercând să înțeleagă diferite tipuri de personalitate și apoi spunând și punând întrebările potrivite.
    o Dacă aveți o relație bună (ajungeți la aceeași lungime de undă cu clientul), atunci vânzarea s-a încheiat practic, acum este doar o chestiune de a găsi casa potrivită sau de a completa documentele de listare.
    Dar diferitele personalități
    o Deoarece aceasta nu este o carte despre psihiatrie, deocamdată înțelegeți doar două tipuri principale.
    o Există oameni introvertiți și extrovertiți.
    o Știi tipul. Gândește-te la trei persoane pe care le cunoști și care se potrivesc fiecărei clasificări.
    Dar limbajul corpului și modelele de vorbire?
    o Dacă vorbesc repede sau încet, încercați să le imitați modelele de vorbire.
    o Dacă vorbesc tare sau încet, procedați la fel. Se aplecă înainte sau înapoi?
    o Inutil să spun că există o mulțime de cărți scrise pe acest subiect. Fiți conștienți de faptul că este un factor important, mai ales când stați într-o sală de conferințe sau acasă discutând o afacere de 400.000 USD.
    Dezvoltarea raportului este o abilitate care poate fi învățată și îmbunătățită.
    o Cu toții am experimentat un agent de vânzări care ne-a vândut ceva și totuși nu am simțit că suntem vânduți. Motivul este că el sau ea te-a făcut să te simți confortabil acolo unde ai avut încredere în ei.
    Cum dezvoltăm relația?
    o Folosește-ți ochii și urechile și pune întrebări. A explica
    o Folosește ochii:
    o Uită-te la rochia lor - la mașina lor - la bunurile lor personale și vreau să spun, uită-te cu adevărat la ele și descifrează ce îți spune asta despre ei.
    o Folosește urechile:
    o Ascultă ce spun ei și pune întrebări pentru a ajunge la fundul adevăratei lor MOTIVAȚII!
    Acum, în timpul acestei conversații, probabil că vor fi unul sau două lucruri pe care le vei descoperi pe care le ai în comun cu ei. (Familie, zone geografice, pescuit etc.) Când întâlniți un teren comun, spuneți-le că sunteți familiarizat și apoi acordați-vă un minut pentru a discuta cu ei.
    Care este Scopul?
    o Odată ce vă acceptă ca unul dintre ei, sunteți în măsură să aveți cu adevărat o experiență grozavă în vânzare, deoarece acum lucrați împreună, apoi ca o echipă - nu mai sunteți vânzătorul, vă aflați acum într-o poziție de consilier .
    o Amintiți-vă, clientul fie vă va permite sau nu vă va permite să intrați în lumea lui. Dacă înțelegi acest lucru și muncești din greu pentru a deveni empatic cu el/ea, poți câștiga o poziție de încredere. În cele mai multe cazuri, îi veți vedea de fapt relaxându-se (limbajul corpului) atunci când se întâmplă acest lucru, sunteți pe drum.
    o Pentru a ilustra acest lucru, ați ținut vreodată un discurs și ați observat că atunci când vă conectați în sfârșit cu un membru al publicului, acesta va da din cap în semn de aprobare. Toate aceste lucruri pot părea banale, dar nu sunt.
    În încheiere, dacă poți câștiga încrederea clienților, vânzarea unui produs sau serviciu este mult mai ușoară, iar experiența poate fi plăcută pentru toți cei implicați.
    Amintiți-vă întotdeauna că un Win/Win este cea mai bună situație.

Introducere

Procesarea textului este una dintre cele mai comune sarcini de programare. Dacă trebuie să procesați orice date text, atunci pur și simplu nu vă puteți lipsi de cunoașterea materialului care va fi prezentat mai jos. Mai ales dacă datele au fost generate nu de dvs. personal, ci de unii program terță parte sau o altă persoană.

Simboluri

Un caracter este o unitate de text. Aceasta este o literă, un număr, un fel de semn. Tabelul de coduri de caractere este format din 256 poziții, adică fiecare personaj are al lui cod unic de la 0 la 255. Personaj cu ceva cod N scrie asa: #N. Exact așa sunt indicate simbolurile în codul programului. Deoarece codul caracterului este un număr care nu depășește 255, este evident că în memorie caracterul are 1 octet. După cum știți, nu există nicio dimensiune mai mică de un octet. Mai exact, există - este un bit, dar nu putem lucra cu biți într-un program: un octet este unitatea minimă. Puteți vizualiza tabelul cu simboluri și codurile acestora folosind utilitate standard "tabelul de simboluri", inclusă în Windows (comanda rapidă se află în meniu Start - Programe - Accesorii - Instrumente de sistem). Dar foarte curând vom scrie noi înșine ceva asemănător.

Siruri de caractere

Line, alias text este un set de caractere, orice succesiune a acestora. În consecință, un caracter este și un șir, de asemenea text. Șir de text are o anumită lungime. Lungimea unui șir este numărul de caractere pe care le conține. Dacă un caracter ocupă 1 octet, atunci un șir de N caractere ocupă N octeți.
Există și alte tabele de coduri în care 1 caracter este reprezentat nu de un octet, ci de doi. Acest Unicode (Unicode). Tabelul Unicode conține caractere din toate limbile lumii. Din păcate, lucrul cu Unicode este destul de dificil, iar suportul său este până acum doar local. Delphi nu oferă capabilități Unicode. Partea software da, dar aici sunt elementele vizuale – forme, butoane etc. nu poate afișa text în format Unicode. Să sperăm că un astfel de sprijin va apărea în viitorul apropiat. 2 octeți se mai numesc intr-un cuvant (cuvânt). De aici și numele tipului de date numerice corespunzător - Cuvânt(un număr care ocupă 2 octeți în memorie, valori de la 0 la 65535). Numărul de „celule” din tabelul Unicode este 65536 și este suficient pentru a stoca toate limbile lumii. Dacă decideți că „1 octet - 256 de valori, apoi 2 octeți - 2 * 256 = 512 de valori”, vă sfătuiesc să vă amintiți sistemul binar și principiul stocării datelor într-un computer.

Tipuri de date

Să trecem direct la programare. Există tipuri de date corespunzătoare pentru lucrul cu caractere și șiruri de caractere:

Char - un caracter (adică 1 octet);
String - șir de caractere, text (N octeți).

Oficial, șirurile pot conține doar 255 de caractere, dar în Delphi puteți scrie mult mai mult pe șir. Există tipuri speciale de date pentru stocarea textelor mari și a textelor cu caractere speciale. AnsiStringȘi WideString(acesta din urmă, apropo, este de doi octeți, adică pentru Unicode).

Pentru a seta valorile textului în Pascal, utilizați ghilimele simple(nu dublu!). Acestea. Când doriți să atribuiți o valoare unei variabile șir, ar trebui să procedați astfel:

S:="text" ;

Caracterele sunt specificate în același mod, doar că există un singur caracter în ghilimele.

Dacă doriți să limitați strict lungimea textului stocat într-o variabilă șir, puteți proceda astfel:

var s: șir [ 10 ] ;

Lungimea maximă a liniei este indicată în paranteze.

Operații cu șiruri

Operația principală cu șiruri este adăugarea. Ca și numerele, șirurile pot fi adăugate. Și dacă nu puteți adăuga scaune cu portocale în numere, atunci puteți în rânduri. Adăugarea șirurilor este pur și simplu combinarea lor. Exemplu:

var s: șir ; ... s :="123" +"456" ; //s = "123456"

Deoarece fiecare linie este o secvență de caractere, fiecare caracter are propriul său număr de serie. În Pascal, numerotarea caracterelor în rânduri începe de la 1. I.e. în linie " ABC"simbol" A"- în primul rând," B"- al doilea, etc.
Numărul de serie al unui personaj dintr-o linie nu a fost inventat întâmplător, deoarece prin aceste numere, indici, se realizează acțiunile pe linii. Puteți obține orice caracter dintr-un șir specificând numărul acestuia între paranteze drepte lângă numele variabilei. De exemplu:

var s: șir ; c: char ; ... s :="Bună ziua!" ; c:=s[2]; //c = "e"

Puțin mai târziu, când studiem tablourile, va deveni clar că un șir este o matrice de caractere. Aceasta implică forma de adresare a simbolurilor individuale.

Procesarea șirurilor

Să trecem la funcțiile și procedurile de procesare a șirurilor.

Lungimea șirului

Lungimea unui șir poate fi găsită folosind funcția Lungime(). Funcția preia un singur parametru - un șir și returnează lungimea acestuia. Exemplu:

var Str : String ; L: întreg; ( ... ) Str :="Bună ziua!" ; L:=Lungime(Str); //L = 6

Găsirea unui subșir într-un șir

O sarcină inerentă este de a găsi un subșir într-un șir. Acestea. problema se formulează astfel: există un şir S1. Determinați din ce poziție intră un șir în el S2. Este imposibil să ne imaginăm vreo prelucrare fără a efectua această operație.
Deci, pentru o astfel de constatare există o funcție Poz(). Funcția ia doi parametri: primul - subșir, care trebuie găsit, al doilea - linia, în care doriți să căutați. Căutarea se efectuează ținând cont de cazul caracterelor. Dacă funcția găsește o apariție a unui subșir într-un șir, returnează numărul de poziție al primei sale apariții. Dacă nu se găsește nicio intrare, funcția returnează 0. Exemplu:

var Str1, Str2: String ; P: întreg; ( ... ) Str1:="Bună! Ce faci?" ; Str2:="do" ; P:=Pos (Str2, Str1); //P = 9

Eliminarea unei părți a unei linii

Puteți șterge o parte dintr-o linie folosind procedura Șterge(). Trebuie remarcat faptul că aceasta este o procedură, nu o funcție - efectuează acțiuni direct asupra variabilei care îi este transmisă. Deci, primul parametru este o variabilă de tip șir din care fragmentul este șters (exact o variabilă! O anumită valoare nu este setată, deoarece procedura nu returnează un rezultat), al doilea parametru este numărul caracterului din care fragmentul trebuie șters, al treilea parametru este numărul de caractere pentru eliminare. Exemplu:

var Str1: String ; ( ... ) Str1:="Bună ziua, lume!" ; Delete(Str1, 6, 7); // Str1 = "Bună ziua!"

Trebuie remarcat faptul că, dacă lungimea fragmentului șters este mai mare decât numărul de caractere din linie, începând de la poziția specificată (adică „să trecem dincolo de margine”), funcția va funcționa normal. Prin urmare, dacă trebuie să eliminați un fragment dintr-un șir de la un caracter până la sfârșit, nu trebuie să calculați numărul acestor caractere. Cel mai bun mod va stabili lungimea acestui șir în sine.

Iată un exemplu. Să presupunem că doriți să găsiți prima literă „ într-un șir A" și ștergeți partea de linie care o urmează. Să o facem după cum urmează: găsiți poziția literei în linia cu funcția Poz(), și ștergeți fragmentul folosind funcția Șterge().

var Str : String ; ( ... ) Str :="Acesta este un test." ; Delete (Str ,Pos ("a" ,Str ) ,Lungime (Str ) ) ;

Să încercăm să înlocuim valorile și să vedem ce este transmis funcției Șterge. Prima literă " A" în linie este la poziția 9. Lungimea întregii linii este de 15 caractere. Aceasta înseamnă că apelul funcției este după cum urmează: Delete(Str,9,15). Se poate vedea că din litera " A„Sunt doar 7 caractere până la sfârșitul rândului... Dar funcția își va face treaba, în ciuda acestei diferențe. Rezultatul, desigur, va fi linia” Aceasta este". Acest exemplu a arătat simultan o combinație de mai multe funcții.

Copierea (extragerea) unei părți dintr-un șir

O altă sarcină importantă este copierea unei părți a unui șir. De exemplu, extragerea cuvintelor individuale din text. Puteți selecta un fragment de linie prin eliminarea părților inutile, dar această metodă este incomodă. Funcţie Copie() vă permite să copiați o parte specificată dintr-un șir. Funcția ia 3 parametri: text (șir) din care să copiați, numărul caracterului din care să copiați și numărul de caractere de copiat. Rezultatul funcției va fi un fragment de șir.

Exemplu: să presupunem că trebuie să selectați primul cuvânt dintr-o propoziție (cuvintele sunt separate printr-un spațiu). O vom plasa pe formular Editare1 (TEdit) în care se va introduce propoziţia. Operația se va efectua prin apăsarea unui buton. Avem:

procedura TForm1.Button1Click (Expeditor: TObject) ; var s,cuvânt: șir ; începe s:=Edit1.Text ; word:=Copy (s,1 ,Pos (" " ,s) -1) ; ShowMessage("Primul cuvânt: " +cuvânt) ; Sfârşit ;

În acest caz, un fragment de la început până la primul spațiu este copiat din șir. Numărul de caractere este considerat a fi cu unul mai puțin, deoarece în caz contrar se va copia și spațiul.

Inserarea unui subșir într-un șir

Dacă doriți să introduceți un alt rând într-un rând existent, puteți utiliza procedura Introduce(). Primul parametru este linia de inserat, al doilea este o variabilă care conține linia în care doriți să o introduceți, al treilea este poziția (numărul caracterului) începând de la care va fi inserată linia. Exemplu:

procedura TForm2.Button1Click (Expeditor: TObject) ; var S: String; începe S:="1234567890" ; Insert("000" ,S,3 ); ShowMessage(S) end ;

În acest caz, rezultatul va fi șirul „1200034567890”.

Exemplu „mai serios”.

Exemplele date mai sus demonstrează doar principiul lucrului cu șiruri folosind funcții Lungime(), Poz(), Șterge()Și Copie(). Acum să rezolvăm o problemă mai complicată, care va necesita utilizarea combinată a acestor funcții.

Sarcină:împărțiți textul introdus în câmpul Memo în cuvinte și afișați-le în ListBox, câte unul pe rând. Cuvintele sunt separate unele de altele prin spații, puncte, virgule, semne de exclamare și semne de întrebare. În plus, afișați numărul total de cuvinte din text și cel mai lung dintre aceste cuvinte.

Așa e... Sarcina nu este deloc ușoară. În primul rând, ar trebui să realizați imediat că trebuie să utilizați bucle. Nu există nicio cale fără ele, deoarece nu știm ce text va fi transferat în program pentru procesare. În al doilea rând, cuvintele sunt separate prin simboluri diferite - acest lucru creează dificultăți suplimentare. Ei bine, hai să mergem în ordine.

Interfata: Memo1 (TMemo), Butonul 1 (TBbuton), ListBox1 (TListBox), Eticheta 1, Eticheta 2 (TLabel).

Mai întâi, să transferăm textul introdus într-o variabilă. Pentru a prelua tot textul din Memo deodată, să ne întoarcem la proprietate Rânduri.Text:

procedura TForm1.Button1Click (Expeditor: TObject) ; var Text: șir ; start Text:=Memo1.Lines .Text ; Sfârşit ;

Acum să trecem la procesare. Primul lucru pe care trebuie să-l faceți este să vă ocupați de caracterele delimitare. Cert este că astfel de simboluri pot veni cu ușurință într-un rând, deoarece după virgule, puncte și alte caractere există un spațiu. Puteți ocoli această dificultate în acest mod simplu: înlocuiți toate caracterele de separare cu una, de exemplu, o virgulă. Pentru a face acest lucru, să trecem prin toate personajele și să facem înlocuirile necesare. Pentru a determina dacă un caracter este un delimitator, scriem toți delimitatorii într-o variabilă șir separată (constant), apoi căutăm fiecare caracter din acest șir cu funcția Poz(). Toate aceste înlocuiri vor fi făcute într-o variabilă, astfel încât textul original din Memo (adică pe ecran) să nu fie afectat. Cu toate acestea, pentru a verifica rezultatele intermediare ale lucrării, este logic să scoateți textul procesat undeva. De exemplu, către alt câmp Memo. Pentru a parcurge toate personajele, folosiți o buclă PENTRU, unde variabila va trece prin numerele de serie ale tuturor caracterelor, i.e. de la 1 la lungimea liniei de text:

procedura TForm1.Button1Click (Expeditor: TObject) ; const DelSym = ".,!?" ; var Text: șir ; i:intger ; start Text:=Memo1.Lines .Text ; for i:= 1 to Length (Text) do if Pos (Text[ i] ,DelSym) > 0 then Text[ i] :="," ; Memo2.Text :=Text; Sfârşit ;

Acum trebuie să eliminăm interferența. În primul rând, primul caracter nu ar trebui să fie un delimitator, adică dacă primul caracter este o virgulă, acesta trebuie eliminat. Apoi, dacă există mai multe virgule la rând, acestea trebuie înlocuite cu una. În cele din urmă, pentru a procesa corect tot textul, ultimul caracter trebuie să fie o virgulă.

if Text[ 1 ] = "," atunci Delete (Text,1 ,1 ) ; în timp ce Pos ("," ,Text) > 0 face Delete (Text,Pos ("," ,Text) ,1 ) ; if Text[ Lungime (Text)]<>"," apoi Text:=Text+"," ;

Aici înlocuirea se face astfel: se organizează un ciclu în care se elimină una dintre virgule, dar asta se întâmplă atâta timp cât în ​​text sunt două virgule consecutive.

Ei bine, acum nu a mai rămas nimic de prisos în text - doar cuvinte separate prin virgulă. În primul rând, ne vom asigura că programul extrage primul cuvânt din text. Pentru a face acest lucru, vom găsi prima virgulă, vom copia cuvântul de la începutul textului în această virgulă și apoi vom șterge acest cuvânt din text împreună cu virgula. Ștergerea se face astfel încât să puteți apoi, după efectuarea aceleiași operații, să decupați următorul cuvânt.

var Cuvânt: șir ; (...) Word:=Copy (Text,1 ,Pos ("," ,Text) -1 ) ; Șterge (Text,1, Lungime (Cuvânt) +1);

Acum în variabilă Cuvânt avem un cuvânt din text, iar în variabilă Text restul textului. Cuvântul tăiat este acum adăugat la ListBox, sunând ListBox.Items.Add(line_to_add).

Acum trebuie să organizăm o buclă care să ne permită să tăiem toate cuvintele din text, și nu doar primul. În acest caz ar fi mai potrivit REPETA, Cum IN TIMP CE. Condiția ar trebui să fie Lungime (Text) = 0, adică terminați bucla când textul devine gol, adică când tăiem toate cuvintele din ea.

repetare Word:=Copy (Text,1 ,Pos ("," ,Text) -1) ; Șterge (Text,1, Lungime (Cuvânt) +1); ListBox1.Items.Add(Word) ; până la Lungime (Text) = 0 ;

Curând acest moment avem:

procedura TForm1.Button1Click (Expeditor: TObject) ; const DelSym = ".,!?" ; var Text,Word : șir ; i:intger ; start Text:=Memo1.Lines .Text ; for i:= 1 to Length (Text) do if Pos (Text[ i] ,DelSym) > 0 then Text[ i] :="," ; if Text[ 1 ] = "," atunci Delete (Text,1 ,1 ) ; în timp ce Pos ("," ,Text) > 0 face Delete (Text,Pos ("," ,Text) ,1 ) ; repetare Cuvânt :=Copiere (Text,1 ,Poz ("," ,Text) -1) ; Șterge (Text,1, Lungime (Cuvânt) +1); ListBox1.Items.Add(Word); până la Lungime (Text) = 0 ; Sfârşit ;

Dacă rulați programul acum, veți vedea că totul funcționează bine. Cu excepția unui singur lucru - au apărut niște linii goale la sfârșitul ListBox-ului... Se pune întrebarea: de unde au venit? Veți afla despre acest lucru în următoarea secțiune a lecției, dar deocamdată să implementăm ceea ce este necesar până la sfârșit.

Este foarte ușor să determinați numărul de cuvinte din text - nu trebuie să scrieți nimic din nou. Deoarece Avem cuvintele enumerate în ListBox, este suficient să aflăm câte rânduri există - ListBox.Items.Count.

Label1.Caption := „Numărul de cuvinte din text:”+IntToStr(ListBox1.Items.Count);

Acum trebuie să găsești cel mai lung dintre toate cuvintele. Algoritmul pentru găsirea numărului maxim este următorul: luăm primul dintre numere drept maxim. Apoi verificăm toate celelalte numere în acest fel: dacă numărul este mai mare decât cel scris în prezent ca maxim, facem acest număr maxim. În cazul nostru, trebuie să căutăm lungimea maximă a cuvântului. Pentru a face acest lucru, puteți adăuga cod într-o buclă de cuvinte tăiate din text sau puteți efectua o căutare după ce adăugați toate cuvintele în ListBox. Să o facem în al doilea mod: organizați o buclă prin liniile ListBox. Trebuie remarcat faptul că liniile sunt numerotate de la zero, nu de la unu! Vom stoca cel mai lung cuvânt într-o variabilă separată. S-ar părea că trebuie să stocăm și lungimea maximă a cuvântului, astfel încât să avem cu ce să comparăm... Dar nu este nevoie să creăm o variabilă separată pentru asta, deoarece putem afla oricând lungimea cuvântului. folosind funcția Length(). Deci, să spunem că primul cuvânt este cel mai lung...

var LongestWord: string ; (...) LongestWord:=ListBox1.Items [ 0 ] ; pentru i:= 1 la ListBox1.Items .Count -1 do if Length (ListBox1.Items [i] ) > „Cel mai lung cuvânt:”+LongestWord+" (" +IntToStr (Lungimea (LongestWord) ) +"litere)" ;

De ce ciclu până când ListBox.Items.Count-1, nu doar până când Numara, da-ti seama singur :-)

Acum totul este gata!

procedura TForm1.Button1Click (Expeditor: TObject) ; const DelSym = ".,!?" ; var Text,Word ,LongestWord: șir ; i:intger ; start Text:=Memo1.Lines .Text ; for i:= 1 to Length (Text) do if Pos (Text[ i] ,DelSym) > 0 then Text[ i] :="," ; if Text[ 1 ] = "," atunci Delete (Text,1 ,1 ) ; în timp ce Pos ("," ,Text) > 0 face Delete (Text,Pos ("," ,Text) ,1 ) ; Text:=AnsiReplaceText(Text,Chr (13) ,"" ); Text:=AnsiReplaceText(Text,Chr (10) ,"" ); repetare Cuvânt :=Copiere (Text,1 ,Poz ("," ,Text) -1) ; Șterge (Text,1, Lungime (Cuvânt) +1); ListBox1.Items.Add(Word); până la Lungime (Text) = 0 ; Label1.Caption := „Numărul de cuvinte din text:”+IntToStr(ListBox1.Items.Count); LongestWord:=ListBox1.Items [ 0 ] ; pentru i:= 1 la ListBox1.Items .Count -1 do if Length (ListBox1.Items [ i] ) > Length (LongestWord) then LongestWord:=ListBox1.Items [ i] ; Label2.Caption := „Cel mai lung cuvânt:”+LongestWord+" (" +IntToStr (Lungimea (LongestWord) ) +"litere)" ; Sfârşit ;

Lucrul cu simboluri

De fapt, lucrul cu simboluri se reduce la utilizarea a două funcții principale - Ord()Și Chr(). Ne-am întâlnit deja cu ei. Funcţie Ord() returnează codul caracterului specificat și funcția Chr()- dimpotrivă, returnează un caracter cu codul specificat.

Tine minte" Tabelul cu simboluri„? Hai să o facem noi!

Concluzia poate fi făcută în TStringGrid. Această componentă este un tabel în care fiecare celulă conține o valoare text. Componenta se află pe filă Adiţional(implicit direct după Standard). În primul rând, să ne instalăm semnul. Avem nevoie doar de două coloane: într-una vom afișa codul simbolului, iar în cealaltă - simbolul în sine. Numărul de coloane este setat într-o proprietate cu un nume logic ColCount. Setați-l egal cu 2. În mod implicit, StringGrid sunt specificate o coloană fixă ​​și un rând fix (sunt afișate cu gri). Nu avem nevoie de coloană, dar rândul este foarte util, așa că punem FixedCols= 0, a FixedRows pleca = 1.

Umplerea va fi efectuată direct la pornirea programului, adică. Nu vom instala niciun buton. Deci, să creăm un handler de evenimente OnCreate() forme.

Numărul de caractere din tabelul de coduri este 256, plus antetul - un total de 257. Să setăm numărul de linii în mod programatic (deși îl puteți seta și în Object Inspector):

procedura TForm1.FormCreate (Expeditor: TObject) ; începe StringGrid1.RowCount :=257 ; Sfârşit ;

Concluzia se face extrem de simplu - folosind o buclă. Pur și simplu parcurgem numerele de la 0 la 255 și afișăm simbolul corespunzător. Afișăm și inscripțiile din antet. Acces la celulă StringGrid efectuate folosind proprietatea Celulele: Celule[număr_coloană, număr_rând]. Numerele coloanelor și rândurilor (începând de la zero) sunt indicate între paranteze drepte. Valorile sunt text.

procedura TForm1.FormCreate (Expeditor: TObject) ; var i: Integer ; începe StringGrid1.RowCount :=257 ; StringGrid1.Cells [ 0 ,0 ] :="Cod" ; StringGrid1.Cells [ 1 ,0 ] :="Caracter" ; pentru i:= 0 la 255 nu începe StringGrid1.Cells [ 0 ,i+1 ] :=IntToStr (i) ; StringGrid1.Cells [ 1 ,i+1 ] :=Chr (i) ; Sfârşit ; Sfârşit ;

Hai să lansăm și să aruncăm o privire.

Simboluri speciale

Dacă te uiți cu atenție la tabelul nostru, vei vedea că multe dintre simboluri apar ca pătrate. Nu, acestea nu sunt pictograme. Așa sunt afișate personajele care nu au afișaj vizual. Acestea. un simbol, de exemplu, cu codul 13 există, dar este invizibil. Aceste simboluri sunt folosite în scopuri suplimentare. De exemplu, caracterul #0 (adică caracterul cu codul 0) este adesea folosit pentru a indica absența unui caracter. Există, de asemenea, linii numite terminat nul- acestea sunt linii care se termină cu caracterul #0. Astfel de șiruri sunt folosite în limbajul C.
Apăsările de taste pot fi identificate prin coduri. De exemplu, tasta Enter are un cod de 13, Escape - 27, Space - 32, Tab - 9 etc.
Să adăugăm programului nostru posibilitatea de a afla codul oricărei chei. Pentru a face acest lucru, vom procesa evenimentul formular OnKeyPress(). Pentru ca acest mecanism să funcționeze, trebuie să setați formularul KeyPreview = Adevărat.

procedura TForm1.FormKeyPress (Expeditor: TObject ; var Key: Char ) ; începe ShowMessage( „Cod apăsat tastă:”+IntToStr(Ord(Cheie))); Sfârşit ;

Aici afișăm o fereastră cu text. Evenimentul are o variabilă Cheie, care stochează caracterul corespunzător tastei apăsate. Folosind funcția Ord() aflați codul acestui simbol și apoi utilizați funcția IntToStr() Să transformăm acest număr într-un șir.

Exemplu „mai serios” – continuare

Să revenim la exemplul nostru. Este timpul să ne dăm seama de unde provin rândurile goale din ListBox. Ideea este că nu sunt complet goale. Da, vizual sunt goale, dar de fapt fiecare dintre ele are câte 2 caractere speciale. Acestea sunt caractere cu codurile 13 și 10 (adică linia #13#10). În Windows, această secvență a acestor două caractere non-vizuale înseamnă sfârșitul liniei curente și începutul linie nouă. Acestea. În orice fișier și oriunde în general, rupturile de linie sunt două caractere. Și întregul text, în consecință, rămâne o secvență continuă de caractere. Aceste caractere pot (și chiar ar trebui) să fie folosite în cazurile în care trebuie să inserați o întrerupere de linie. Puteți citi mai multe despre asta în articol. Cunoștințele dobândite în toate lecțiile anterioare, inclusiv în aceasta, sunt destul de suficiente pentru a înțelege acest articol - este destul de scurt.

Să ducem programul nostru de căutare de cuvinte la concluzia sa logică. Deci, pentru a scăpa de liniile goale, trebuie să eliminăm caracterele #13 și #10 din text. Acest lucru se poate face folosind o buclă, similar cu modul în care am înlocuit două virgule cu una:

în timp ce Pos (Chr (13) ,Text) > 0 face Delete (Text, Pos (Chr (13 ),Text) ,1) ; în timp ce Pos (Chr (10 ) ,Text) > 0 face Delete (Text, Pos (Chr (10 ) ,Text) ,1 ) ;

Ei bine, acum programul este complet funcțional!

Funcții suplimentare pentru lucrul cu șiruri - modulul StrUtils

Modul suplimentar StrUtils.pas conţine funcții suplimentare pentru lucrul cu sfori. Printre aceste funcții există multe altele utile. Unele dintre funcții sunt discutate mai detaliat în articol. Si aici scurta descriere funcții utilizate frecvent:

PosEx(subșir, linia, indentare) - o funcție similară cu funcția Poz(), dar căutând din poziția specificată (adică indentată de la începutul liniei). De exemplu, dacă doriți să găsiți al doilea spațiu dintr-un șir, și nu primul, nu puteți face fără această funcție. Pentru a căuta manual al doilea spațiu, trebuie mai întâi să tăiați o parte din șirul original.

AnsiReplaceStr, AnsiReplaceText (linia, text_1, text_2) - funcțiile efectuează înlocuirea într-un șir linia linii text_1 pe text_2. Funcțiile diferă doar prin aceea că primul efectuează înlocuirea ținând cont de cazul caracterelor, iar al doilea - fără el.
În programul nostru, putem folosi aceste funcții pentru a tăia caracterele #13 și #10 dintr-un șir, specificând un șir gol ca text de înlocuire. Iată o soluție într-o singură linie de cod:

Text:=AnsiReplaceText(AnsiReplaceText(Text,Chr (13) ,"" ),Chr (10 ) ,"" ) ;

DupeString(linia, număr_de_repetiții) - formează un șir format din șir linia repetându-l de un anumit număr de ori.

ReverseString(linia) - inversează șirul (" 123 " -> "321 ").

Merită menționate și funcțiile de conversie a registrului.

Majuscule(linia) - convertește un șir în majuscule; Minuscule(linia) - convertește șirul în minuscule.

Pentru a converti caractere individuale, ar trebui să utilizați aceleași funcții.

Informații detaliate despre fiecare funcție pot fi obținute introducând numele acesteia oriunde în editorul de coduri, plasând cursorul pe acest nume (sau evidențiind-o) și apăsând F1.

Capturi de ecran ale programelor descrise în articol