Prosessen med å forberede oppgaver for deres løsning ved hjelp av en datamaskin; iterativ programmeringsprosess. På engelsk: Programmering Se også: Programmering Livssyklus programvare Dataprogrammer Finansordbok Finam ... Økonomisk vokabular
PROGRAMMERING, se DATAMASKINPROGRAMMERING ... Vitenskapelig og teknisk encyklopedisk ordbok
1) prosessen med å utarbeide et program, en handlingsplan. 2) Seksjon for informatikk, studere metoder og teknikker for programmering. Med litt konvensjon er P. som disiplin delt inn i: teoretisk, studiemat. abstraksjoner av programmer (som objekter med ... ... Fysisk leksikon
Koding (på (maskin, mus) språk) Ordbok med russiske synonymer. programmering n., antall synonymer: 9 autoprogrammering (1) ... Synonymordbok
programmering- Jeg, jfr. programmerer. 1. Grenen for beregningsmatematikk og ingeniørfag knyttet til drift elektroniske maskiner, med automat program ledelse; programmering 10. BAS 1. 2. Handling etter verdi. kap. programmering. Programmering ...... Historisk ordbok for russisk gallisisme
Prosessen og kunsten å skape dataprogrammer og/eller programvare som bruker programmeringsspråk. Programmering kombinerer elementer av kunst, grunnleggende vitenskaper (primært informatikk og matematikk), ingeniørfag, ... ... Forretningsordliste
programmering- Vitenskapelig og Praktiske aktiviteter om å lage programmer. [GOST 19781 90] utvikling av programmeringsprogramvare - [ES Alekseev, AAMyachev. The English Russian Explanatory Dictionary of Computer Systems Engineering. Moskva 1993] Emner informasjonsteknologi v … … Teknisk oversetterveiledning
PROGRAMMERING, 1) prosessen med å utarbeide et elektronisk dataprogram (utvikle et program i samsvar med algoritmen for å løse et problem, skrive det på et programmeringsspråk og feilsøke). Utføres av programmereren eller ... ... Moderne leksikon
Prosessen med å forberede problemer for å løse dem på en datamaskin, bestående av følgende stadier: utarbeide en plan for å løse et problem i form av et sett med operasjoner (algoritmisk beskrivelse av problemet); en beskrivelse av løsningsplanen i et programmeringsspråk (programmering); ... ... Stor encyklopedisk ordbok
En spesiell form for organisering av problematisk tenkning og aktiviteter, som involverer utarbeidelse av et program; P. er en form for å koble sammen ideelle og sosiokulturelle realiteter, en særegen måte å gå over fra den ene til den andre. Siden programmet skal ... ... Den siste filosofiske ordboken
PROGRAMMERING, I, jfr. (spesialist.). 1. se programmering. 2.Del anvendt matematikk og datateknologi, utvikle metoder for å kompilere programmer (i 6 sifre). Forklarende ordbok Ozhegova. S.I. Ozhegov, N.Yu. Shvedova. 1949 1992 ... Ozhegovs forklarende ordbok
Bøker
- Programmering i F #, Smith K .. F # er et multi-paradigme programmeringsspråk som ikke bare bidrar til å øke produktiviteten gjennom bruk av en funksjonell utviklingsstil, men som også lar ...
- F # Programmering, Chris Smith. F # er et multi-paradigme programmeringsspråk som ikke bare bidrar til å øke produktiviteten gjennom bruk av en funksjonell utviklingsstil, men som også lar ...
Definisjoner [ | ]En sekvens av instruksjoner designet for å bli utført gjentatte ganger kalles syklusens kropp... En enkelt utførelse av en loop-kropp kalles en iterasjon. Uttrykket som bestemmer om iterasjonen skal utføres igjen eller løkken skal avsluttes, kalles utgangstilstand eller betingelsen for slutten av syklusen(eller betingelse for fortsettelse avhengig av hvordan dens sannhet tolkes - som et tegn på behovet for å fullføre eller fortsette syklusen). Variabel lagring nåværende nummer iterasjon kalles iterasjonsteller sykle eller bare syklusteller... Sløyfen inneholder ikke nødvendigvis en teller, telleren trenger ikke å være en - betingelsen for å gå ut av sløyfen kan avhenge av flere variabler endret i sløyfen, eller den kan bestemmes ytre forhold(for eksempel når en viss tid kommer), i sistnevnte tilfelle kan det hende at telleren ikke er nødvendig i det hele tatt. Utførelse av en hvilken som helst sløyfe inkluderer initialisering av sløyfevariablene, kontroll av utgangstilstanden, kjøring av sløyfekroppen og oppdatering av sløyfevariabelen ved hver iterasjon. I tillegg gir de fleste programmeringsspråk midler for tidlig sløyfekontroll, for eksempel sløyfetermineringssetninger, det vil si å gå ut av løkken uavhengig av sannheten i utgangstilstanden (i C, pause) og operatører for å hoppe over iterasjon (i C , Fortsette). Typer av sykluser [ | ]Ubetingede løkker[ | ]Noen ganger bruker programmer løkker, hvis utgang ikke er gitt av logikken til programmet. Slike løkker kalles ubetingede, eller endeløse. Spesiell syntaktiske virkemidler for å lage endeløse sykluser, på grunn av deres atypiske natur, gir ikke programmeringsspråk, derfor lages slike løkker ved hjelp av konstruksjoner designet for å lage vanlige (eller betinget) sykluser. For å sikre uendelig repetisjon, er betingelseskontrollen i en slik løkke enten fraværende (hvis syntaksen tillater, som for eksempel i løkken SLØKKE ... SLUKKE Ada-språk), eller erstattes av en konstant verdi ( mens sant gjør... i Pascal). Språket bruker en loop for (;;) med tomme seksjoner eller løkke mens (1). Løkke med forutsetning[ | ]En løkke med en forutsetning er en løkke som utføres så lenge en bestemt betingelse spesifisert før dens begynnelse er sann. Denne tilstanden er sjekket før utførelse av loop-kroppen, så kroppen kan ikke utføres en gang (hvis betingelsen er falsk helt fra begynnelsen). Mest prosessuelle språk programmering implementeres av operatøren samtidig som, derav dets andre navn - while-loop. På Pascal en løkke med en forutsetning ser slik ut: samtidig som< условие >begynne< тело цикла >slutt; samtidig som (< условие > ) { < тело цикла > } Løkke med postcondition[ | ]Sløyfe med postcondition - en sløyfe der tilstanden kontrolleres etter utførelse av løkkelegemet. Det følger at kroppen alltid henrettet i hvert fall en gang. I Pascal implementeres denne løkken av repetisjonssetningen..until; i C, gjør ... mens. I Pascal ser en postcondition-løkke slik ut: gjenta< тело цикла >før< условие выхода > På C-språk: gjør (< тело цикла >) samtidig som (< условие продолжения цикла > ) I tolkningen av en syklustilstand med en postbetingelse i forskjellige språk det er forskjeller. I Pascal og språkene som er avledet fra den, tolkes tilstanden til en slik syklus som utgangstilstand(syklusen avsluttes når betingelsen er sann, i russisk terminologi kalles slike sykluser også "syklus før"), og i C og dens etterkommere - som fortsettelse tilstand(løkken slutter når betingelsen er falsk; slike looper kalles noen ganger en "bye loop"). Sløyfe med utgang fra midten[ | ]Midt-ut-løkken er mest generell form betinget loop. Syntaktisk er en slik loop formatert med ved hjelp av tre konstruksjoner: begynnelsen av loopen, slutten av loopen og kommandoen for å gå ut av loopen. Startkonstruksjonen markerer punktet i programmet der hoveddelen av loopen begynner, og sluttkonstruksjonen markerer punktet der kroppen slutter. Inne i kroppen må det være en kommando for å gå ut av loopen, når den utføres avsluttes loopen og kontrollen overføres til setningen etter slutten av loopkonstruksjonen. Naturligvis, for at løkken skal utføres mer enn én gang, bør exit-kommandoen ikke kalles ubetinget, men bare når sløyfeutgangsbetingelsen er oppfylt. Den grunnleggende forskjellen mellom denne typen sløyfe og de som er vurdert ovenfor, er at den delen av sløyfen som ligger etter starten av sløyfen og før exit-kommandoen alltid utføres (selv om sløyfeutgangsbetingelsen er sann ved første iterasjon), og den delen av løkkelegemet som ligger etter exit-kommandoen, blir ikke utført ved siste iterasjon. Det er lett å se at ved å bruke en sløyfe med en utgang fra midten, kan du enkelt modellere både en sløyfe med en forutsetning (ved å plassere en utgangskommando i begynnelsen av sløyfekroppen) og en sløyfe med en postbetingelse (ved å plassere en exit-kommando på slutten av løkken). Noen programmeringsspråk inneholder spesielle konstruksjoner for å organisere en løkke med en utgang fra midten. Så, på Ada-språket, brukes konstruksjonen til dette SLØKKE ... SLUKKE og exit-kommandoen EXIT eller AVSLUTT NÅR: LOOP ... En del av kroppen til EXIT WHEN-løkken< условие выхода >; ... Kroppsdel av IF-løkken< условие выхода >SÅ AVSLUTT; SLUTT; ... Kroppsdelen av ENDLOOPEN: Her, innenfor loopen, kan det være et hvilket som helst antall utgangskommandoer av begge typer. Utgangskommandoene i seg selv er vanligvis ikke fundamentalt forskjellige AVSLUTT NÅR brukes når kun utgangstilstanden er sjekket, men enkelt EXIT- når løkken forlates i en av variantene av en kompleks betinget operatør. På språk der slike konstruksjoner ikke er gitt, kan en løkke med en utgang fra midten modelleres ved å bruke en hvilken som helst betinget sløyfe og en tidlig utgangsoperator (som f.eks. gå i stykker i C, exit i Turbo Pascal, etc.), eller den ubetingede hoppoperatøren gå til. Motsyklus (eller syklus for)[ | ]En sløyfe med en teller er en løkke der en variabel endrer verdien fra en gitt startverdi til dens endelige verdi med et eller annet trinn, og for hver verdi av denne variabelen utføres løkkens kropp én gang. I de fleste prosedyreprogrammeringsspråk implementeres det av operatøren til, der telleren er indikert (den såkalte "syklusvariabelen"), det nødvendige antall passeringer (eller grenseverdien for telleren) og muligens trinnet som telleren endres med. For eksempel, på Oberon-2-språket, ser en slik syklus ut som: TIL v: = b TIL e AV s GJØRE... sløyfens kropp SLUTTher er v telleren, b er startverdien til telleren, e er grenseverdien til telleren, s er trinnet). Spørsmålet om verdien av en variabel på slutten av en løkke der denne variabelen ble brukt som teller er tvetydig. For eksempel, hvis et Pascal-program inneholder en konstruksjon av skjemaet: i: = 100; for i: = 0 til 9 begynner ... løkkelegemet slutt; k: = i; spørsmålet oppstår: hvilken verdi vil til slutt tildeles til variabelen k: 9, 10, 100, kanskje noe annet? Hva om syklusen avsluttes før skjema? Svarene avhenger av om tellerverdien økes etter siste iterasjon og om oversetteren endrer denne verdien i tillegg. Et spørsmål til: hva skjer hvis en ny verdi eksplisitt tildeles telleren inne i loopen? Ulike programmeringsspråk løser disse problemene på forskjellige måter. Hos noen er oppførselen til disken tydelig regulert. I andre, for eksempel i samme Pascal, definerer ikke språkstandarden verken den endelige verdien av telleren, eller konsekvensene av dens eksplisitte endring i løkken, men anbefaler ikke å endre telleren eksplisitt og bruke den på slutten av løkken uten reinitialisering. Et Pascal-program som ignorerer denne anbefalingen kan gi andre resultater når det kjøres på ulike systemer og bruke forskjellige oversettere. Spørsmålet på Ada-språket har blitt radikalt løst: telleren anses som beskrevet i overskriften til syklusen, og utenfor den eksisterer den rett og slett ikke. Selv om navnet på telleren allerede er brukt i programmet, brukes en egen variabel som teller inne i loopen. Det er forbudt å eksplisitt tilordne noen verdier til telleren; den kan bare endres av den interne mekanismen til løkkeoperatøren. Som et resultat, konstruksjonen i: = 100; for i i (0.. 9) løkke ... kroppen av løkken endeløkke; k: = i; eksternt lik syklusen ovenfor i Pascal, den tolkes entydig: variabelen k vil bli tildelt verdien 100 fordi variabelen Jeg brukt av utenfor denne syklusen, har ingenting med disken å gjøre Jeg som skapes og endres inne i løkken... Slik isolering av telleren er praktisk og sikker: ingen separat beskrivelse er nødvendig for den, og sannsynligheten for tilfeldige feil assosiert med utilsiktet ødeleggelse av variabler utenfor syklusen er minimal. Hvis programmereren må inkludere i klar kode løkke med en teller, kan det hende at den ikke sjekker om en variabel med navnet den har valgt som teller eksisterer, ikke legger til en beskrivelse av en ny teller i overskriften til den tilsvarende prosedyren, ikke prøver å bruke en av de eksisterende , men i dette øyeblikket"Gratis" tellere. Han skriver ganske enkelt en løkke med en tellervariabel, hvis navn er praktisk for ham, og kan være sikker på at ingen navnekollisjon vil oppstå. En sløyfe med en teller kan alltid skrives som en betinget sløyfe, før starten tildeles telleren en startverdi, og utgangsbetingelsen er når telleren når sin endelige verdi; i dette tilfellet blir en operatør for å endre telleren med et gitt trinn lagt til syklusens hoveddel. men spesielle operatører løkker med en teller kan oversettes mer effektivt, siden den formaliserte formen til en slik løkke tillater bruk av spesielle prosessorkommandoer for å organisere løkker. På noen språk, for eksempel, stammet C og andre fra den, syklusen til til tross for den syntaktiske formen til en løkke med en teller, er det faktisk en løkke med en forutsetning. Det vil si at i C er løkkekonstruksjonen: for (i = 0; i< 10 ; ++ i ) { ... тело цикла } representerer faktisk en annen form for notasjon for konstruksjonen: i = 0; mens jeg< 10 ) { ... тело цикла ++ i ; } Altså i designet til først skrives en vilkårlig erklæring om initialisering av løkken, deretter en fortsettelsesbetingelse og til slutt en bestemt operasjon utført etter hver kropp av løkken (dette trenger ikke å være en endring i telleren; det kan være en pekerredigering eller en helt uvedkommende operasjon). For språk av denne typen kan problemet ovenfor løses veldig enkelt: tellervariabelen oppfører seg på en fullstendig forutsigbar måte, og etter slutten av loopen beholder den sin siste verdi. Felles syklus [ | ]En annen versjon av løkken er en løkke som spesifiserer utførelsen av en operasjon for objekter fra et gitt sett, uten eksplisitt å spesifisere rekkefølgen som disse objektene er oppregnet i. Slike sykluser kalles ledd(og går gjennom samlingen, se sykluser) og representerer en formell registrering av en instruksjon av skjemaet: "Utfør operasjon X for alle elementer inkludert i settet M". Fellesløkken bestemmer i teorien ikke på noen måte i hvilken rekkefølge operasjonen skal brukes på elementene i settet, selv om spesifikke programmeringsspråk selvfølgelig kan spesifisere en spesifikk rekkefølge for iterering over elementene. Vilkårlighet gjør det mulig å optimalisere utførelsen av syklusen ved å organisere tilgang ikke i en gitt programmerer, men i den mest fordelaktige rekkefølgen. Hvis det er mulighet for parallell utførelse av flere operasjoner, er det til og med mulig å parallellisere utførelsen av en felles sløyfe, når samme operasjon utføres samtidig på forskjellige datamoduler for forskjellige objekter, mens programmet forblir logisk konsistent. Fellesløkker er tilgjengelige på noen programmeringsspråk (f.eks. Eiffel, Java, JavaScript, Perl, Python, PHP, LISP, Tcl, etc.) - de lar deg gå gjennom alle elementene i en gitt samling av objekter. I definisjonen av en slik løkke trenger du bare å spesifisere en samling av objekter og en variabel, som i løkkens kropp vil bli tildelt verdien til det nå behandlede objektet (eller en referanse til det). V forskjellige språk programmeringsoperatørsyntaksen er forskjellig: for (type og element: sett) // støttet siden C ++ 11 standard { // bruker element } foreach (skriv inn element i sett) ( // bruker element } for element i [1 .. 100] begynner // Bruke element (kodeytelse ble testet i Delphi 2010) slutt; på tvers satt som markørsløyfe - ved å bruke cursor.item slutt for (type element: sett) ( // bruker element } for (txtProperty i objObject) (/ * bruk: objObject * /) foreach ($ arr som $ element) ( / * bruker $ element * /) // eller foreach ($ arr som $-tast => $-verdi) ( / * ved å bruke indeksverdiene $-nøkkelen og dens verdi $-verdi * / } For hvert element Som type i sett "bruker element Neste element Foreach ($ element i $ sett) (# operasjoner med $ element) $ sett | ForEach-Object (# operasjoner med $ _) for element i iterator_instance: # bruker element Avslutt tidlig og hopp over iterasjon[ | ]Mange programmeringsspråk som har sykliske konstruksjoner i syntaksen har også spesifikke kommandoer som lar deg bryte rekkefølgen på disse konstruksjonene: kommandoen for å gå ut av loopen tidlig og kommandoen for å hoppe over iterasjon. Tidlig utgang fra syklusen[ | ]En tidlig utgangskommando brukes når det er nødvendig å avbryte utførelsen av en syklus der utgangstilstanden ennå ikke er nådd. Dette skjer for eksempel når en feil oppdages under utførelsen av løkkelegemet, deretter videre arbeid løkken er meningsløs. Den tidlige exit-kommandoen kalles vanligvis EXIT eller gå i stykker, og handlingen ligner handlingen til den ubetingede hoppkommandoen ( gå til) til kommandoen umiddelbart etter løkken som denne kommandoen er plassert i. Så i C-språket fungerer de to løkkene nedenfor nøyaktig det samme: // Bruke break-setningen samtidig som (< условие >< ошибка >) gå i stykker; ... operatører) ... fortsettelse av programmet // Et lignende fragment uten brudd samtidig som (< условие >) (... hvis uttalelser (< ошибка >) goto break_label; ... utsagn) break_label: ... fortsettelse av programmet I begge tilfeller, hvis betingelsen er oppfylt i sløyfens kropp<ошибка>, vil overgangen gjøres til operatørene utpekt som "fortsettelse av programmet". Dermed maskerer operatøren for tidlig utgang fra løkken ganske enkelt et ubetinget hopp, men bruk av pause er å foretrekke fremfor å bruke goto, siden oppførselen til pause er klart definert av språket og er potensielt mindre farlig (det er, for eksempel ingen mulighet for å gjøre en feil med plasseringen eller navnet på etiketten). I tillegg bryter ikke det å eksplisitt bryte ut av løkken tidlig, strukturerte programmeringsprinsipper. Den vanlige operatøren for tidlig utgang avbryter arbeidet i syklusen der den er direkte plassert. I en rekke programmeringsspråk er funksjonaliteten til denne operatøren utvidet, den lar deg gå ut av flere nestede løkker (se nedenfor). I slike tilfeller er syklusen du ønsker å avslutte, merket med et merke, og dette merket er angitt i erklæringen om tidlig utgang. Hopp over iterasjon[ | ]Denne operatøren brukes når det i gjeldende sløyfeiterasjon er nødvendig å hoppe over alle kommandoer til slutten av løkkelegemet. I dette tilfellet bør selve syklusen ikke avbrytes, betingelsene for fortsettelse eller utgang skal beregnes på vanlig måte. I C og dets etterkommerspråk brukes operatøren som en iterasjonshoppingskommando Fortsette i løkkekonstruksjonen. Handlingen til denne operatøren ligner på det ubetingede hoppet til linjen i løkken etter den siste kommandoen. For eksempel kan C-kode som finner summen av elementene i en matrise og summen av alle positive elementer i en matrise se slik ut: int arr [ARRSIZE]; ... // elementer i arr-matrisen ved å bruke fortsette. < ARRSIZE ; ++ i ) { sum_all += arr [ i ]; if (arr [ i ] <= 0 ) continue ; sum_pos += arr [ i ]; } // Lignende kode med goto int sum_all = 0; int sum_pos = 0; for (int i = 0; i< ARRSIZE ; ++ i ) { sum_all += arr [ i ]; if (arr [ i ] <= 0 ) goto cont_label ; sum_pos += arr [ i ]; cont_label : } Det andre utdraget viser tydelig hvordan det fungerer. Fortsette: den overfører ganske enkelt kontroll for den siste kommandoen til løkkelegemet, og hopper over tilleggskommandoen hvis neste element i arrayet ikke tilfredsstiller betingelsen. Dermed blir bare summen av de positive elementene i matrisen akkumulert i sum_pos. Trenge [ | ]Fra synspunktet til strukturert programmering er kommandoene for å gå ut av loopen tidlig og fortsette iterasjon overflødige, siden deres handlinger lett kan modelleres med rent strukturelle midler. Dessuten, ifølge en rekke programmeringsteoretikere (spesielt Edsger Dijkstra), selve det faktum å bruke ikke-strukturelle midler i et program, enten det er et klassisk ubetinget hopp eller noen av dets spesialiserte former, som pause eller fortsett, er bevis på en utilstrekkelig utviklet algoritme for å løse problemet. Men i praksis er programkoden ofte en registrering av en allerede eksisterende, tidligere formulert algoritme, som er upraktisk å resirkulere av rent tekniske årsaker. Et forsøk på å erstatte den tidlige exit-kommandoen med strukturelle konstruksjoner i slik kode viser seg ofte å være ineffektivt eller tungvint. For eksempel kodebiten ovenfor med kommandoen gå i stykker kan skrives slik: // Tidlig utgang fra løkken uten pause bool flagg = falsk; // flagg for tidlig avslutning samtidig som (< условие >&&! flagg) (... hvis (< ошибка >) (flagg = sant;) annet (... utsagn)) ... fortsettelse av programmet Det er lett å sørge for at fragmentet vil fungere på samme måte som de forrige, den eneste forskjellen er at på stedet for feilsøking, i stedet for umiddelbart å gå ut av loopen, settes et tidlig utgangsflagg, som er sjekkes senere i standard tilstand for å fortsette sløyfen. Men for å avvise kommandoen tidlig avslutt, måtte vi legge til en flaggbeskrivelse og en andre gren av den betingede setningen til programmet; dessuten var programlogikken "uskarp" (beslutningen om å avslutte tidlig ble tatt på ett sted, og henrettet i en annen). Som et resultat av dette har programmet verken blitt enklere, kortere eller klarere. Situasjonen er noe annerledes med kommandoen skip iteration. Det er vanligvis veldig enkelt og naturlig erstattet av betinget operatør... For eksempel kan fragmentet ovenfor for å summere en matrise skrives slik: int arr [ARRSIZE]; ... // Oppsummering separat alle og bare positive // elementer i arr-matrisen med erstatningen fortsetter int sum_all = 0; int sum_pos = 0; for (int i = 0; i< ARRSIZE ; ++ i ) { sum_all += arr [ i ]; if (arr [ i ] > 0 ) // Tilstand endret til det motsatte!(sum_pos + = arr [i];)) Som du kan se, var det nok å erstatte den sjekkede tilstanden med den motsatte og plassere den siste delen av løkkekroppen i en betinget uttalelse. Du kan se at programmet har blitt kortere (på grunn av fjerning av skip iteration-kommandoen) og samtidig mer logisk (du kan se direkte fra koden at positive elementer summeres). I tillegg kan bruk av skip iteration-kommandoen i en sløyfe med en betingelse (while-loop) også provosere frem en ukjent feil: hvis sløyfekroppen, som ofte er tilfelle, ender med kommandoer for å endre sløyfevariabelen(e), så kommandoen skip iteration vil hoppe over disse kommandoene også, som et resultat av at (avhengig av tilstanden som hoppet oppstår under) kan det oppstå en løkke eller iterasjonsrepetisjon som ikke samsvarer med algoritmen. Så hvis vi erstatter i eksemplet ovenfor for løkke på mens får du følgende: int arr [ARRSIZE]; ... int sum_all = 0; int sum_pos = 0; int i = 0; mens jeg< ARRSIZE ) // Løkken ser ut som den forrige for ...(sum_all + = arr [i]; if (arr [i]<= 0 ) continue ; sum_pos += arr [ i ]; ++ i ; // ... men denne kommandoen vil bli hoppet over når fortsett utføres // og programmet vil gå i loop } Til tross for deres begrensede nytte og muligheten for å erstatte dem med andre språkkonstruksjoner, er kommandoene for å hoppe over iterasjon og spesielt å gå ut av loopen tidlig i noen tilfeller ekstremt nyttige, og det er derfor de forblir i moderne programmeringsspråk. Nestede løkker [ | ]Det er mulig å organisere en løkke inne i kroppen til en annen løkke. En slik syklus vil bli kalt nestet løkke... Den nestede syklusen i forhold til syklusen i kroppen den er nestet av, vil bli navngitt indre løkke, og omvendt, vil en løkke med en nestet løkke i kroppen bli navngitt utvendig i forhold til nestede. Inne i den nestede løkken kan på sin side en annen løkke nestes, og danner den neste hekkenivå etc. Antall hekkenivåer er som regel ikke begrenset. Det totale antallet henrettelser av den indre løkkekroppen overstiger ikke produktet av antall iterasjoner av den indre og alle ytre løkkene. Hvis vi for eksempel tar tre nestede løkker, hver med 10 iterasjoner, får vi 10 kroppsutførelser for den ytre løkken, 100 for løkken på andre nivå og 1000 i den innerste løkken. Et av problemene forbundet med nestede løkker er å organisere en tidlig utgang fra dem. Mange programmeringsspråk har en operatør for tidlig sløyfeterminering ( gå i stykker i Xi, exit i Turbo Pascal, siste i Perl, etc.), men den går vanligvis bare ut av loopen på nivået den ble kalt fra. Å kalle det fra en nestet sløyfe vil avslutte bare denne indre sløyfen, mens den ytre sløyfen vil fortsette å kjøre. Problemet kan virke langsøkt, men det oppstår noen ganger ved programmering av kompleks databehandling, når en algoritme krever et øyeblikkelig avbrudd under visse forhold, hvis tilstedeværelse kun kan kontrolleres i en dypt nestet sløyfe. Det er flere løsninger på problemet med å gå ut av nestede løkker. Løkker med flere bevoktede greiner[ | ]Dijkstra syklus [ | ]I programmeringsteori er det en annen, fundamentalt forskjellig fra den "klassiske" formen for en syklisk konstruksjon, kalt "Dijkstras syklus", oppkalt etter Edsger Dijkstra, som først beskrev den. I den klassiske Dijkstra-beskrivelsen ser en slik syklus slik ut: Gjør P 1 → S 1,... P n → S n od Her er markøren for begynnelsen av løkkekonstruksjonen, od er markøren for slutten av løkkekonstruksjonen, P i - Jeg-e beskyttende tilstand(et logisk uttrykk som kan ha verdien "true" eller "false"), S i - Jeg-Jeg er bevoktet lag... En syklus består av en eller flere grener(beskyttede uttrykk), som hver er et par av voktertilstanden (eller kort sagt "vakt") og det bevoktede laget (forståelig nok kan laget være komplekst i virkeligheten). Når Dijkstra-syklusen utføres, beregnes vaktforholdene i hver iterasjon. Hvis minst én av dem er sann, utføres den korresponderende bevoktede kommandoen, hvoretter en ny iterasjon begynner (hvis flere vaktbetingelser er sanne, utføres kun én bevoktet kommando). Hvis alle beskyttelsesforhold er falske, avsluttes syklusen. Det er lett å se at Dijkstras syklus med én vakttilstand og én bevoktet kommando faktisk er en vanlig syklus med en forutsetning ("bye"-syklus). Selv om Dijkstra-syklusen ble oppfunnet på 1970-tallet, inneholder ikke programmeringsspråk spesielle konstruksjoner for å lage den. Det eneste unntaket var det nylig opprettede Oberon-07, det første virkelige programmeringsspråket som eksplisitt støtter en loop med flere bevoktede grener. Imidlertid kan Dijkstras løkke modelleres uten store problemer ved å bruke tradisjonelle strukturer av strukturelle programmeringsspråk. Her er et eksempel på implementeringen på en av de mulige måtene på Ada-språket: sløyfe hvis P1 så S1; ... elsif Pn deretter Sn; annet avslutte; slutt om; endeløkke; Her er P1-Pn vaktforhold og S1-Sn er de tilsvarende bevoktede kommandoene. Dijkstras loop er nyttig for noen spesifikke repeterende beregninger som er vanskelige å beskrive ved å bruke mer tradisjonelle looping-konstruksjoner. For eksempel representerer denne syklusen naturlig en begrenset automat - hver gren tilsvarer én tilstand av automaten, de beskyttede forholdene er konstruert slik at i den gjeldende iterasjonen velges grenen som tilsvarer den nåværende tilstanden til automaten, og koden til beskyttet kommando sikrer at beregninger utføres i gjeldende tilstand og overgang til neste (dvs. en slik endring i variabler, hvoretter, ved neste iterasjon, vil vakttilstanden til den ønskede grenen være sann). Edderkopp syklus [ | ]Det er lett å se at Dijkstras syklus ikke inneholder en eksplisitt fortsettelses- eller exitbetingelse, som ikke anses som en velsignelse av alle programmeringsteoretikere. Derfor ble det foreslått en komplisert konstruksjon av Dijkstra-syklusen, som ble kalt "edderkoppsyklusen". I samme notasjon ser det slik ut: Gjør P 1 → S 1,... P n → S n ut Q 1 → T 1,... Q n → T n annet E od Her, etter utmarkøren, har vi lagt til oppsigelsesgrener bestående av utgangsbetingelser Q i og fullføringskommandoer Ti. I tillegg lagt til en alternativ fullføring else gren med E-kommandoen. Edderkoppløkken går slik:
Strukturen til "edderkopp" -syklusen lar deg meget strengt beskrive betingelsene for utførelse av syklusen. I henhold til de teoretiske bestemmelsene skal den alternative termineringsgrenen ikke brukes som et av alternativene for riktig avslutning av syklusen (alle slike alternativer bør formaliseres i form av de tilsvarende termineringsgrenene med en eksplisitt betingelse), den tjener bare å spore situasjonen da for noen så av en eller annen grunn begynte syklusen å gå unormalt. Det vil si at den alternative fullføringskommandoen bare kan analysere årsakene til feilen og presentere analyseresultatene. Selv om det ikke er noen eksplisitt syntaksstøtte for denne løkken i noe programmeringsspråk, kan en edderkoppløkke, som Dijkstras løkke, modelleres ved hjelp av tradisjonelle strukturelle konstruksjoner. Løkkeoptimaliseringsteknikker[ | ]tilsvarende transformasjoner av kildekoden kompilator |
I den moderne verden er en person konstant i informasjonsøkosystemet, skapt for å forenkle livet hans. Ulike elektriske dingser, datamaskiner, mobiltelefoner, intelligente kjøretøystyringssystemer – vi bruker alle disse teknologiske fremskritt på daglig basis. Og det er ganske naturlig at med utviklingen av menneskeheten vokser også utvalget av mulige applikasjoner for slike enheter. Det er derfor aktiviteter knyttet til IT i dag anses som de mest dynamisk utviklende, og derfor ekstremt lønnsomme, så programmeringstimer vil ikke være overflødig for noen.
Hvordan fungerer digitale enheter?
Prinsippet for drift av de fleste moderne enheter er samspillet mellom to miljøer - maskinvare og digital. Den første er et sett med mikrokretser, sensorer og andre fysiske elementer som er nødvendige for at enheten skal fungere riktig. Ofte er den utformet på en slik måte at teknikken kan utføre flere oppgaver samtidig uten å være høyspesialisert. Moderne prosessorer, som er "hjertet" i enhver høyteknologisk gadget, kan løse en rekke oppgaver. Men for at disse enhetene skal begynne å fungere riktig, utvikler produsentene aktivt ulike programmeringsteknologier. Dette er den andre, "digitale" delen av et datastyrt apparat.
Hva menes med programmering?
Så hva er programmering? Ved første øyekast kan det virke som at svaret på dette spørsmålet er ganske åpenbart. Faktisk er det en rekke nyanser som ikke bør overses.
Programmeringsteknologi er prosessen med å skrive et bestilt sett med instruksjoner for maskinvaren til en enhet. Det er de som indikerer til prosessoren og alle relaterte detaljer hvilke beregninger de må utføre og i hvilken rekkefølge.
Takket være korrekt skrevne kodesystemer kan mobiltelefoner nøyaktig bestemme nummeret til en person som ringer oss, gi tilgang til postkasser, og moderne biler kan gjøre det uten deltakelse fra en sjåfør.
Høyt dyktige programmerere må gjøre jobben på daglig basis for å lage algoritmer som enheter kan løse nye problemer med, uten behov for fysisk forbedring eller modifikasjon. Dette er delvis grunnen til at mange unge mennesker, når de velger karriereveier, tar hensyn til denne raskt utviklende industrien.
Studiespørsmål
Det bør bemerkes at det å lære å programmere er relativt billig. I motsetning til andre yrker, der ferdighetene som er nødvendige for tildeling av kvalifikasjoner kun kan oppnås i høyere utdanningsinstitusjoner eller direkte på arbeidsstedet, kan du lære å lage en høykvalitetskode på egen hånd, hjemme.
Det er slett ikke vanskelig å finne den nødvendige informasjonen - lærebøker, spesiallitteratur er nesten fritt tilgjengelig. Dermed er det ikke vanskelig å velge et treningssystem med riktig kompleksitetsnivå på russisk, engelsk eller et hvilket som helst annet språk.
Ulike konferanser er viet til dette, temaet diskuteres heftig av lærere og spesialiserte spesialister, siden dagens industri sårt trenger en strøm av friske sinn som kan akselerere den generelle utviklingen av teknologi.
De begynner å vise eksempler på programmering til barn i grunnskolen, på skolene. Selvfølgelig, i slike leksjoner, vurderes bare de enkleste versjonene av koder, og ofte introduserer lærere ganske enkelt den yngre generasjonen til et eller annet operativsystem.
Fra et vitenskapelig synspunkt er informatikk og programmering like, men det første er et mer generelt konsept, som ikke bare inkluderer å skrive programkode, men også studiet av ulike tilnærminger til design av digitale systemer generelt.
Lære prosess
Nesten hver ung mann og kvinne som aktivt bruker Internett og moderne informasjonsteknologi er i stand til å svare på spørsmålet om hva programmering er. Imidlertid forstår ikke alle tydelig hvor de skal begynne for å studere denne vitenskapen for å gjøre fremskritt og ikke miste interessen halvveis.
Det er mange forskjellige metoder som tilbyr undervisning i programmering, fra ekspresstrening, som innebærer et intensivt praktisk kurs, som introduserer studentene til syntaksen og funksjonene til den valgte teknologien, til dype teoretiske programmer som tar sikte på å lære de grunnleggende paradigmene og konseptene før den første linjen med kode er skrevet. Dermed er det ikke så vanskelig å finne en passende metode.
Oftest handler programmering for nybegynnere om å demonstrere de grunnleggende egenskapene til det valgte språket. Samtidig jobbes det med å involvere faget i prosessen, og i fremtiden går de over til å studere egenskapene til teknologien.
Det er sjelden å finne programmeringstimer der du ikke blir bedt om å skrive din egen kode på slutten som tydelig vil demonstrere konseptet eller funksjonen til språket som studeres. Dette tillater ikke bare å oppsummere en slags oppsummering, men også å bestemme det videre handlingssystemet.
Programmering for nybegynnere byr på visse vanskeligheter, så hver leksjon bør føre til det endelige målet - da vil studenten få muligheten til å spore hvert spesifikt konsept av språket i praksis, noe som vil forbedre den endelige oppfatningen av materialet.
Velge en programmeringsteknologi å studere
Den intensive utviklingen av dataverdenen har bidratt til at det finnes flere dusin forskjellige språk for å skrive koder på markedet. Dette mangfoldet har ført til at prosessen med å mestre vitenskap begynner med en detaljert undersøkelse av markedet og valg av passende teknologi.
En annen mulighet
Det nest mest populære aktivitetsfeltet er webutvikling. Dette er opprettelsen av programvareprodukter relatert til aktivitetene til nettsteder og ulike Internett-plattformer. Det er mange flere programmeringsspråk og teknologier i bruk i denne delen av bransjen, så det er mye å velge mellom. Nybegynnere krangler ofte om eksistensen av den eneste "riktige" måten å begynne å lære på, men dette er for abstrakt konsept, og alle velger det de liker best.
Det bør huskes at dette området krever en større mengde kunnskap, siden for å lykkes, må du løse et stort antall oppgaver knyttet ikke bare til selve produktet, men også til relaterte teknologier - datalagring, drift og konfigurering av servere osv.
Enn å skrive
De såkalte "funksjonelle" programmeringsspråkene regnes som en spesiell kategori. De er ikke mye brukt i kommersiell utvikling, men de brukes ofte til å validere vitenskapelige hypoteser og simulere komplekse beregninger.
Disse språkene er ofte utviklet og støttet av universitetsteam rundt om i verden, og utvikler seg derfor dynamisk for å møte nye utfordringer.
Spesielle alternativer
Separat er det en gruppe såkalte esoteriske programmeringsspråk som ikke er så utbredt, og deres bruk er begrenset til et enkelt konsept, for bekreftelsen som de faktisk ble utviklet. I slike tilfeller er svaret på spørsmålet "Hva er programmering?" vil være veldig spesiell på grunn av aktivitetens spesifikke egenskaper.
Hva er det verdt å studere for?
De fleste entusiastiske nybegynnere har et mål i tankene. Noen tiltrekkes av utsiktene til karrierevekst og materiell sikkerhet. Dette er ikke en illusjon - gode spesialister kan prøve seg i en rekke roller, og inntektene deres avhenger direkte av settet med teknologier de er i stand til å operere med.
Andre studerer denne vitenskapen "for seg selv", fordi programmering, som enhver eksakt disiplin, utvikler logikk og lærer å bygge en algoritme for å løse et gitt problem, for å se etter de mest optimale måtene å oppnå et resultat på.
Derfor er ikke svaret på spørsmålet om hva programmering er så enkelt. Faktisk er dette ikke bare et middel for å oppnå materiell velstand ved å delta i en intensivt utviklende industri, men også en ekstremt nyttig aktivitet for å stimulere kritisk og logisk tenkning, en måte å løse oppgaver ved å bryte algoritmen i separate små deler.
I snever forstand (den såkalte koding) programmering forstås som å skrive instruksjoner (programmer) på et spesifikt programmeringsspråk (ofte i henhold til en allerede eksisterende algoritme - en plan, en metode for å løse et gitt problem). Følgelig kalles folk som gjør dette programmerere (i profesjonell sjargong - kodere), og de som utvikler algoritmer kalles algoritmer, fageksperter, matematikere.
I en bredere forstand forstås programmering som hele spekteret av aktiviteter knyttet til opprettelse og vedlikehold av programmer - dataprogramvare. Dette kalles også "software engineering" ("software engineering"). Dette inkluderer å analysere og sette et problem, designe et program, bygge algoritmer, utvikle datastrukturer, skrive programtekster, feilsøke og teste et program (teste et program), dokumentere, sette opp (konfigurere), revidere og vedlikeholde.
Dataprogrammering er basert på bruk av programmeringsspråk som programmet er skrevet på. For at programmet skal forstås og utføres av en datamaskin, kreves et spesielt verktøy - en oversetter.
For tiden brukes integrerte utviklingsmiljøer aktivt, som også inkluderer en editor for å legge inn og redigere programtekster, debuggere for å finne og rette feil, oversettere fra ulike programmeringsspråk, linkere for å bygge et program fra flere moduler, og andre tjenestemoduler.
En tekstredigerer i et programmeringsmiljø kan ha spesifikk funksjonalitet, for eksempel indeksering av navn, visning av dokumentasjon og visuell oppretting av et brukergrensesnitt. Ved hjelp av et tekstredigeringsprogram skriver og redigerer programmereren teksten til det opprettede programmet, som kalles kildekoden. Et programmeringsspråk definerer syntaksen og den originale semantikken til kildekoden. Kompilatoren konverterer teksten til programmet til maskinkode som utføres direkte av datamaskinens elektroniske komponenter. Tolken lager en virtuell maskin for å kjøre et program, som helt eller delvis overtar funksjonene til å kjøre programmer.
Programmeringsstadier
Programmering i vid forstand kan deles inn i flere stadier:
- Analyse
- Design - utvikling av et sett med algoritmer
- Koding og kompilering - Skrive kilden til et program og konvertere det til kjørbar kode ved hjelp av en kompilator
- Testing og feilsøking - identifisere og eliminere feil i programmer,
- Testing og bestått programmer
- Eskorte
Den første programmerbare dataenheten, Analytical Engine, ble utviklet av Charles Babbage (men klarte ikke å bygge den). Den 19. juli 1843 antas grevinne Ada Augusta Lovelace, datter av den store engelske poeten George Byron, å ha skrevet det første programmet i menneskehetens historie for Analytical Engine. Dette programmet løste Bernoulli-ligningen, som uttrykker energisparingsloven for en flytende væske. I sitt første og eneste vitenskapelige arbeid tok Ada Lovelace opp et stort antall problemstillinger. En rekke av de generelle bestemmelsene uttrykt av henne (prinsippet om å lagre arbeidsminneceller, koblingen av tilbakevendende formler med sykliske beregningsprosesser) har beholdt sin grunnleggende betydning for moderne programmering. Babbages materiale og Lovelaces kommentar skisserte konsepter som subrutine- og subrutinebibliotek, instruksjonsmodifikasjon og indeksregister, som ikke kom i bruk før på 1950-tallet. Imidlertid har ingen av programmene skrevet av Ada Lovelace noen gang blitt lansert.
Programmerings språk
Mesteparten av arbeidet til programmerere er knyttet til å skrive kildekode, teste og feilsøke programmer på et av programmeringsspråkene. Kildetekster og kjørbare filer av programmer er underlagt opphavsrett og er den intellektuelle eiendommen til deres forfattere og opphavsrettsinnehavere.
Ulike programmeringsspråk støtter forskjellige programmeringsstiler (programmeringsparadigmer). En del av kunsten å programmere er å velge det programmeringsspråket som passer best til oppgaven. Ulike språk krever at programmereren har ulike nivåer av oppmerksomhet på detaljer når de implementerer en algoritme, noe som ofte resulterer i en avveining mellom enkelhet og ytelse (eller mellom programmererens tid og brukertid).
Det eneste språket som kjøres direkte av en datamaskin er maskinspråk(også kalt maskinkode og maskinspråk). I utgangspunktet ble alle programmer skrevet i maskinkode, men nå gjøres dette praktisk talt ikke lenger. I stedet skriver programmerere kildekode på et bestemt programmeringsspråk, og ved hjelp av en kompilator oversetter de den i ett eller flere trinn til maskinkode klar for kjøring på målprosessoren, eller til en mellomrepresentasjon som kan utføres av en spesiell tolk - en virtuell maskin.... Men dette gjelder bare for språk på høyt nivå. Hvis det kreves full kontroll på lavt nivå over systemet på nivå med maskininstruksjoner og individuelle minneceller, skrives programmer på assemblerspråk, hvis mnemoniske instruksjoner konverteres en-til-en til de tilsvarende maskinspråkinstruksjonene til målet dataprosessor. (Av denne grunn oppnås assembly language-oversettere - assembly-språk - algoritmisk av de enkleste oversetterne.)
På noen språk, i stedet for maskinkode, genereres en tolket "virtuell maskin" binær, også kalt bytekode (byte-kode). Denne tilnærmingen brukes i Forth, noen implementeringer av Lisp, Java, Perl, Python, språk for .NET Framework.
Litteratur
- Dijkstra E. Disiplin av programmering = En disiplin av programmering. - 1. utg. - M .: Mir, 1978 .-- 275 s.
- Bjarne Stroustrup. Programmering: Prinsipper og praksis ved bruk av C ++, revidert utgave. - M .: Williams, 2011 .-- S. 1248 .-- ISBN 978-5-8459-1705-8
- Alexander Stepanov, Paul McJones. Begynnelsen av programmering = Programmeringselementer. - M .: Williams, 2011 .-- S. 272 .-- ISBN 978-5-8459-1708-9
- Robert W. Sebesta. Grunnleggende begreper om programmeringsspråk / Per. fra engelsk - 5. utg. - M .: Williams, 2001 .-- 672 s. - ISBN 5-8459-0192-8 (russisk) ISBN 0-201-75295-6 (engelsk)
- Ian Somerville. Software Engineering / Per. fra engelsk - 6. utgave. - M .: Williams, 2002 .-- 624 s.
- Ian Graham. Objektorienterte metoder. Prinsipper og praksis / Pr. fra engelsk - 3. utg. - M .: Williams, 2004 .-- 880 s.
Hei alle sammen.
Hvordan forstå essensen av programmering i generelle termer? For å ha en ide om dette.
Jeg skal prøve å avklare spørsmålet mitt:
La oss si at vi ser hvordan kunstnere tegner (på papir eller ved hjelp av en datamaskin). Vi ser at tegningen begynner med en struktur, en generell form, en trådramme av objekter, deretter legges det til små detaljer, lys, skygger, farger.
Eller vi ser hvordan en keramiker lager en kanne, eller hvordan en bil blir til på en fabrikk: fra et «tomt» karosseri til en ferdig bil.
For klarhetens skyld er det mange videoer på Youtube hvor du kan se denne prosessen eller TV-programmet «How It Works».
I alle disse eksemplene er det viktige at vi ser prosessen med å skape noe og har en generell ide om disse prosessene og hvordan det endelige produktet skapes. Vi trenger ikke bruke mye tid på å studere manualer, bøker for å ha en generell ide om disse tingene. Dette er spesielt nyttig for de som tenker på å gjøre en bestemt virksomhet og før det ønsker å se selve prosessen, essensen av den aktuelle aktiviteten.
La oss si at en person vil begynne å tegne, men tviler på om det vil fungere for ham eller ikke. Han ser på en video som viser prosessen med å lage en tegning, fra de første strekene til det endelige maleriet. En person ser hvordan en tegning lages, hvordan tilleggsdetaljer, skygger, farge gradvis legges til den. Etter å ha sett denne prosessen, tenker en person: "Ja, dette er det som passer meg. Dette er det jeg definitivt vil gjøre."
En person bruker ikke hundrevis av timer og dager på å studere komposisjon, hvordan perspektiv bygges, hvordan lys faller, hvordan skygger dannes, for å forstå om tegning passer for ham eller ikke, vil han gjøre det eller ikke.
Så: hvordan forstå essensen av programmering i generelle termer? For å ha en ide om dette. Noen artikler, bøker, videoer eller annet materiale som kan gi meg en grunnleggende forståelse av programmering? Eller må jeg bruke mye tid på å studere stoffet for å forstå om dette er riktig for meg eller ikke?
Noen tolkninger som forklarer essensen av programmering i generelle termer?
Jeg vil også gjerne ha en ide om OOP.
Alt dette er nødvendig for meg for å bestemme: dette er hva som passer meg eller ikke. Ellers kan det vise seg at jeg kommer til å bruke en betydelig del av tiden min på å studere stoffet, så innser jeg plutselig at dette ikke er mitt. Og tiden er allerede brukt, jeg kunne brukt den på noe mer verdt. Tross alt er tid den mest verdifulle ressursen vi har.
Jeg håper jeg har klart uttrykt spørsmålet mitt. Takk for oppmerksomheten.