[Powered by Google Translate] David Malan: Aquest és CS50, i aquest és el començament de la Setmana 1.
El que nosaltres pensem que ho fan avui dia és fer una ullada enrere en
cosa que molts de vostès probablement va passar per alguna
temps i pot semblar una mica familiar.
Aquesta cosa aquí, això és clar és al -
AUDIÈNCIA: Ciència.
David Malan: Science Center.
Així que això és realment una de les primeres computadores
A la tornada de la dècada de 1940.
Va ser un dels equips electromecànics de primera
que era capaç d'especialment llarga,
sostingudes càlculs, i el que veiem en
el centre de la ciència és només una petita part d'aquesta cosa.
El que pensem que seria millor fer llavors és prendre un cop d'ull a un vídeo
que es va fer fa algun temps, la introducció d'aquesta
cosa al món.
I veuràs des de la música i la veu que, efectivament, els
Eren temps molt feliços.
>> [REPRODUCCIÓ DE VÍDEO]
-Un triomf de l'habilitat matemàtica i la mecànica és la següent
gran nova calculadora automàtica de la Universitat de Harvard.
Un complex entramat de problemes en matemàtiques, passar pel
màquina en forma codificada a la cinta, cal resoldre en un
fracció de minut el temps requerit per humans
càlcul.
Dissenyat per agilitzar totes les formes de matemàtica i científica
investigació, el cervell mecànic gegant va a treballar per les Nacions Unides
Marina dels Estats fins al final de la guerra.
>> David Malan: Així que el que potser no sap és que va ser en
aquest mateix dispositiu que un terme que ara tots prendre més o menys
per fet va ser encunyat, el d'un insecte.
Així que un dels enginyers que treballen en aquest equip
literalment trobar una petita arna en la màquina que va donar com a resultat
en alguns càlculs incorrectes.
I a mesura que la història diu que la arna es va gravar en aquest registre
revista aquí, de tornada del 9 de setembre de 1940 i tants,
i així va néixer per al món el terme "bug".
Així que a partir d'ara considerem errors a haver cap tipus d'errors en la
programes, siguin d'origen humà o, en aquest cas, els insectes.
>> Així que alguns anuncis, a mesura que avancem.
Així CS50 té una tradició d'oferir àpats de tot tipus de
majoria dels divendres durant el semestre, on es pren de 30 a
40 estudiants en Fire and Ice in the Square per casual
xerrada, parlar de la informàtica,
parlar sobre el futur.
Convidem a exalumnes i amics de la indústria per xerrar
els estudiants també.
Realment cap a un extrem de fer el que és una classe bastant gran
encara més íntims, si més no de tant en tant per
subgrups d'estudiants.
Així que si vol unir-se a nosaltres avui, 1:15 PM, aneu a
CS50.net/lunch per confirmar la seva assistència.
I ho farem recurrentment, no així et preocupis si no ets
entre els primers 30 o menys aquesta setmana.
>> Així que pren nota de escrivà.
Una paraula sobre els recursos que ara començarà a ser disponible
als estudiants a la classe.
De manera que el cap no ha de ser cap avall durant les classes
anotant tot el que dic i així successivament, el que fem
en el seu lloc s'ofereixen des del personal docent li
conjunt canònic de notes.
Així que tenim una de les investigadores nostre ensenyament, Andrew Sellergren,
que se senti cada setmana, revisa els vídeos, i després
escriu el que creiem que és una molt
conjunt autoritzat de notes.
I estimo d'Andrés, també, de posar notes al peu en snarky
la part inferior.
Així que t'esperem gaudir d'aquests com un llibre de referència per
diversió, i també, arribat Quiz Time, com una oportunitat per revisar
el que va passar en conferències individuals.
Així que aquests estan vinculats a la pàgina de conferències.
>> Conjunt de problemes 0, en tant, està fora.
I en termes dels recursos disponibles per a vostè -
el tutorial.
Milo va dirigir la primera el divendres.
Va ser filmat, posat en línia el dissabte.
I així donem compte, si no estàs molt segur de per on començar,
per aquesta o futures de p sets, sempre en primer lloc el
tutorial o el mateix vídeo.
Seccionament està en curs i, al cs50.net/section és on es
hauran de presentar les seves preferències, si no ho ha
ja, per ara.
Com que les seccions s'iniciarà diumenge, dilluns,
i dimarts.
Fem seccions aquests tres dies, totes les setmanes de l'
semestre en la seva major part.
I també introduir, de nou, les diferents pistes.
Llavors se li demanarà en aquest formulari seccionament, si
no ho he vist, si vostè està entre els menys
còmode, més còmode, o en algun punt intermedi.
I si tens sort de la tanca, en general en algun lloc de
entre el que és la majoria dels estudiants acaben de xecs.
Horari de començar aquesta nit.
>> Així Scratch és força baix clau, tot i que és molt natural
per funcionar en diversos errors i ser incert pel que fa a com
implementar alguna cosa.
Així adonem que començarem les hores d'oficina aquesta setmana.
Estaran en Annenberg dilluns, dimarts, dimecres,
Dijous, de 8:00 pm a 11:00 pm durant trencament del cervell.
Classmen superior pot entrar, i fer si mai té problemes
a la porta, perquè van a pispar, parla a la seva manera
i expliquen que estàs amb CS50.
Típicament de 20 a 30 de nosaltres en el personal estarà allà per ajudar
vostè un a un.
>> En arribar la idea és la següent: vostè porta el seu ordinador portàtil,
vostè tindrà el seu carregador, tindrem els cables de corrent extra,
particularment al llarg de la paret sud del Annenberg on
hi ha un munt d'endolls elèctrics.
I el principal punt d'entrada a horaris d'oficina Q & A és anar a
cs50.net/discuss i per publicar
els teus dubtes.
I per etiquetar amb pset 0 o conjunt de processadors 1, sigui quina sigui la setmana
vulgui es trobin.
I llavors el que farem és tenir una taula de becaris d'ensenyament
i els assistents del curs, generalment de 8 o 10 o així de nosaltres,
passant, mantenir un ull vigilant sobre el tauler, i
arrencant preguntes realment el més ràpid que puguem,
referint-se als missatges relacionats si vostè no ha trobat els
vosaltres mateixos, referències en línia, segons correspongui.
I després, si hi ha problemes, ja que, inevitablement,
serà, o simplement té més sentit per seure un a un,
resoldre problemes amb algú.
>> O vostè acaba d'entrar en hores d'oficina realment
necessitat d'aquesta mentalitat.
No vol anar a través del formulari electrònic,
realment vull conèixer algú.
Comunicar que per a nosaltres, i el que succeirà és quan la seva
qüestió ha estat vist per un membre del personal, i
determinar, yup, això ha de ser enviat a una de les 20 o
30 membres de l'equip aquí localment, podràs veure a la part superior esquerra aquesta
Introduïu el petit botó Cola comença a parpellejar en cs50.net /
discutir.
I això li està dient que ara han estat convidats, de manera que
per parlar, per entrar a la cua.
I en fer clic en aquest botó, el seu nom apareixerà en
un iPad que la interfície CS50, un dels caps del curs, es
celebrarà prop de l'entrada de Annenberg, que llavors
veiem com es mostra aquí, els estudiants que tinguin preguntes sobre
l'esquerra, els membres del personal que són presents a la dreta.
I amb un clic esquerre i dret, el seu navegador web
començarà a parpellejar quan, per exemple, el professor McGonnagal
està disposada a veure't en una taula en particular en Annenberg.
>> Així que vam fer una mica d'això l'any passat.
Hem reiniciat les hores d'oficina i
reimplementat gran part del programari.
Així que adonar-se que aquest s'escalfi aquesta setmana.
Però també s'adonen també, en els últims anys, com vostè pot haver sentit
dels amics, les hores d'oficina en efecte tenia entre 50 i
150 estudiants alhora.
I no és simplement impossible per a nosaltres per manejar aquest
efectivament, un a un, al llarg de la nit.
I així el que realment anem a tractar de fer aquest any és
aprofitar el fet que una gran quantitat de preguntes estan
preguntes més freqüents i, sovint es pot respondre millor
de manera asincrònica.
Així que es pot ordenar de pensar a través de la resposta del funcionari,
i podem pensar a través del seu codi, sense la calefacció
pressió de lluitar necessàriament
a través d'ella al costat de l'altre.
Per tant s'estima que aproximadament un terç o la meitat de les preguntes
serà enviat a persona, i tractarem d'arrencar com
molts com un mitjà més o electrònicament,
durant les hores d'oficina.
I continuarem utilitzant Comenta
al llarg de la setmana també.
>> I, finalment, es donen compte que aquest curs pot ser pres passa / no passa.
Així que si vostè està en la tanca o simplement pensar que ets realment
no estic segur si aquest és el món per a tu, o això és realment
absolutament aliè a tu, tingueu en compte que aquesta és una manera meravellosa
de guanyar una mica de confiança amb què fer un pas en la
classe, com ho vaig fer jo, francament, fa anys.
I després tenim cinc setmanes per ordenar la figura cap a fora per
si vol romandre passa / falla, canviï a una carta
grau, o similar.
I en general el que passa / falla és, crec jo, per als estudiants és
que, si es posa en aquests 10 hores, 20 hores, sigui quina
pot estar en problemes, i que està colpejant el seu cap
contra la paret,
i que realment no pot perseguir alguna cosa a baix, i vostè
té moltes altres coses que cal fer, de veritat, el que jo
Crec passa / no passa és que es necessita la vora de
situacions com aquesta.
Si vostè ha pres la cosa el 90% del camí.
Ja saps, no és del tot perfecte.
Però vostè té un munt d'ell, però.
Així que consideri passa / no passa com que li dóna aquest
model mental, potser.
>> Durant tota la setmana dreta, per l'últim que es va capbussar en Scratch, i ens
va parlar sobre la programació en un nivell gràfic bastant alt.
I avui fem la transició a una llengua
anomenat C, un llenguatge de programació més avall en la part superior de
que moltes llengües modernes es construeixen ara, fins i tot alguns
dels que utilitzarem a finals terme.
I sintàcticament, el que semblen
és tot molt semblant.
Així que anem a començar a fer aquesta transició aquí.
Així que aquest era un programa de la setmana passada que era el més simple de
hola programes mundials.
Simplement imprimeix a la pantalla hola món, amb una
entrepà petit que surt del gat.
Bé, si comencem ara a traduir això a un altre
idioma, s'adonen que les idees d'avui i dimecres
són idèntiques, però la sintaxi comença a canviar.
Així que, la setmana passada vam tenir, quan fa clic a la bandera verda, per exemple
hola món.
Avui tindrem int, void main, printf,
A canvi, amb una sintaxi altre en allà també.
Els claudàtors i parèntesis i cometes, i altres coses.
Però adonar-se que el nucli de la idea és la tecnologia d'impressió,
i, finalment, el fet que la principal és ara serà
sinònim de la partida d'un programa.
Principal serà on la bandera verda trepitja les coses.
>> Així que ara anem a separar alguns dels components bàsics aquí
Abans d'aprofundir en alguns exemples concrets.
Així que ens van cridar aquesta setmana una última declaració, pel que és just
una instrucció.
Feu això - en aquest cas, per exemple hello world.
Bé, al carrer, si mirem només aquesta línia, aquesta és la forma en què estem
començarà a expressar aquesta peça del trencaclosques particular:
printf ("hola món");.
I ara anem a fastiguejar les distingeix més i més amb el temps,
però s'adonen que hi ha un patró aquí.
Per tant, tenim aquesta cosa anomenada printf, que és
essencialment anàloga a la paraula Say.
Això és el que farà.
Printf, if aquí significa "formatat".
Per tant, només significa que vostè pot inserir
diversos detalls estètics.
Així que entre cometes és el començament del que anem
per començar a trucar a una cadena.
Una paraula, una frase, una oració.
Una cadena en un llenguatge de programació és una seqüència de zero
o més caràcters.
Així que h-i-l-l-o, coma, i és així successivament,
entre cometes, una cadena.
I ara backslash n, una mica estrany sintàcticament, però
ja s'ha definit que la setmana passada en el sentit que?
És només una nova línia.
És només una forma de transmetre a l'ordinador que vostè desitja que el
equivalent de colpejar la tecla Intro allà, però no ho fa
volen colpejar realment Entra i per tant espatllar tota la
format del seu programa actual.
Ara els parèntesis inclouen aquesta cadena, parin obert i
parin prop i dins d'això és la nostra cadena.
Perquè això és degut a que en C, i altres programes
llengües, coses com printf prenen arguments, o prendre
paràmetres.
>> Així que començar a pensar ara d'aquest bloc Say porpra com un
funció, com un mètode, com un procediment.
Segur que es pot dir el que vulguis, per ara, però
és una espècie d'un programa en miniatura que només fa una
cosa, en una sola línia, ni menys.
Així que printf és també el que començarem a trucar a un
funció, i les funcions de fer alguna cosa - en aquest cas
imprimeix una cadena amb format a la pantalla -
sinó que funciona també prenen arguments o paràmetres.
I per arguments o paràmetres, gràcies, volem dir
que el seu comportament pot ser influenciat pel que passa en
dins dels parèntesis.
Així que en aquest cas, les necessitats de printf se'ls digui el que voleu imprimir, i
passeu a, entre cometes aquí, la cadena que ens
realment voleu imprimir.
I el punt i coma al final d'aquesta línia és només una
molèstia històrica segons la qual al final de la majoria de les línies de codi,
es posa un punt i coma per fer súper clar per a l'equip
que aquesta línia de codi acaba aquí.
Ara bé, això és bo, perquè com veurem com obtenir més programes
complex, el punt i coma farà súper clares per a nosaltres els éssers humans,
i també l'ordinador, on les línies de codi d'inici i de fi.
Adonar-se que alguns llenguatges no tenen algun
d'aquests mateixos detalls.
I de fet, en JavaScript, que no sempre es necessita alguna cosa
com el punt i coma.
Però més sobre això més per venir.
>> Així bucles.
Teníem una cosa així, molt intuïtiva, òbviament, fer
alguna cosa una i altra vegada i una altra.
Com posar-se els mitjons, o dir hola, en aquest cas.
Doncs bé, a partir d'avui en C, que podríem expressar aquesta esgarrapades
bloquejar com while (true) printf ("hola món").
Així notar que estem començant a construir literalment en el trencaclosques
peça d'abans.
Tenim el mateix bloc morat, però és dins d'aquest
Sempre entre claudàtors bloc, i la millor manera de traduir que
per C és aquest.
No hi ha cap paraula clau per sempre.
No es pot escriure f-o-r-i-i-v-r en C.
Així que l'anàleg més proper és temps.
>> Ara bé, mentre que (veritat) sembla una mica estúpid perquè té el valor
de canvi mai és veritat?
Presumiblement no.
És com dir que mentre un, mentre que d'ara endavant, mentre que cert.
Tot és el mateix, veritable és sempre el cas.
Així que aquest circuit és en realitat la inducció de quin tipus de bucle?
Només un bucle infinit, és clar.
Un bucle infinit o com el va anomenar la setmana passada,
només un bucle infinit.
Així que de vegades això és dolent.
De vegades això és un error, de vegades és per això que et donen
la pilota de platja girant o rellotge de sorra o similar.
Però en aquest cas, de manera deliberada, per a la qual
raó, volia imprimir la mateixa cosa altra vegada
i una i altra vegada.
O en el cas d'un rellotge, que vol fer
alguna cosa una i altra vegada i una altra.
Així bucles infinits podria tenir sentit.
I és així com en C que podríem traduir per sempre amb el codi.
>> Així que ara aquest és una mica més específic.
Havíem repetir 10 vegades la declaració.
Així, mentre que (veritat) no acaba de funcionar allà, perquè és la veritable
sempre és cert.
Així que si en lloc de mirar la versió C, ara la sintaxi obté una
poc més críptic.
Però per ser honest, quan un s'hi comença a veure això, tot es torna
bastant familiaritzat amb rapidesa.
Així que això és el que s'anomena un bucle for.
Un bucle que va a dir-li a l'ordinador que faci alguna cosa
una i altra vegada i una altra durant el temps que
aquestes coses són veritables.
Ara, què volem dir amb això?
Bé, hi ha tres parts per un bucle for, i anem a
tornar a això en el context de l'actual
exemples en un moment.
Així que no et preocupis si no acaba d'enfonsar en un sol cop.
Però int i = 0 és, conte llarg, dient dóna'm un
variable que és de tipus sencer, així que dóna'm un nombre
anomenat i, i s'inicialitza a 0.
Això és donar-me com una variable x algebraica i
inicialitzar a 0.
Però en aquest cas l'anomenem i.
Llavors en el medi, es diu i és menor que 10.
Això diu l'ordinador és els materials següents, sempre
com i és menor que 10.
I, òbviament, que s'inicia a menys de 10, perquè
que comença en 0.
Llavors, finalment, potser puguis endevinar el que significa + +.
És una mica de sintaxi que només significa incrementar i.
Així que afegir 1 a i, una i altra vegada i una altra.
>> I així, com veurem aquest bucle, aquesta sintaxi, més aviat, posa en pràctica
precisament la mateixa cosa que, francament, en Scratch era tan
molt més fàcil d'expressar.
Repetiu 10, i ja està.
En C, i en la majoria dels llenguatges de programació, que ha de ser un
poc més instructiu per a l'equip i en realitat
especificar alguna cosa com això.
Però anem a tornar a aquesta i altres sintaxi.
>> Quines variables?
En Scratch teníem una mena aquests blocs de color taronja,
on podria declarar una variable.
Anem a cridar arbitràriament en sentit contrari.
Anem a inicialitzar a 0 i, a continuació,
sempre farem alguna cosa.
En aquest cas en Scratch que estic dient el taulell, de manera que el
gat tindrà un entrepà petit que està parlant
el nombre que hi ha en aquesta variable.
I després tenim comptador de canvi en 1.
Així que tot això està embolicat dins d'un pany Forever.
Així que ara ja tenim els elements bàsics en C amb
que per traduir aquesta.
>> Una manera com podria fer-ho és la següent.
Dóna'm un nombre enter, en diuen taulell.
Inicialitzar a 0
en la primera línia allà.
Mentre que (veritat), així que estic robant la idea d'un moment
fa, seguir endavant i fer el següent.
Imprimir el comptador, i després incrementar el comptador,
de nou, i de nou, i de nou.
O, de nou, + + només significa afegir 1 a alguna cosa.
Però hi ha una nova peça de sintaxi aquí.
Què està saltant com no es troba entre els exemples anteriors?
Sí,% d.
Així que potser pot inferir què està fent això, francament, basat
en el que el bloc Scratch està fent.
Però, de nou al carrer, només hem de ser una mica més concret
a l'hora d'expressar-nos.
>> Així printf ("% d \ n").
Bé, la major part de que podem tirar tan familiar.
Les cometes només significa que és una cadena, la barra invertida núm
és només una nova línia.
Així que l'única cosa nova aquí és% d.
I tot el que és, és un marcador de posició.
D% va a denotar un nombre decimal.
I equip% mitjà d, posar un nombre decimal aquí.
Bé, quin nombre vols posar allà?
Bé, com vostè potser pugui deduir, després de la coma es diu
comptador, que és el nom d'una variable que es declara o
creat un parell de línies abans.
Així que això és només la forma de C de connectar una variable en una
cadena dinàmicament.
Com que per contra, si jo hagués fet en el seu lloc una mena
això, printf ("contra"), el que faria aquest
programa en lloc fer-ho, presumiblement?
És, literalment, d'imprimir "comptador".
La qual cosa no és l'efecte que vull.
He de substituir en un valor numèric.
Així que veurem que les funcions de llavors, com printf, no pot prendre
tot just arguments individuals, com
"Hola món".
Ells poden prendre coma cita fi de la cita i, a continuació algunes variables
que rebrà connectat a, com veurem la cadena anterior
a través d'aquestes variables% de signes.
>> Bé, què passa amb les expressions booleanes?
Les expressions booleanes són aquests valors, vertader o fals.
Sí o no.
1 o 0.
Activat o desactivat.
Així que en Scratch es veuen així, i noti que la
bloc de fons aquí és en realitat la conjunció
de dos blocs més petits.
Així que tipus d'arrossegar i deixar anar les peces del trencaclosques 3
junts per fer que la peça del trencaclosques que és allà perquè jo
podria transmetre la idea que vull que x sigui menor que i i
i perquè sigui menor que z.
I pel que puc traduir aquestes dues línies separades de la següent manera.
La de dalt pot ser molt trivial traduït a C,
amb prou feines x <i.
Potser amb alguns parèntesis per a una bona mesura.
I després, al carrer, no s'escriu i denoten la
conjunció d'alguna cosa.
En el seu lloc, escrigui &&.
I a mesura que el temps ho veuràs, un sol caràcter & li passa a
significa alguna cosa diferent.
Així && només denota la idea d'AND.
>> Així que de nou, encara que això comença a semblar bastant complex,
un dels propòsits de la introducció de Scratch, a més
només tenir una mena de diversió de la rampa on es pot fer
una cosa que és molt gràfic i animació, i
compartible i similars, és també de transmetre la idea que els
totes les idees que submergir-vos en l'actualitat i en endavant
han estat incorporats a fins i tot de simple
interfície des del primer dia.
I aquest d'aquí?
>> Així condicions.
De manera que el bloc d'esgarrapades a la part esquerra es veu allà
una mica més complex.
Però és només una mica d'arrossegament i
deixar caure de peces conegudes.
Si x és menor que i, digui-ho.
Perquè si x és més gran que i, digui-ho.
Si no, lògicament podem assumir que és inferir que
han de ser iguals.
Així que dir que són iguals.
Ara en C en el correcte, exactament el mateix.
I noti que les claus es serà un
característica de C i altres llenguatges que fan aquest tipus
d'encapsulació.
Igual que el bloc és si aquesta cosa groga que és una espècie de
agafar el bloc morat dins d'ella.
De la mateixa manera són aquestes claus -
aquestes claus -
destinat a evocar la idea mateixa d'abraçar un o més
línies de codi que es sagnia dins d'ells.
Així que en la part dreta aquí, si x menor que i, printf
("X és menor que i").
Else si x és més gran que i, imprimir el mateix.
Altres vendes imprimir que són iguals.
>> Així que en resum, no hi ha una correlació bastant directa o traducció
del llenguatge que hem vist fins ara, fins i tot per alguns
de les característiques més sofisticades.
Així que no podria estar usant això per al seu projecte, o potser no
utilitzar això per al seu projecte aquesta setmana.
Però hem aquestes coses anomenades matrius en C. En Scratch,
s'anomenen llistes.
I vam veure això amb el RPG Fruitcraft la setmana passada.
El petit blau que estava caminant, recollint
cireres i taronges i similars.
Bé, en Scratch, que es va dur a terme amb aquesta taronja
bloc que conté paraules, en aquest cas, estem literalment
i ha afegit que "taronja" a un
variable anomenada inventari.
Així que en C, aquesta sintaxi es posarà una mica més críptic.
I tornarem a la setmana següent i fer més
coses interessants en el món de la criptografia amb ell.
Però en el fons aquí, aquestes dues línies essencialment
es tradueixen en el que estem fent en una rascada bloquejar-hi.
Però més sobre això més per venir.
>> Per tant, posar junts, aquí hi ha un programa en C. Per tant anem a
ràpidament separar algunes de les peces de la sintaxi aquí, però
llavors anem a realment començar a escriure una mica de codi, familiaritzar
amb algunes de les eines que utilitzarà, i veure si podem
pot aprofitar ara alguns d'aquests blocs de construcció bàsics de
la setmana passada, ara sintàcticament en C. Per tant a la part superior aquí, aquesta
és potser un dels programes més avorrits que podria
escriure en gairebé qualsevol llenguatge de programació.
Però és una espècie de té un significat especial perquè és la
programa canònic que qualsevol científic de la computació quan escriu
ensenyar a algú un llenguatge de programació -
un programa hello world.
>> Així que en la part superior, veiem que aquesta noció de # include
i, a continuació, entre parèntesis angulars, stdio.h.
Ens tornarem a això, però el que realment
significa és que no és un arxiu en aquest món anomenat estàndard
I / O, stdio punt h, i això és només un arxiu de text que
algú va escriure fa anys.
I dins d'aquest arxiu de text són un munt de
funcions o mètodes o procediments, que algú més
escriure que nosaltres som els beneficiaris de perquè
Ara pot utilitzar el codi d'aquesta persona.
Les funcions que ell o ella va escriure.
En aquest cas, printf no és una cosa que jo vaig escriure, és
no és una cosa que va escriure CS50.
És una cosa que algú va escriure fa anys i posar en un
arxiu anomenat stdio.h i després, en un apart, posar
altra part de la funció en un altre arxiu.
Però anem a arribar-hi.
>> Així que # include és només la nostra manera de dir, en
C, dóna'm accés a les funcions que una altra persona va escriure.
I en aquest cas m'importa perquè vull printf.
Ara tenim int main (void).
Així que aquesta és una d'aquestes coses que, francament, que en el dia 0,
més o menys he de tipus de fora de zona, perquè és només
No és interessant
intel · lectual, alguns de la sintaxi.
Però per ara sabem que les funcions, també conegut com
procediments o mètodes, generalment produeixen un cert valor.
Fan alguna cosa.
Ells vénen amb una resposta.
Produeixen sortida.
Així int costat del principal és només la nostra forma abreujada de dir
que aquesta funció, aquest procediment, finalment es va
per donar-li de nou un nombre.
I per què això és, anem a tornar.
Principal és l'estàndard mundial per al valor predeterminat per defecte
funció que va a s'executen en un programa de C quan
que l'executi.
Void només significa aquesta cosa, principal, no es fa
arguments, en aquest cas.
Així que estic sent súper explícit.
No hi ha cadenes a allà, no hi ha comes.
Buit significa que no hi ha arguments per principal.
>> Ara, finalment, per sort, les dues últimes línies estan familiaritzats.
Dins de les claus tenim un printf
i tenim un canvi.
I el retorn és una mica lamentable que hàgim de
el va posar allà, perquè en aquest cas no està fent tot el que
molt d'interès.
Però en un programa d'ordinador, quan una funció retorna 0,
això vol dir que tot està bé.
Res del que va sortir malament.
Per contra, si una funció retorna 1, 1 o negatiu, o
1.337 negatius, o alguns números a l'atzar per l'estil, que
generalment significa que un error ha ocorregut realment.
Així que si vostè està en el seu Mac o el PC, si alguna vegada has vist
algun missatge molest perquè l'equip s'ha estavellat o
congelat, i hi ha un missatge d'error críptic,
i després una mica de codi, com a sistema de codi
1,2,3,4, algun nombre,
que generalment és un detall innecessari dir
la majoria de nosaltres els éssers humans, però això és el que alguna funció o algun
programa en realitat ha tornat, un valor diferent de zero.
I el benefici d'això és que 0 significa tot també, i
llavors vostè essencialment té un nombre infinit de coses que
pot sortir malament.
És per això que van triar 0 per al bé i un valor diferent de zero per
dolent, com aviat veurem.
>> Així que seguirem endavant i escriure això.
Així recordar que l'altre dia vaig utilitzar el meu Mac per obrir un
finestra de terminal, i després vaig obrir programa de text, com
TextEdit, i vaig començar a escriure una mica de codi.
Bé, això està bé.
No obstant això, la seva experiència serà diferent en un Mac, o
en un equip Solaris, un equip amb Linux, el que sigui operatiu
sistema que s'estigui utilitzant.
I així, en el curs, el que en lloc d'utilitzar és quelcom
anomenat Appliance CS50.
De manera que l'aparell CS50 és un programari descarregable
que li permet executar un sistema operatiu anomenat Linux,
específicament Fedora Linux, en el seu propi Mac o PC.
I ho fa mitjançant la descàrrega d'una cosa que es diu un hipervisor.
Així que tot això es documenta en el butlletí de problemes 1.
I vostè serà guiat cap al que vostè necessita per descarregar.
Però el resultat final, si tens un Mac o un PC, és
descarregar algun programari lliure.
A continuació, descarregui l'aparell CS50, i dir-los que
programari lliure - l'hipervisor -
per executar el CS50 Appliance en una finestra a l'ordinador.
I el que passa és el següent.
>> He Ara, fixin-aquí, el que sembla ser un ordinador d'escriptori
ambient.
I deixin-me realment reduir aquesta finestra.
Així que aquesta és la meva Mac, amb un temps molt limitat, ia l'interior
d'aquesta finestra esdevé un completament
sistema operatiu diferent.
De fet hi ha aquest menú d'inici aquí baix, que recorda
Windows, que té un munt de sub-menús, incloent
un enllaç al manual CS50, Dropbox, i similars.
I el que aquest entorn és un entorn estàndard
que tots nosaltres podem utilitzar, de manera que no importa quina sigui la seva
ordinador és, el que vostè ha instal · lat, la versió
de Mac OS o Windows que està executant, ara tots tenen la
mateix entorn.
I ara, en aquest ambient podem començar a escriure una mica de codi.
>> Així que vaig a seguir endavant i obrir un programa anomenat gedit.
Això és comparable a notepad.exe, o
TextEdit en Mac
I això és només un super senzill programa d'edició de text
que té aquest aspecte a primera vista.
Ara a la part superior, tinc una paleta de color blanc, a la part inferior que
tenir aquesta finestra en negre que diu jharvard aparell @.
I això és perquè el compte d'usuari que prèviament creat
per a tothom que es diu John Harvard.
Ell té una carpeta on tots els seus arxius s'aniran, i
aquí és on podem començar a escriure una mica de codi.
Així que permetin-me anar davant aquí i apropar una mica, i estic
farem # include, int main (void), i
llavors jo vaig a fer printf ("hola món")
, Retorna 0.
Ara tot això és bastant blanc i negre.
>> Deixin-me seguir endavant i fer una cosa per ensenyar gedit el que sóc
fent en realitat.
Deixa anar a desa.
Vaig a triar a l'esquerra aquí jharvard.
Així que de nou, fins i tot si vostè mai ha usat Linux abans, francament
aquests dies, tots ells estan delegant en essencialment la
mateix tipus d'interfície -
Mac OS, Windows i Linux.
Així que vaig triar la carpeta jharvard casa.
I vaig a guardar aquest fitxer hello.c.
Així que en la part superior, vaig escriure hello.c; nomenar un C
programa amb l'extensió. c és
el que és una pràctica comuna.
I em va colpejar a Desa.
I ara el millor és que he ensenyat efectivament gedit,
que aquest és un programa C.
Tingueu en compte que el meu text en blanc i negre és ara un codi de colors, o
sintaxi ressaltada, que només em crida l'atenció sobre la
diferents parts semàntiques del programa.
A la part superior esquerra hi ha, ja que els meus programes es tornen més complexos, estic
tindrà un resum de totes les coses que he escrit.
Així que és això allà dalt.
Ara permetin-me fer un zoom cap a fora i anar a aquesta finestra de terminal.
>> Així que aquesta és potser nou per a moltes persones.
Si vostè mai ha usat un entorn de línia d'ordres, vostè mai ha
utilitza DOS, o mai ha usat Linux, o mai has obert
Mac OS finestra de terminal, hi ha un munt de coses que
es podia fer amb la interfície gràfica d'usuari, com ara assenyalar i fer clic, i
arrossegant i deixant anar, i similars, però en general -
certament en el món de la informàtica -
utilitzant una línia d'ordres, on vostè no té el punter del ratolí
en general, és suficient amb el teclat, és en realitat molt
més poderosa que la interfície, un cop s'aclimati a la
diversos ordres.
I quin tipus de alliberar-se de la necessitat d'apuntar i fer clic
en tot.
Així que en gedit anem a resoldre de tenir el millor d'ambdós mons.
Podem arrossegar i deixar anar text, podem veure
bonic i amb colors.
Però quan arriba el moment d'executar el nostre programa, de vegades vaig a
només ha d'utilitzar aquesta petita finestra aquí.
>> Així que vaig a seguir endavant i fer-ho.
A la finestra de fons en blanc i negre, seguiré endavant
i escriure clang.
I clang és el nom d'un compilador.
És un programa que converteix el codi font
a, per la qual cosa, de codi objecte.
0s i 1s, que vam veure breument la setmana passada.
Recordem que la setmana passada, ens van prometre que ens anaven a
passar d'alguna cosa com això - que necessitàvem estar
alguna cosa com això -
i això certament no és una cosa que un ésser humà va
per fer-ho manualment.
Així que en comptes que farem servir un programa, i aquest programa en
aquest cas es denomina Clang.
I el nom del meu programa és hello.c.
Així que per compilar hello.c de codi font en
codi objecte o 0s i 1s, hauria de ser suficient amb només fer
això i premeu Enter.
>> Bé, res sembla haver succeït.
Però sé que ara, o des de la setmana passada, que el nom predeterminat de
un programa, quan està escrit en C, es tontament anomenat a.out.
Nom menys interessant que podria ocórrer.
A és la primera lletra de l'alfabet, la sortida és el que era
emesa, però que així sigui.
Aquest és el meu programa, i ara punt barra inclinada, com veurem és,
en realitat una mena de funció de seguretat, ja que
a.out és un programa que vaig escriure.
No va venir amb el meu ordinador, és
no en Arxius de programa.
No està a la carpeta Mac OS Aplicacions.
He de ser súper explícit amb l'ordinador, i dir
aquest programa, a.out, es troba a la carpeta actual, la
directori actual.
I la manera de representar això en un ambient com aquest
és punt representa qualsevol carpeta que està actualment polz
I així. / A.out només significa córrer
a la carpeta actual.
I em quedo amb aquest Enter, i llest, el meu programa per primera vegada.
>> Ara vaig a fer un pas enrere.
Aquesta finestra és una mica petita, i adonar-se que la part inferior
esquerra de l'aparell aquí és un altre icona.
Un d'ells és Chrome, que ha de ser molt familiar, només un web
navegador a l'interior de l'aparell.
I aquesta icona en blanc i negre és només un
terminal de finestra més gran.
Així que si es posa una mica molest per ordenar de tenir només
aquesta petita porció petita d'una finestra amb la qual interactuen
amb programes, en el seu lloc pot fer això.
I ara anem a començar a escriure una mica aviat
per ser ordres coneguts.
ls.
Així és la comanda ls per al llistat.
Així que en un sistema operatiu Mac o Windows, generalment doble clic en un
carpeta i, voila, vostè veu tots els arxius de diverses
i carpetes.
En un entorn de línia d'ordres, on només es pot escriure
ordres o text, ls és l'equivalent.
Així que em mostren el que hi ha en aquest directori.
>> Ara hi ha un munt de coses aquí que alhora una mica
familiar i una mica estrany.
Però cal notar que igual que Windows i Mac OS, jharvard
té una carpeta de l'escriptori.
Així que les icones que es troben a l'escriptori de succeir
estar en aquesta carpeta.
Hi ha una carpeta de descàrregues, coses que
Chrome podria posar allà.
Dropbox.
De manera que l'aparell ve amb suport integrat per Dropbox
pel que al llarg del semestre, pots sincronitzar amb el teu Dropbox
compte perquè tots els programes estan recolzats.
Són accessibles en l'altre ordinador.
Si alguna cosa li surt malament amb l'aparell, pot
molt fàcilment recuperar de Dropbox.
Així que aquesta carpeta hi és per això.
Hi ha dos arxius que he fet - hello.c
i a.out.
I després, a la dreta hi ha algunes altres carpetes que anem a
arribar a al final del semestre, amb web
programació.
Així que quan ho faig. /, A.out, Enter, que ja és dir anar
en el directori que estigui en el directori actual, i executar el
programa anomenat a.out aquí.
>> Molt bé, així que és agradable i bo, però no és tot el que
de pes per escriure un programa anomenat a.out ajudar.
Així que en realitat es pot fer això una mica diferent.
Així que en lloc de només so metàl · lic en execució, hello.c, anem a afegir
el que s'anomena un argument de línia d'ordres.
Així que un argument de línia d'ordres, o un interruptor en aquest cas, és només
altra paraula o frase que s'escriu en l'indicador després d'
el programa que voleu executar.
Així que en aquest cas, clang és el programa que voleu executar,-o
sortida mitjançant un arxiu que ja no es diu a.out.
Imprimeix un fitxer anomenat hola, i ho fan mitjançant la compilació de la
última paraula en la línia, hello.c.
Així que en resum, es tracta d'una millora molt marginal, per la qual cosa
en lloc de tenir aquest arxiu a.out estúpidament nomenat,
Ara puc fer soroll metàl · lic-o hola, llavors hello.c, i
a continuació, premeu la tecla Enter.
Res sembla succeir, però de nou molt semblant amb 0 - quan
sembla que res passa que no significa res dolent va succeir -
així que farem ls ara, Acceptar, i de fet jo ara
tenir un programa de hola.
Així que si escric hola ara, no s'ha trobat comanda.
OK,. /.
Així que la raó.
Així doncs aquest programa que he escrit, i no va venir amb
l'ordinador,. / hola, Enter, significa
Ara estic corrent hola.
>> Així que aquí està.
Ara el que finalment arribarà a la línia de comandes cada vegada més
arguments que ens permeten fer més, però només per als de
els quals això podria ser força vell, vull realment anar a un
directori aquí i només li donen un teaser de la resta que
podria anar sobre l'aplicació Hello World.
Déjame entrar aquí, i vaig a obrir.
Així que en realitat, vaig a explicar el que estic fent, així
això és útil.
Permetin-me tornar.
>> Així que he estat fent això des de fa molt temps.
Així notar més a la dreta, hi ha un parell de
directoris que són estranyament anomenat source1m i source1w.
Això és només convenció ximple que utilitzem.
Font només significa codi font, 1 significa que es tracta d'una setmana, i
m significa que és dilluns, i w significa que és dimecres.
Així que res críptic allà.
És només notació abreujada.
Aquestes coses són les carpetes blaves, també coneguda com
directoris.
Jo vull anar a aquesta carpeta ara, i en un ordinador normal
Només pot fer doble clic a una icona de carpeta i
hi ha tots els meus arxius.
No obstant això, en un entorn de línia d'ordres, jo no puc fer
que, pel que en el seu lloc, he de canviar de directori manualment.
Així que si jo escrigui cd i després source1m, Enter, observi que
meu sistema, la cosa en blanc a l'esquerra, acaba de canviar.
I així, en efecte, quan s'acaba de dir parèntesi i després els
gargot poc, el símbol de titlla, això significava que era
al directori principal John Harvard, els seus meus documents,
seus arxius personals.
Però ara entre parèntesi que diu ~ / source1m.
Això només vol dir que estic en una carpeta anomenada source1m
això és al directori principal John Harvard.
Així que si ara volem llistar els arxius en aquesta carpeta, fàcil
pregunta, escric només ls.
I ara veig tots els arxius que he creat prèviament per avui
conferència, tots els quals, o la major part dels quals, es produeixen
per acabar en. c.
>> Així que permetin-me anar endavant ara i executar gedit d'un programa anomenat
holloway.c, que està escrit per algun hacker atzar
a Internet, que s'assembla una mica a això.
I no anem a anar a través d'aquest, en qualsevol
detall, però per aquells més còmode, en particular, si
vostè vol prendre una conjectura pel que fa al que fa el programa aquí.
Tingui la seguretat, ja que és menys o més còmoda,
no estem tan sols arribar a aquest tipus de coses abans de finals d'
aquest semestre.
Això és el que és un exemple d'un concurs ofuscat C, que
significa escriure el programa més críptic buscant possiblement
pot superar a altres persones intel · ligents, que són igualment
tractant d'escriure les coses i mostrar que poden escriure
les coses més secretes que tu.
Així que això no és un exemple d'un programa ben escrit de la
punt de vista d'estil, aquest és un exemple d'un programa que
guanya un concurs, per a la gent tractant de
ser vague i abstracte.
>> Així que si correm això, deixa entrar a la meva finestra de terminal,
per dir-ho.
Així que aquest medi ambient en blanc i negre es denomina
finestra de terminal en general.
Deixa anar per davant i compilar.
Jo no vaig a utilitzar so metàl · lic, ja que aquest programa és un
poc críptic i necessita una diferent
compilador, un anomenat GCC.
Però fa el mateix.
Es necessita codi font a codi objecte.
I ara si em quedo a.out, aquest programa que
acabo de veure fa això.
Així que aquest any va guanyar company aquest concurs.
De tota manera, no anem en aquesta direcció, per se.
>> Així que en realitat tracten de burlar-ara, a part el que podem fer
amb aquests blocs de construcció bàsics per fer més i més
programes interessants.
Per això hem escrit un programa, hem executar un programa.
Ara realment podem simplificar i ja no han d'escriure
el so metàl · lic paraula en l'indicador.
Resulta que els nostres programes es fan més críptic, podem, o
més complex i no, en realitat podem executar aquesta comanda.
Així que permetin-me tornar al meu directori personal, per dir-ho així, permetin-me
treure - rm és la comanda remove - Vaig a treure
l'arxiu anomenat a.out i una salutació.
I ara notin en un entorn de línia d'ordres, igual que en
una interfície gràfica d'usuari, s'obté se li sol · liciti. No pot fer clic en un botó, encara que, jo
ha d'escriure i per a si, i per a si.
I ara si em escriviu ls de nou, observi que els verds
- Programes a.out i hola -
s'han anat.
Aneu amb compte amb rm.
Es poden fer coses dolentes, igual que vostè pot arrossegar
coses a les escombraries.
>> Així que ara seguirem endavant - i no vaig poder fer això - so metàl · lic-o
hola, hola -
Ja estic avorrit escriure aquest comando.
Tot i que ha escrit una mica ràpid.
Així que en el seu lloc pot fer fer hello.
Així que no és un compilador.
És només un programa amigable que ve amb Linux, en aquest
cas - el sistema operatiu -
que automatitza el procés de compilació de programes.
Així que en lloc de recordar clang-o nom d'arxiu i
llavors així successivament, especialment una vegada que aquestes línies es fan més llargs i
més temps, puc escriure fer.
I això va a escopir un munt de coses que
que finalment veurà aquest semestre.
Però noti ara si ls tipus, hola està de tornada en el meu directori.
I de fet ho puc executar amb. / Hello.
Així que simplement automatitza el procés d'execució del que va ser,
en aquest cas, una molt més llarga, més complex de comandaments.
Així que anem a començar a utilitzar la marca, només perquè és molt
més fàcil d'usar.
>> Però ara anem a fer un programa més interessant
que acaba de dir hola.
Així que en els programes que hem escrit fins ara no hi ha principal.
Això és just el que s'inicia per defecte tot el que fos.
Però hi ha funcions que hi ha per aquí també, i
stdio.h és el que vam veure a la part superior de la nostra
arxius, i això és el que es coneix com la biblioteca estàndard.
A l'interior de la biblioteca estàndard és un munt de funcions
que algú més va escriure, i podem començar a utilitzar aquests
funcions per escriure més
programes interessants per a nosaltres mateixos.
>> Així que permetin-me tornar a l'equip.
Vaig a tancar aquesta finestra de terminal.
Vaig a tancar les coses que escrivim abans, i només anar
en hello.c, i noti que ara puc fer el següent.
Hola món no és tan interessant, m'agradaria
personalitzar aquest programa per a mi.
Així que en comptes de dir el món, vaig a
seguir endavant i dir -
Jo podria escriure David - però això realment és una espècie de
fonamentalment els mateixos.
Però anem a provar aquesta idea marcador de posició.
Recordem que en C, en lloc de printf, hem tingut aquests
marcadors de posició, i hi ha més de% d justa.
Així va ser% d, comprovació de validesa ràpid.
Bé, el nombre decimal, això és tot.
Dígits decimals, això és tot.
Així que c%, ja que es trobarà, serà un personatge.
Posi un personatge aquí, una carta de la az,
o puntuació símbol.
Un personatge únic,% f, algú sap d'altres idiomes?
Així un valor de punt flotant.
Un nombre real.
Així que no és un nombre decimal - això és realment un nombre real amb
un punt decimal i un nombre de dígits a l'esquerra
i dret de la mateixa.
% S, String.
Aquell que veurem molt sovint.
Una cadena, de nou, és només una paraula, una frase, una seqüència de
caràcters individuals.
I, finalment, LLD?
Així que això és més aviat un cas de la cantonada.
Llarg, llarg decimal.
Així que si no volen només un nombre que és tan gran, que
vol un nombre més gran, hauràs d'especificar a
l'equip que és d'una grandària particular.
>> Així que anem a ajustar això una mica.
En lloc de codificar en David, deixa una mica
dinàmicament diuen% s.
Així que posa't% s aquí, que és un marcador de posició per a una cadena.
Llavors m'ho dius a mi fer coma, i després "David" per aquí.
Ara bé, això no és tot el que intel · lectualment interessant,
perquè tot el que he fet ara és realment crear més treball per
l'ordinador.
En lloc de dir-li a l'ordinador què tot això alhora, estic ara
dient això i inserir una cadena d'aquí al final, coma,
aquí és la cadena.
Així que això no és una millora millor, però és almenys
un pas cap a un programa més interessant.
Perquè ara, deixa seguir endavant i fer una mica aquesta finestra
més gran, deixa seguir endavant i executar make hello.
I ara,. / A.out no funciona, per què?
Molt bé, ara es diu hello.
Així que de nou fan, i també amb un so metàl · lic o-, va canviar el nom del
programa d'haver alguna cosa més interessant.
I voilà: ara diu hola David.
>> Molt bé, segueix sent un programa estúpid.
Així que ara anem a tornar aquí en realitat i introduir la noció
d'una variable.
No seria bo si pogués declarar una variable
el tipus és una cadena?
I el valor de la variable en realitat prové de l'usuari
ell o ella.
Per tant arbitràriament, vaig a trucar al meu variable s, que és
només una convenció comuna quan es té una variable anomenada
la cadena.
Faré signe igual, i després vaig a trucar a un
funció anomenada GetString.
Així GetString no és una cosa que ve incorporat en C. És
una funció que el personal CS50 escriure, en realitat només per
aquestes dues primeres setmanes, per simplificar el procés de
rebent l'entrada de l'usuari i l'obtenció de l'entrada de l'usuari en el formulari
de cadenes o números, i tal.
Així és com GetString printf, però, òbviament, en lloc de
imprimir que farà el que diu el seu nom, obtenir una cadena.
Però per utilitzar GetString, haurem de fer un canvi
aquí, més enllà d'això.
Així intuïtiva, aquest programa, amb sort, d'alguna manera va a
obtenir una cadena de l'usuari i, a continuació, què farà
amb aquesta cadena, anomenada s?
És només voleu imprimir, oi?
Encara no és un programa estimulant perquè tot el que està passant
de fer és connectar aquest valor on% s
diu que hauria d'anar.
>> Així que anem a almenys veure això en acció.
Deixa guardar i allunyar la imatge.
Ara, en la meva finestra de terminal aquí, la petita porció d'un,
permetin-me tornar a fer fer hello.
Molt bé, i ah, carai, jo tinc un munt d'errors.
Permetin-me desplaçar-se cap amunt, i veiem la nostra primera -
així que anem a fer-ho realitat en una finestra encara més gran pel que
pot veure el malament que vaig ficar la pota -
així que hola.
Bé, això és un desastre, no?
He escrit tres línies de codi, i
que m'ha donat 12 errors.
Per què és això?
Llavors, afortunadament, moltes vegades quan vostè veu molts errors, molts
escopint alhora, no deixa de ser perquè s'ha
confondre l'ordinador fins aquí.
I segueix sent confús per al moment en què arribi fins aquí.
I pel que només s'inicia el tret, i ensopegant, i
escopint més coses de por que s'aplica realment.
Així que en general, sempre comencen amb el superior.
>> Així que l'exemple més part superior de color vermell, el
missatge d'error és aquest.
L'ús de cadena d'identificador no declarat, el que
significar estàndard en?
No ho vaig fer.
I significa cadena, però això és degut a que, també, la cadena de paraules
que segueixo usant verbalment en realitat
no existeix en C tampoc.
És una cosa que utilitzarem només per a la primera setmana o dues
aquí, però hi ha en un arxiu anomenat cs50.h.
Així que per ara, sàpiguen que existeix aquesta altra biblioteca que el
personal escriure, de manera que s'ha escrit més recentment que
stdio.h.
Però dins d'cs50.h és una definició, un sinònim de
tipus, que crea aquesta cadena de paraules.
>> Així que ara vull tornar a la meva finestra de terminal.
Vaig a aclarir tot aquest embolic amb Ctrl-L. Anem a
Netegeu tot net, i jo seguiré endavant i fer
hola de nou, Acceptar.
Què ha passat ara?
Ara tots aquests errors va ser.
Llavors, què he fet realment?
Acabo va ensenyar l'equip que hi ha aquest tipus, i és que
en aquest arxiu anomenat cs50.h.
Així que deixi de queixar-se, perquè ara vostè sap on trobar
declaració d'aquesta funció per dir-ho.
Quan hi ha al món.
>> Així que ara vaig a seguir endavant i executar hola.
Sembla que tinc un bucle infinit, no passa res.
Així que he d'escriure alguna cosa aquí, clar.
La primera línia de codi en el meu programa va ser getString.
Així que, literalment, m'espera per obtenir una cadena.
Així que en aquest sentit sí, és un bucle infinit.
Pel que sembla, en GetString és el comportament per defecte que
escriure - el personal -
només diu d'esperar i esperar i esperar i esperar i esperar,
fins que l'usuari li dóna una cadena escrivint alguna cosa polz
Així que permetin-me anar davant i escriviu D-a-v - i-d, Intro.
I aquí està, hola David.
>> Ara bé, Et sembla que és només una actuació?
Deixin-me seguir endavant i escriure Tommy.
Introduïu, bé, sembla estar funcionant.
Obres per Rob, obres per Zamyla, treballa per - bé.
Així que va a treballar, el més probable.
Per tant, ha de imprimir qualsevol cosa que realment li donen,
i que pot ser una mica difícil aquí.
A veure si podem fer alguna cosa com hola.
Es pot anar per aquí, anem a veure, copiar, enganxar.
Jo no seré capaç d'enganxar que moltes vegades aquí.
Pegar, bé, Shift + Ctrl + V. Llavors, què podria
succeir això és dolent aquí?
>> Bé, llavors, segfaults.
Així que alguns de vosaltres amb antecedents anteriors sabran que
en general, donant un munt d'ordinadors entrades quan estiguin
Probablement no pretén rebre noms llargs com aquest - males
les coses succeeixin.
De fet, en el món de la web, també, això passa bastant,
de manera que quan vostè està dissenyant un lloc web, quan estàs
disseny de Facebook, vostè ha de prendre decisions arbitràries fins
davant, com el temps que es tracta d'algú
Facebook nom d'usuari serà?
O quant de temps va a nom d'algú ser?
Quant de temps durarà el número de telèfon d'algú ser i similars.
I si els programadors fer suposicions incorrectes, els programes de trencar
perquè intenta donar-los una major producció, més entrada
més aviat, que tenen memòria.
O RAM assignada per a això, de manera que si ara prem Intro,
que el programa de treball efectiu, ja que estàvem a la biblioteca
i que en realitat preveu aquest cas particular.
Però, sens dubte, en aquest semestre, va a escriure almenys un
programa que es diran aquestes paraules.
Recordar aquesta setmana a partir d'ara, potser d'aquí a dos dies.
Error de segmentació és negatiu.
Es farà referència a la seva fent una cosa que l'ordinador
no anticipar.
I en aquest cas, vostè, el programador, no anticipar.
Igual que aquest munt de mitjons, hi havia diversos
casos extrems podríem haver trobat.
Així mateix, en els programes sinó anticipar quant temps pot
el nom d'algú serà.
I si tinc un usuari maliciós, i és el seu nom
realitat és bastant curt, però s'estan tractant
ficar amb mi?
Què serà el comportament del meu programa?
Bé, en aquest cas, una cosa que en realitat es pot bloquejar.
>> Així que anem a fer això.
En 90 minuts, es tracta d'un llarg temps horrible
per fer la informàtica.
Per què no ens fiquem en l'hàbit de prendre cinc minuts
trencar aquí, i quan tornem, anem a bussejar en alguns
programes més complexos i urgents?
A cinc minuts.
>> Està bé.
Així que un ràpid comentari.
M'han dit que encara que això va ser a la pantalla abans, el que
va sortir de la meva boca va ser cs50.net/rsvp.
Això és correcte. cs50.net/lunch.
Així que ara vostè pot intentar RSVPing per aquesta en / dinar.
Però farem això ara.
Així que això ha estat molt ràpida, súper nou per molta gent.
Barret vell per a algunes persones.
Així que anem a retrocedir per un moment, i veure com hem arribat a
aquesta sortida hola món fa un moment.
>> Així que primer, hi ha un aparell CS50.
Un cop més, una peça de programari, el problema d'establir una explicarà
com descarregar-lo, on descarregar, el que ha de fer clic
i així successivament.
I després una vegada de seguir aquestes instruccions, vostè serà capaç de
per maximitzar la finestra, i el teu Mac o PC es veurà un
poc alguna cosa com això.
Un fons negre, una carpeta d'inici a la part superior on tots
els arxius d'anar, un pot d'escombraries a la part superior esquerra,
un menú a la part inferior.
Així que de nou, bastant similar a Mac OS o Windows,
tot i que passa a ser Linux.
Llavors, què podem fer al costat?
Bé, comencem a escriure programes.
I recordar que la setmana passada que tot el que es necessita per escriure un
programa és un editor de text simple,
com el Bloc de notes o TextEdit.
Francament, vostè pot fins i tot utilitzar Microsoft Word.
Però les coses dolentes amb el temps passarà, perquè això és una molt
mà dura solució per escriure un programa, més l'hi
guardar en el format d'arxiu incorrecte.
Però és només un editor de text, un processador de textos, és tot el que
necessari per escriure un programa.
>> Així que en l'aparell CS50, podem fer-ho d'una manera senzilla.
Acabem de fer clic en aquesta icona a la part inferior esquerra.
I de nou, el problema d'establir una li informar i voila -
rep aquest interfície en blanc i negre en què podem començar a
escriure codi.
Així que anem a començar a escriure un programa simple súper nou.
Vaig a pujar a Arxiu, Guardar, i jo vaig a cridar
aquesta, diguem, hello2.c.
I jo només ho dic, feu clic a jharvard, el va posar
en el seu directori personal, realment no m'importa
on aquest va.
I després a Desa.
I ara puc començar a escriure el meu programa.
I record d'abans que he d'escriure int
main (void).
Zoom a la part superior esquerra.
I després vull dir printf, pren dues.
I ara una cita nova línia, tancar, tancar
parèntesi, punt i coma.
I després vaig aquí al meu finestra de terminal que és
incrustat en gedit, només per conveniència.
I seguiré endavant i fer escriure hola, però no
hola només, hello2.
>> Així que el meu arxiu es diu hello2.c. El meu arxiu per tant
ha de ser anomenat hello2, en aquest cas.
Maleïda sigui, què vaig fer malament?
Molt bé, així que clarament s'omet una línia, si vostè recorda el que
programes anteriors semblen.
Però anem a veure si no podem molestar aquest part.
Desafortunadament, la majoria de les persones que escriuen els programes amb els quals
escrivim programes no simplificar les coses del tot bé.
Així que hem de tipus de lliscar sobre el que no acaba de fer
sentir aquí i veure si podem esbrinar el que està malament.
La primera línia es diu implícitament declara C
biblioteca printf amb int tipus de funció.
OK, vaig entendre part d'això.
Però sembla estar al · ludint al fet que he fet servir printf
malament, d'alguna manera.
I quin sentit té de dolent?
Jo només no va ensenyar l'equip que es troba en un arxiu
anomenat stdio.h.
Ara només he de memoritzar un moment que printf és
en stdio.h, i de fet hi haurà un altre
funcions en aquest mateix arxiu que anem a acostumar.
>> Així que ara seguirem endavant i premeu Ctrl-L per esborrar només que
de distància, torni a fer hello2, i llest.
I aquesta comanda de nou, més complex del que anem a explicar per
actuals propòsits.
No obstant això, s'ha executat clang, clang i pren el codi font i
escup 0s i 1s.
I els 0s i 1s en aquest cas es diuen què?
Bé, codi objecte.
I l'arxiu que està en crida, així,
hello2, en aquest cas.
Com que el meu fitxer de text va ser hello2.c, Enter.
I ara he prendre dos signes d'exclamació, signe d'exclamació
punt, signe d'exclamació.
Molt bé, així que ara tenim la capacitat d'obtenir cadenes,
pel que sembla.
Bé, què més podem obtenir dels usuaris?
>> Bé, a la biblioteca CS50, hi ha altres funcions que
Anem a simplificar les nostres vides en aquests primers dies.
GetChar, GetDouble GetFloat, getInt,
GetLongLong, GetString.
Bé, anem a arrencar la més fàcil d'aquests primers.
GetString literalment fa això.
Simplement se senti allà, esperant que l'usuari escrigui alguna cosa,
i tan bon punt em escrigui alguna cosa i prem Intro, es
fa alguna cosa amb aquest valor.
Així que anem a tornar a aquest exemple per veure exactament el que
GetString estava fent.
Deixin-me seguir endavant i obrir en gedit, hello.c, i recordar
que just abans del descans, aquí és on el deixem.
>> Així que ara es burlen d'aquesta separació, en una mica més de detall.
Així que en la línia 6, hi ha dues coses
succeint en el moment.
El signe igual és separar la primera meitat i la segona meitat.
Així que a la banda esquerra del signe igual, estem
dient cadena s.
I llavors, just termes senzills, quina és la cadena es
fent, què et sembla?
Es tracta de crear un què?
Així que és la creació d'una cadena anomenada s.
Ara, què significa això realment?
Bé, es reserva espai per a una cadena anomenada s.
Això no és del tot correcte.
Què fa això?
Ordinadors Bé, com vostès saben, tenen unitats de disc dur, que és on
seus arxius s'emmagatzemen.
Els ordinadors tenen memòria RAM, i aquí és on els programes es carreguen
mentre s'estan executant.
Així que quan es fa doble clic en una icona de Microsoft Word i obre
amunt, Microsoft Word s'està executant, per dir-ho, a la memòria RAM, que és
la part electrònica del seu equip.
No és la part física, mecànica que està girant, on
les dades s'emmagatzemen generalment a llarg termini.
Així que la cadena s és més o menys deia l'ordinador em fa
RAM suficient per adaptar-se a una cadena.
Això sí que és una mica d'una simplificació excessiva, ja que
Com és de gran la cadena serà?
Bé, en realitat no ho sé encara, de manera que en les pròximes setmanes
que en realitat va a retirar la capa que és una cadena i
que vaig a dir el que realment és.
String, per ara, és només una simplificació bonic del nostre món.
Però la cadena es declara una cadena anomenada s, per ara.
Declara una cadena.
Es reserva una mica d'espai a la memòria RAM de la cadena que l'usuari és
a punt d'escriure.
>> Ara donem una ullada a la dreta del signe igual.
Així ho diu GetString ().
I una mica de seny comprovar.
El fet que no hi ha res dins dels parèntesis
implica que aproximadament GetString?
Això no té arguments.
És a dir, no es pot influir en el seu comportament de cap manera.
Cada vegada que l'utilitzi, obtindrà una cadena i això és tot.
Per contra, printf, esperem que el seu comportament fa
canviar tot el temps.
En cas contrari, es tracta d'una funció d'impressió bastant inútil si
fa el mateix.
Si sempre imprimeix David o alguna cosa
arbitrària tot el temps.
Així printf té sentit tenir un argument.
GetString realment no necessita un argument, perquè volia
per obtenir una cadena de l'usuari i és l'usuari qui va
per abastir el dinamisme escrivint amb lletres diferents
cada vegada en el teclat.
>> Llavors, què GetString és en última instància?
Penseu en això com aquest quadre negre.
I aquest requadre negre no té entrada, però quan just en
pronunciació, escup una cadena que l'usuari ha escrit polz
I el fet que hi ha un signe igual no vol dir prendre
el que s'escupen a la dreta i deseu dins
el que està a l'esquerra.
Així signe igual aquí, que en realitat no vol dir
igualtat, més aviat tècnicament significa assignació.
Pren el valor de la dreta, i la va posar al
variable de l'esquerra.
Així que això és tot el que està passant allà.
>> Ara bé, en la línia 7, que anomenem printf.
Així que espero que printf és cada vegada una mica avorrit per ara.
Així que imprimir una cadena amb format.
Què cadena?
Imprimeixi, "h-i-l-l-o,% s
\ N ".
Molt bé, i què és el que vull plug-in per% s?
Literalment, tot el que s'emmagatzema en s.
Així que en aquest cas, comprovi la poca seny, quants arguments té
printf prendre?
Bé, he sentit un.
Vaig sentir una vegada.
Dues, vaig sentir dos.
I què hi ha tres?
Bé, tres?
Excel · lent.
Tres respostes possibles, només una és correcta.
Així arguments de nou influir en el comportament d'una funció.
En el passat, tenia printf només tenen un argument.
"Hola món" era un sol argument.
No obstant això, ara, noti que això és una coma.
Aquesta coma està fora del pressupost / fi de la cita, el que significa
printf hey, aquí ve un segon argument.
>> Així que comes en la majoria de llenguatges de programació
separats múltiples arguments.
Així que la resposta és definitivament no és un, perquè
existeix aquesta coma.
Així mínimament, printf és aparentment prenent dos
arguments en aquesta ocasió.
Però l'oportunitat d'una pregunta amb truc aquí és el que
sobre aquesta coma?
Vol dir això que no hi ha realment tres arguments?
Això, això i això.
Així que no, perquè aquesta coma està dins de les cometes, que
significa que és en realitat només una estètica d'Anglès.
No té res a veure amb el nombre de
arguments a aquest programa.
Així que aquesta és una coma fora de les cometes dobles.
I llavors retorna 0.
Per ara anem a prendre aquest tipus d'un en la fe per
avui en dia, i només sé que quan les funcions es duen a terme l'execució de
línies de codi, en general, ha de tornar algun valor.
En aquest cas, el fet principal ha tornar un int,
això és només la manera com el llenguatge C funciona.
>> Llavors, perquè res va sortir malament, se sent com aquest programa de
bé, només a canvi de codificació fixa 0.
Però en contrast, i jo vaig a escriure això en pseudo codi
Ara, igual que ho va fer José quan vam fer el mitjó
exemple la setmana passada.
Si alguna cosa va sortir malament - no és codi real - va ser
malament, i després tornar, diguem, 1.
Else return 0.
Així que aquí és on anem amb això.
Això no és real codi C, només pseudocodi.
Però així és com es podria tornar
diferents valors possibles.
Però per ara només vaig a seguir endavant i tornar 0.
Molt bé, qualsevol pregunta fins al moment sobre la sintaxi, la funcionalitat,
o similars?
Sí, a la part posterior.
>> AUDIÈNCIA: [inaudible]
David Malan: Pots parlar una mica més alt?
Per què aquest programa de retorn 0, i?
AUDIÈNCIA: [inaudible]
David Malan: Oh, això és perquè tinc mandra, ho sento.
No hi ha resposta acadèmica bé, retorna 0.
Puc salvar aquesta espècie de, en dir tècnicament C, si principal
no explícitament torna un valor, es tornarà 0
automàticament per a vostè.
La qual cosa és cert, jo no estic encobrint.
Però, jo hauria d'haver fet d'aquesta manera.
No portar interessant que això no sigui el meu error.
Sí?
>> AUDIÈNCIA: En general, quan s'escriu en el buit, que significa
No torni alguna cosa.
David Malan: Correcte.
Si per contra, s'ha d'especificar abans del nom d'una funció, per
exemple aquí, el buit, la funció
no torna res.
I per tant jo diria, la devolució o res en absolut,
i que seria coherent.
I tornarem a això.
I només per la teva informació, una de les captures amb l'aprenentatge
programació en un món que compta amb centenars de llibres i
centenars de llocs web per aquí és que invariablement es
veure sintaxi diferent en diferents llibres
per diferents persones.
Adonar-se que farem el nostre millor esforç en les seccions i conferències per ser
consistent.
Però de vegades vostè veurà sintaxi conflicte.
Així que cada vegada té dubtes, pregunteu.
I en general, nosaltres ens encarregarem de conferències i seccions a
gairebé sempre es presenten en el camí correcte.
I dic gairebé sempre, perquè exemple.
Altres preguntes?
>> AUDIÈNCIA: Té% s existeix fora de l'aparell?
David Malan: Té% s existeix fora de l'aparell?
Sí
Així que% s té a veure amb C. El fet que s'estigui utilitzant,
fonamentalment l'aparell no té res a veure amb la
característiques del llenguatge que utilitzem.
De fet, la setmana passada, quan es va utilitzar el meu Mac, em va escriure
C codi en el meu mac.
Podria haver fet servir% s en el meu Mac, i es podia utilitzar en
l'ordinador amb Windows si instal · la un compilador, com
Visual Studio de Microsoft.
Així que% s.
Tot el que estem fent dins d'aquesta finestra avui ha de
res a veure amb C. I fonamentalment a veure amb la
sistema operatiu en qüestió.
Per contra, el terminal blanc i negre finestra - quan
Estic escrivint coses com ls i cd rm, i -
que té a veure amb el sistema operatiu i
navegar voltant.
Si.
AUDIÈNCIA: Em referia a la biblioteca, la biblioteca CS50.
David Malan: Està bé, així que si et refereixes a la cadena de paraules clau, que
només existeix a la biblioteca CS50, correcte.
Que no existeix en si mateixa C, i de fet en un parell
de setmanes anem a llençar la biblioteca CS50 i començar
fer les coses del no-res a nosaltres mateixos, per dir-ho.
Altres preguntes?
Si.
>> AUDIÈNCIA: [inaudible]
David Malan: Bona pregunta.
És el cas dels comandaments sensible?
I permetin-me fer una distinció.
Així que els comandaments són generalment les coses que vaig a escriure al
part inferior de la finestra, a la finestra de terminal.
Tot el fins aquí seria les declaracions o codis C.
Però en tots dos casos, la resposta és la mateixa, si.
Tots dos d'aquests entorns, el codi C a la part superior i el
sistema operatiu de línia d'ordres al
inferior, es distingeix entre majúscules i minúscules.
Pel que ha capitalitzar GetString amb un capital G,
capital de S. Escriu printf en minúscules.
Escriu ls en minúscules.
Així, en gairebé totes les situacions d'aquest semestre, el cas serà, en
fet, la matèria.
Sí
>> AUDIÈNCIA: [inaudible]
David Malan: Ah, llavors està bé, què passaria si tinguéssim un arxiu
anomenat hello.d.
Així que resulta que D és un llenguatge de programació.
I així, en alguns casos, en realitat podríem escriure un programa en
aquest arxiu i l'han compilat d'aquesta manera.
Podem, i en realitat, la resposta curta és, no ho sé.
Així que anem a fer això.
Deixa anar endavant i crear un nou arxiu.
I la tornada aquí, de veritat, en general, és quan qualsevol dubte
aquest semestre, i que tingui el seu aparell o equip
obrir, seguir endavant i intentar alguna cosa.
Així que vaig a guardar un arxiu anomenat hello.d.
Guardar aquest.
I faré córrer hola Intro.
Semblava inferir que c és més probable
que d, en aquest cas.
Altres qüestions.
Si.
>> AUDIÈNCIA: [inaudible]
David Malan: Bé, dir que una vegada més.
AUDIÈNCIA: [inaudible]
David Malan: Com faria vostè per a diagnosticar o que
solució de problemes que?
Així que el més probable, perquè són llengües diferents,
més probable que s'obtindria un complet
programa diferent emesa.
Vostè rebrà els missatges d'error totalment diferents.
I també només en termes de disseny, sens dubte seria un
decisió de disseny pobre a escriure dos diferents
idiomes amb arxius gairebé el mateix nom, en
el directori de exactament la mateixa, utilitzant un
eina automàtica com fer-ho.
Així que també pot empènyer cap enrere i dir en 15 anys de fer això,
mai vaig cometre aquest error.
Podria succeir.
Però no només diferents, crec,
defenses logístiques existents.
A més, els missatges d'error que es derivarien, que faria
finalment revelar quin és el problema.
No obstant això, un cas extrem possible.
>> Molt bé, així que anem a introduir un parell d'altres
característiques aquí ara, perquè puguem començar a construir en més
i més complex programa.
Així que primer de tot, les matemàtiques.
Així Exemples de matemàtiques són només una mica fàcil en la primera setmana.
Això no vol dir que tota la programació és d'aproximadament
les matemàtiques.
Certament, la comprensió de les diverses característiques de
matemàtiques, àlgebra en particular, és
molt rellevant aquí.
A les classes de nivell superior CS, àlgebra lineal,
càlcul, i similars.
Però es donen compte de la major part del que farem en aquest semestre no es redueix
a les matemàtiques, i certament no a l'aritmètica, per se, però realment
a poc la lògica i el raonament assenyat.
I així, aquest vincle que la informàtica ha tingut durant molt de temps,
especialment a nivell de l'escola secundària, amb les matemàtiques, és una
poc enganyós.
Atès que la majoria dels programes que escriurem, en realitat, són
espècie de major nivell i es centren en la solució de problemes que,
Segur, podria utilitzar una mica de sumes, restes, i diversos
fórmules matemàtiques o similars,
però al cap ia la fi, es tracta de pensar i no
només l'aplicació del que podria haver fet en TI com un
calculadora a l'escola secundària.
>> Així que dit això, ara farem alguna cosa amb aquests
operadors matemàtics que existeixen perquè puguem viatge
sobre alguns dels aspectes subjacents de la programació, o en
aquest cas C. Així que són aquí, com la biblioteca CS50 suggerit,
i avui només estem utilitzant GetString - i en un moment
potser altra funció -
però hi ha diferents tipus de dades en un ordinador.
Al final del dia, els ordinadors només saben 0s i 1s.
Però recordem que la setmana passada vam parlar sobre el sistema binari
en la representació dels nombres, com el número 0 i 1, i 2,
tot el camí en un màxim de 8, com al vídeo de Nate.
I llavors podem comptar molt més gran, ja que
va fer a l'escenari aquí.
Però si vostè vol representar no només nombres sinó lletres,
nosaltres, els humans, hem d'arribar a algun arbitrari
convencions, de manera que si al final del dia, tot el meu equip
té és la capacitat d'expressar 0s i 1s, així que serà millor que
començar a normalitzar els patrons de 0s i 1s que representen
coses diferents.
Un patró de 0 i 1 que representa la lletra a.
Els patrons de 0s i 1s que representen la lletra z.
Els patrons de 0s i 1s, que representen el color blau, o
vermell, o similars.
Hem d'utilitzar tots aquests 0s i 1s per expressar-nos en
contextos diferents, de diferents maneres que no són
necessàriament numèriques.
>> Així que en termes de representació, C té diferents tipus de dades,
i hem vist a un d'ells fins ara.
Vam veure int i observi el que no està a la pantalla
en aquests moments és una cadena.
La cadena no, de fet, hi ha en C. De nou, és una
simplificació que presentem per a la primera
parell de setmanes.
Un char és un caràcter individual.
Un flotador és un nombre real, amb un punt decimal i els nombres a
l'esquerra i la dreta de la mateixa.
Un doble és el que, per als que tenen antecedents de tornada abans?
Així, un doble és dues vegades una cosa.
Afegeix el doble de molta precisió.
Llavors, què significa això?
Així, en cada un d'aquests casos, el món té una espècie d'estàndard
quants bits s'utilitzen per representar
cadascuna d'aquestes coses.
Així que si vostè ha mirat vídeo ASCII Nate ja per part
del conjunt de processadors 0 o més tard aquesta setmana vostè, probablement sabrà per
que ASCII -
representacions de caràcters -
utilitzar la quantitat de bits?
I fins i tot es pot recordar de la nostra demostració de com la setmana passada
moltes persones estaven a l'escenari.
Així 7 o 8, típicament.
Així que en general, 8, i hi ha alguna cosa que es diu prorrogat
ASCII que utilitza tots els 8 bits, en lloc de 7.
Però, en general, es parla en potències de 2, així que en aquest cas, 8.
Així que un char en un llenguatge de programació sol ser de 8 bits.
Així que un int és generalment de 32 bits.
Un flotador és generalment 32 bits.
Un doble és generalment de 64 bits.
I què vol dir això?
Això significa que pot representar grans nombres, o en el cas
dels nombres reals, pot tenir un nombre molt més després de la
decimal.
Precisió molt més, en aquest cas.
Ara molt de temps és malauradament nom.
Així que hi ha un int que és de 32 bits.
Hi ha una llarga que és, nope, 32 bits.
I molt de temps, que és 64 bits.
No obstant això, alguns dels quals són sensibles al context, sinó que depèn
Quin tipus d'equip que té.
Així que en general, s'ha d'especificar en una tasca o en un concurs quan
el que realment importa.
Però el punt és que hi ha tots aquests diferents
representacions aquí.
>> Així que anem a bussejar en realitat en un programa.
En lloc d'escriure aquesta un des de zero, deixa anar per davant
i obrir a partir del codi font de avui - tot això és
en línia - si vols improvisar una solució en línia o retorn de la
Dimecres amb l'aparell en el seu ordinador, les instruccions
perquè unirà a la pàgina principal del curs.
Aquest és un programa super simple.
Però té una mica d'alguna cosa nova a la part superior que
que no teníem abans.
Un munt de línies blaves del text.
Així doncs, aquestes línies blaves representen observacions.
Així que és molt útil en un programa per poder escriure
alguns comentaris a tu mateix, o amb col · legues o amics, o
Teaching Fellows, aquest tipus de descriure el que està passant en
aquest arxiu, però no tenen res a veure amb el codi C en si.
Res a veure amb el programa funcional, és només
estètica.
Així que la manera de fer això en C és en general comencen la seva
comentaris amb / * i acaba amb els seus comentaris
* /.
I si vostè és realment anal i m'agrada dibuixar tipus d'imatges,
llavors s'havia posat un munt d'estrelles, que series una
petita caixa com aquesta.
Però res d'això importa.
L'únic que importa és el primer
i l'. últim
Això és el que es diu un comentari de diverses línies.
I és només convenció humana sovint ho fan les estrelles i la caixa
coses com això si vostè té un munt de temps lliure.
>> Així que després que vostè ha escrit en alguns comentaris, en general, vénen
les ganyes reals del programa.
Aquí està la nostra familiaritzat # include.
I només ràpid, això és necessari o no cal?
AUDIÈNCIA: Necessari.
David Malan: Així que no és realment necessari.
Per què, però, no és necessari?
Així que no hi ha printf.
En efecte.
Tot el que estem fent en aquest programa són les matemàtiques.
Així que en realitat es pot esborrar això.
Així que no sempre han d'incloure res en
la part superior d'un programa.
>> Així que anem a simplificar això una mica.
I ara adonar-se del que fa el programa.
No hi ha molt d'interès.
int x = 1.
Bé, el que s'està fent?
Bé, pensi en el model mental d'abans.
El costat esquerre d'aquesta expressió fa què?
Crear un espai per a un sencer.
Llavors, com molt espai?
Bé, passa que ara sabem que és de 32 bits.
Anteriorment, una cadena era tècnicament 32 bits, però més
que en el futur.
Però un int és de 32 bits.
Així que aquesta expressió de l'esquerra aquí, int x només diu hey
sistema operatiu, dóna'm 32 bits de RAM -
també coneguda com 4 bytes de RAM -
perquè jo pugui posar un sencer en aquest espai.
Què sencer et vols posar?
Bé, només el número 1.
int i rep 2, fa exactament el mateix, encara que el
nombre és més gran, en termes de la seva magnitud.
El nombre en si és encara tan sols 32 bits.
És només el patró de bits és diferent a
representen l'1 versus 2.
int z diu ara dóna'm altres 32 bits, en diuen z, i posar el
la suma de 1 i 2 en allà.
Així que ara z és de suposar emmagatzemar el valor 3,
i llavors retorna 0.
>> Ara aquest programa, és el que fa una mica d'interès?
Així que en realitat no fa res interessant, en qualsevol
sentit, perquè per què? És fer una mica de matemàtiques.
Però no és tornar la resposta correcta.
Es retorna 0.
No és la impressió de la resposta.
Així que aquest programa és fonamentalment inútil, ja que
està ara.
És fer una mica de treball.
Va a portar el seu nombre de segons o microsegons, a
córrer, però no està fent res
útil per a l'humà.
>> Així que en realitat ara obrir math2, on ara estic realment
imprimir el resultat.
Així que això també es pot deduir dels exemples anteriors.
Si vull fer alguna cosa de matemàtiques simples, int x = 1, i
= 2. z és 1 més 2 ara.
Què és això d'imprimir òbviament?
Només 3.
Així seny registre ràpid.
Déjame entrar en aquest directori.
Així cd source1m.
Deixin-me seguir endavant i escriure make math2.
No hi ha missatges d'error va sortir, així que vaig a córrer -
a.out--no em deixa córrer math2. Retorn.
I, en efecte, s'imprimeixen 3.
Bé, anem a fer una ullada a una variant d'això.
En math3.c, ara tenim aquest exemple aquí.
>> Així que aquesta és una espècie d'interessant.
Així que en aquesta d'aquí, la resposta es posarà 1 dividit per 10,
i nota que he declarat com un flotador.
Per què volem que sigui un flotador?
Bé, és una fracció.
Serà un nombre real.
Així que serà de 0,1, és d'esperar - 10%, en aquest cas.
I què és el que llavors vull imprimir?
Bé, aquesta resposta.
Bé, anem a molestar les distingeix en primer lloc.
Així que a la banda esquerra, declarar una
surar, truqui a respondre-la.
A la part dreta, no 1 dividit per 10 i indicar un
respondre dins de la variable.
Ara, aquesta línia es veu una mica més críptic.
Però noti algunes de les característiques familiars. % Significa aquí ve un
marcador de posició.
f significa aquí hi ha un valor de punt flotant, un veritable
nombre, alguna cosa amb un punt decimal.
0,2 ¿què significa?
Algú sap per experiència prèvia?
Dues decimals.
Així que no he vist això abans, però és només una forma de
l'exercici d'una mica més de control sobre printf i
dit no em donen 30 punts després del punt decimal,
en canvi em donen només 2.
>> I després seguirem endavant i executar aquest.
Així que les matemàtiques 3, i ara em deixa córrer matemàtiques 3, Enter.
I això no està bé.
Sembla que hem trobat el nostre error genuí primer.
Bé, potser no estic buscant prou a prop.
Així que permetin-me anar fins aquí, i em deixa posar 20 decimal
llocs puntuals allà.
I m'ho dius a mi recopilar la informació, fer math3, corre.
Bastant segur d'1 dividit per 10 no és 0.
Llavors, què està passant?
Doncs bé, així que en realitat no té res a veure amb això.
Això és un bon pensament.
Això és realment només una coincidència
que estem fent això.
Però només per demostrar que això no ho és, vaig a
tornar una mica a l'atzar.
No facis això a casa, perquè és simplement incorrecte.
Però que math3, deixa córrer.
Així que no té res a veure amb el que estic tornant, només ha de fer
amb el que estic imprimint.
Però el vaig escoltar aquí baix.
Què?
AUDIÈNCIA: Així que hem d'escriure els nombres en
la divisió com -
>> David Malan: Bé bo.
Així que hem d'escriure els nombres que participen en el
divisió de punt flotant com aquí es valora.
Llavors, el problema aquí és que abans: C, com amb una gran quantitat de
idiomes, compta amb diferents tipus de dades.
I aquests tipus de dades, per exemple, són aquestes aquí.
I els tipus de dades que es tracta aquí, quan jo escriviu 1 i després
tipus 10, són probablement el que els tipus de dades?
Així que és probable que un int, oi?
Definitivament no és un flotador perquè no hi ha decimal
punt o alguna cosa així.
Així que en realitat, tinc un sencer dividit per un enter.
>> Així que l'interessant de les matemàtiques i un ordinador és que
si vostè està fent ús de la divisió de nombres enters -
1 dividit per 10, si és de 0,1.
No obstant això, quan s'està dividint un nombre enter per un nombre enter, el
resposta ha de ser també un nombre sencer només perquè, per ara.
I quina és la implicació, llavors?
Bé, si la resposta és 1 dividit per 10 és igual a 0,1, el que
l'equip es farà és que no tinc idea de com
representen 0,1, perquè això és un valor de punt flotant, no un
sencer, sinó que va a tallar tot després de la
punt decimal i tan sols mostra el 0 al principi.
I el fet que s'està imprimint, com un punt flotant
valor, és només una mica estètic.
Això és perquè estic forçant l'ordinador per imprimir això com un
surant valor en punts.
I de fet ho he declarat com un flotador, però la matemàtica
passant per aquí.
>> Així que em realment solucionar això d'una manera molt fàcil.
Per què no acaba de fer 10,0 i 1,0, tot i que
tècnicament podria sortir-se amb la seva fent un d'aquests.
Ara vaig a seguir endavant i fer math3.
Deixin-me seguir endavant i ara s'executen math3, Enter.
I ara, oh noi.
Ara tenim un nou problema per complet.
Així que millor, oi, estem més prop de 0,1, però el que és clarament
malament aquí?
Llevat que hagi estat mentint durant anys, no?
1 dividit per 10 és realment no exactament 0,1, quin és
realment està passant aquí?
Així que vostè pot tipus de raó a través d'aquesta lògica.
Si un equip només té una quantitat limitada de memòria RAM per començar
amb, i de fet un únic ordinador utilitza 32 bits per a una
surant valor en punts, és lògic pensar que amb un
nombre finit de bits, 32 en aquest cas, sí, es pot
representen un munt de coses.
En realitat, és 4000000000 valors diferents poden ser
representat amb 32 bits, 2 a la 32, però és encara limitada.
Així que el problema és que hi ha un nombre infinit d'arrels
nombres, clar.
Si em dóna un nombre real, sempre es pot trobar una
una mica més gran, una mica menys, amb només ajustar la
nombres que estan després del punt decimal.
Així que si vostè no té un nombre infinit de bits,
no és possible que representi un infinit
nombre de nombres reals.
>> Així que aquesta imprecisió inherent a les computadores, i
això es va ensopegar amb tot el temps, fins i tot en el més simple de
programes com aquest.
Però també en alguns problemes del món molt real també.
De fet, anem a prendre un moment per fer una ullada a
alguna cosa que realment va succeir en la realitat.
Anem a veure només el primer parell de minuts, i després
anem a publicar la línia d'enllaç.
Però això és una prova del que només pot sortir malament, bastant
honestament, d'una manera molt tràgica quan aquestes coses no són
apreciat o només els éssers humans cometen errors a l'hora de
aquest tipus de detalls d'implementació de les computadores modernes.
>> [JOC VIDEO]
-Tornem ara als desastres d'enginyeria en Meravelles Modernes.
Ordinadors.
Tots hem arribat a acceptar els problemes sovint frustrants
d'anar amb ells.
Errors, virus i errors de programari són un petit preu a
pagar per la comoditat.
Però militar d'alta tecnologia i d'alta velocitat i l'espai
aplicacions de programa, el problema més petit pot ser
ampliada cap al desastre.
El 4 de juny de 1996, els científics van preparar per llançar una plataforma no tripulada
Coet Ariane 5.
Portava satèl · lits científics dissenyats per
establir amb precisió com el camp magnètic de la Terra
interactua amb els vents solars.
El coet va ser construït per l'Agència Espacial Europea i
desenganxar de les seves instal.lacions a la costa de la Guaiana Francesa.
>> -Al voltant d'uns 37 segons de vol, primer
alguna cosa vaig adonar que anava malament, que els broquets es
gir d'una manera que realment no hauria.
Al voltant de 40 segons de vol, és evident que el vehicle
estava en problemes, i és llavors quan es va prendre la decisió de
destruir.
Un funcionari de seguretat de gamma amb ganyes tremendes premut el
botó, va esclatar el coet abans que pogués esdevenir un
un perill per a la seguretat pública.
>> -Aquest va ser el viatge inaugural del Ariane 5, i la seva
destrucció es va dur a terme a causa d'un defecte incorporat al
programari coet.
>> -El problema en l'Ariane va ser que hi havia un nombre que
requereix 64 bits per expressar i volien convertir
a un nombre de bit 16.
Se suposa que el nombre mai va ser
Serà molt gran,
que la majoria dels dígits en el nombre de 64 bits van ser 0s.
Estaven equivocats.
>> -La incapacitat d'un programa per a acceptar la
tipus de nombre generat per un altre era a l'arrel de
el fracàs.
El desenvolupament de programari s'havia convertit en una part molt costosa de
nova tecnologia.
El coet Ariane 4 ha estat molt reeixida.
Gran part del programari creat per a ell també va ser utilitzat
al Ariane 5.
>> -El problema bàsic era que l'Ariane 5 va ser més ràpid,
accelerat més ràpid.
I el programari no havien tingut en compte que.
>> -La destrucció del coet era un enorme financer
desastre, tot es deu a un error de programari minut.
Però aquesta no va ser la primera vegada que tenia problemes de conversió de dades
ple de tecnologia de coets moderns.
>> David Malan: Anem a deixar les coses així.
Però això és una prova de com de aplicable fins i tot alguns
més aquests detalls de nivell que hem començat a
explorar avui són.
Així que, com et donen una mica distret potser per alguns
la sintaxi i arcaneness aquí, es donen compte que més de la
termini estarem centrat només en com això és aplicable
mons més enllà de CS.
Ens veiem el dimecres.