ROB BOWDEN: Aquest és el secció més còmode, però això no vol dir que si vostè sentir que no estàs més còmode vostè no va a aprendre coses aquí. Així que anem a començar. Té tobogans anar a la dreta en les coses. Estic a punt de només prenc en aquest moment? Canvi de les computadores portàtils. ALLISON: No vol presenti, Rob? ROB BOWDEN: Oh, sóc Rob. Aquest és el meu cinquè any CS50-del TF. GABRIEL: Jo sóc Gabriel. Estic TF cap del CS50. Jo estava TF any passat i aquest any. ALLISON: I jo sóc Alison, i aquest és el meu segon any CS50-del TF. ROB BOWDEN: Molt bé, així que aquesta cosa de l'esquerra, espero que hagis vist abans. Si no perquè descarregar per tu mateix, vostè ha d'haver vist a la conferència. Així que aquest és l'aparell CS50, i ell va fer una mica d'una descripció de la mateixa en conferència. Però, bàsicament, és només vostè s'executa una operació dins del seu sistema operatiu sistema de manera que podem donar-li programes sense necessitat de de preocupar, oh és això anar a treballar tant en Windows i Mac, o si alguns de vostès ja estan el Linux, Linux. És només suposa que ser un joc comú camp perquè tots tinguin la mateix entorn exacte. Així que si vostè no té descarregat, vostè ha de descarregar-lo, perquè ets necessitarà per al conjunt de problemes. I és una de dues gigabytes descàrrega, de manera que podria prendre un temps. A la Universitat de Harvard que va a anar ràpid. Aparell Així CS50. Ara bé, en el principi, anem a parlar només un munt de línia d'ordres coses, i per tant per això, em refereixo a treballar en aquest entorn poc per aquí. I noti totes les coses Jo dic aquí i ara treballaran si estàs dins de un terminal interior de l'aparell, o si vostè està dins de la finestra de terminal gedit a l'interior de l'aparell. Així aquests ambients són idèntics. Però jo vaig a anar a una tercera ruta. I notar aquí això poca adreça IP aquí. Així que vostè no ha de fer això, però aquesta IP address-- ara si jo-- excepte està bloquejat per aquesta cosa. Acceptar, de manera que l'adreça IP més en un terminal aquí-- de manera que aquest terminal a través de aquí és una terminal en el meu Mac. Així que aquest és en cap manera actualment associat amb l'aparell en absolut. I si estàs en Windows, llavors vostè està va a haver de descarregar alguna cosa específicament per a aquest, en particular, la gent tendeix utilitzar massilla, P-O-T-T-I. Així que el que faré és tipus SSH i després que l'adreça IP. Bé, jharvard en aquesta direcció IP. Així 192.168.24.220. Aquest missatge de por, ho ignoren. Només has d'escriure si. Això és CS50 en una caixa. Se li demana la seva contrasenya. I així, en molts d'aquests contextos en els quals que demana la contrasenya, [inaudible]. Tenim un munt de preguntes on que diu que no és en realitat escriure. No et mostren els caràcters de la contrasenya a mesura que escriu, en tot cas, per a una funció de seguretat, ja que si algú està mirant sobre la seva espatlla i veuen estrella estrella estrella estrella, llavors saber que la teva contrasenya és de quatre caràcters. Així que la idea és que li preguntarà la contrasenya, el tipus. No va a mostrar que els personatges, però en realitat és acceptar-los. En aquest cas, cada vegada que mai veure una sol·licitud de contrasenya tractar amb l'aparell, el contrasenya serà carmesí. Així carmesí. I ara aquí dins d'aquest finestra que està en el meu Mac, Bàsicament, estic tenint la mateixa visió exacta com a l'interior d'un terminal en l'aparell. Així que vostè no ha de fer això. Vostè pot fer tot el que volen interior de l'aparell. Jo gairebé mai en realitat faig res en l'aparell. Jo gairebé sempre minimitzar això i ara Estic SSH de treball en l'aparell. En tot cas, si tenir un equip més lent, vostè podria notar una diferència. Faig això perquè prefereixo aquesta finestra terminal. Té algunes característiques com Puc dividir la finestra, i ara puc SSH a a través de l'aparell. Tinc dos SSH està passant a la vegada. Si el seu ordinador és particularment lent i s'està treballant en l'aparell, i t'adones d'això és realment mandrós, el que sigui. Tendeix a ser molt més ràpid si ets SSH-ed a. Però d'altra banda es pot treballar de qualsevol manera. AUDIÈNCIA: Què significa SSH? ROB BOWDEN: petxines d'assegurances, alguna cosa per l'estil? Què significa SSH? GABRIEL: shell segur. ALLISON: És simplement la closca segura. ROB BOWDEN: shell segur. És un protocol que és usted-- un protocol segur, de manera encriptada. La gent no pot espiar la xarxa i veure el que vostè està dient a res estàs SSH-ed a. I de fet, en el Olden dies de CS50, pel que en 2009 quan jo era un estudiant de primer any, la forma en què vostè va treballar en els butlletins de problemes CS50, vostè era SSH-ed a algun servidor que ens va donar l'accés a, i que va treballar allà. Així que vostè no té aquest aparell gràfica. No tenies gedit. Vostè no té totes aquestes coses que vostè podria visualment apuntar i fer clic. Calia treballar en aquesta interfície. Prefereixo treballar en aquesta interfície. Així que part del que anem a anar a més en aquest moment són un grup de la les ordres que vostè ha començar a familiaritzar-se amb tan que avança en el curs. I, honestament, una vegada que acostumar-se a ells, és molt més ràpid per treballar en aquest entorn del que és treballar amb el cercador, arrossegant i fent clic a les coses. Així que aquí estem. Ara només SSH-ed a, i així el defecte que ubicació: veure alguns d'aquests ordres a la classe, però anem a repassar tots ells de nou. La ubicació per defecte estem en és el directori d'inici. I directori, només una altra paraula per a la carpeta. Així que estem en el directori principal. Escrigui ls, llistar els arxius en aquest directori. Evidentment he creat un blah.c anterior. Així que tenim un directori de l'escriptori. Es nota el ressaltat de sintaxi? El ressaltat de color blau clar indica un directori i el blanc directe indica simplement un arxiu sense format. Així que no hi haurà alguns altres colors que vostè veu. Un arxiu executable és probablement va a ser de color verd o alguna cosa per l'estil. Acceptar, pel que estem en el directori principal. Ara bé, si jo vull entrar en una diferent directori, cd és la comanda que vull. Així que canvia de directori, i llavors vostè passar el nom del directori que per entrar. Així que aquí tenim quatre opcions. Jo puc entrar a les descàrregues, i ara veiem aquí s'ha actualitzat aquest parèntesi de dir que estic a ~ / descàrregues. Llavors, ¿què és accent? És una forma abreujada de el seu directori personal. Així que gairebé tot el que fas va a ser pel que fa al seu directori, i pwd és només una ordre Jo faig servir una vegada en un any que només imprimeix el directori actual. I pel que es veu aquí que ~ / Descàrregues realment resol a / home / jharvard / descàrregues. Així que / home / jharvard és el meu directori personal. Així que podem cd punt punt. Ara punt punt és un directori especial que sempre es refereix a un directori amunt. Així que si estic a ~ / descàrregues, llavors punt cd punt em portarà a titlla. Què pensem punt punt cd em portarà a ara? Em va a portar a / home. Així titlla pel directori de treball d'impressió, Jo estic ara / home / jharvard. un directori des que, Ara diu aquí / home. Ara punt punt cd. Ara estic en el directori arrel, i no pots fer-ho de nou. Et quedes a la directori arrel per sempre. El directori arrel té un munt de coses que, si voleu cercar a, vostè pot. Per exemple, si em vaig en bin, que conté tots aquests binaris, com ara ls, i cd, i totes aquestes coses. Així que aquestes comandes han de existir en algun lloc en el sistema, i està en el directori / bin. Però gairebé tot el que fas és serà del seu directori personal. I cd sense arguments de cap tipus, es podria dir cd ~, no cal. cd portarà vostè de nou al seu directori personal. Una darrera. cd - va a portar de tornada a l'últim directori que vostè estava a. Així que només cd'd dues vegades seguides, així que el meu últim directori era el directori d'inici. Si vaig a retallar bin, i ara anirem cap amunt i cap a l'usuari. Quota d'usuari. Anem a anar a la quota d'usuari. Ara estic ara en la quota d'usuari. cd -, de tornada a bin. Així que això es posa particularment útil quan tener-- i que canviarà. Així que la quota d'usuari, de nou bin, compartir bin. Així que això es posa útil. Vostè pot notar que té molts, molts, molts directoris niats. I que vols fer alguna cosa ràpida real en un directori superior. Vostè va a aquest directori, faci canvis i coses per l'estil, i ara vol anar tornar a on estaves. cd -. Sempre estic frustrat quan se m'acut anar a aquest directori jo volia fer el treball en. Sempre em sento frustrat quan ho vaig fer en dos passos en lloc d'un sol pas, perquè això significa que cd - va posar en aquesta ubicació intermèdia lloc d'on vull anar. Així que veiem tots els arxius de llista. Sabem com moure fins al moment. Així que ara anem a parlar de l'edició d'arxius. Així que en aquest curs, vostè és gairebé Sempre s'espera que utilitzar gedit. Si vols, pots fer el següent pas i començar a aprendre un text de línia d'ordres editor. Així hi ha diverses opcions. I els que són, probablement, serà d'interès per a vostè, tenim Nano, Vim, Emacs i. Així Nano és als principiants línia d'ordres editor de text. Així Nano anem a blah.c he creat abans. És només aquest fitxer C estàndard. I veus un munt de coses passant a la part inferior de la pantalla, i pel que sembla blah.c conté el codi C. Així que en aquest editor en particular, el que està dient en el bottom-- ara aquest símbol d'intercalació, veiem aquest ^ G, X ^, ^ S. Així que en gairebé tots context en el qual es veu, és possible que vegi aquest símbol d'intercalació a altres llocs en línia, sobre el desbordament de la pila, alguna cosa per l'estil. Gairebé sempre es refereix a controlar. Així que per sortir del que vull fer Control de Control de X. X, surt. I puc utilitzar el meu fletxa tecles per moure. Tingueu en compte que no puc apuntar i fer clic fàcilment. Cal utilitzar la fletxa tecles per moure. Pot existir un entorn per apuntar i fer clic. Però farem alguns canvis. Ara el Control X per anar de sortida. Dirà Guardar memòria intermèdia modificat. Ara l'indicador, i per a si, n per no. Control C per cancel·lar. Només diré que sí. Nom per escriure arxius. El valor per defecte és l'arxiu que ja és. Hit Intro. Okay. Ara he acaba d'editar aquest arxiu, guardat, i es va canviar. Així Nano és el més fàcil editor de text acostumar. Les alternatives són Vim i Emacs. Aquests són els editors de text de nivell superior que tenen una corba d'aprenentatge molt empinada. Així que la meva preferència personal és Vim. I té una àmplia varietat d'opcions. I una vegada que t'acostumes a ell, que mai vull anar a cap altre editor de text, ja que només tenir tantes coses disponible per a vostè en aquests, però es necessita una molt molt de temps per aprendre. Així que potser el que desitja forçar a tu mateix en aquest moment per acostumar-se a ell, però jo diria que val la pena. Però és difícil. I llavors Emacs. Jo sempre lluito en Emacs perquè Jo sé fer absolutament res. Pel que sembla, Emacs no és per defecte instal·lat en l'aparell. Probablement anem a afegir que com unes instal·lacions per defecte. Quan aprengui una de Vim o Emacs, no hi ha cap raó de pes per alguna vegada aprendre de l'altre, però és un estil completament diferent. Acceptar el que és l'edició d'arxius de text. AUDIÈNCIA: Si a vostè li toca Vim en aquest moment, com fer nosaltres-- ROB BOWDEN: Hi ha múltiples maneres en Vim, i hi ha tota tutorials sobre l'aprenentatge de Vim. Així que si vols passar a ser en mode d'inserció per tal per escriure text, que es pot escriba que de diverses maneres, però i és la manera d'entrar en la manera d'inserció. En o sortir de qualsevol dany especial la manera en què es trobi, només escapar. I només en bash Escape a aconseguir de qualsevol manera niats en el seu. No està malament, ara estic de tornada en la manera normal. I així, en mode normal, de dos punts. Vostè veu que apareix a la part inferior. I llavors q. Així q va a deixar de fumar si vostè ha fet canvis, que jo-- He fet canvis? He fet canvis pel que sembla. Així que si vostè ha fet canvis, que va a diu que vostè pot posar un signe d'exclamació. Vaig a dir-una explosió. Així que vostè pot posar una prohibició a només deixar sense fer res, o wq salvarà de còlon i deixar de fumar. Així w en general és escriure. Així que escriure el fitxer. Puc escriure i deixar de fumar. O vostè podria tenir només Slam qx, q explosió només per sortir-ne sense de qualsevol canvi que hagis realitzat prèviament. Molt bé, així que ara anem a vaya-- podem crear arxius. Anem a començar l'eliminació d'arxius. I només vaig a tirar en un nou ordre ràpid, toc. Així que tocar foo. Barra tàctil. Toc Baz. Si ls I, ara veiem que hi ha aquests arxius. Són completament buit. Així que és només un toc fàcil camí d'un, [inaudible]. Dos, tècnicament només a estat ella, que actualitza les marques de temps. Així que qualsevol arxiu que es crea té una marca de temps associat amb ella. Així Baz va ser creat a 14 de setembre a les 16:21. És ara 16:22, de manera que si Toco baz nou, veure que era més baz recentment modificat a les 16:22. Però d'altra banda gairebé mai mirar les marques de temps d'arxius. Així que toqui, aquí només estic fent servir per crear alguns arxius ràpides. Molt bé, així que ara és el rm comandament que ens preocupem per aquí. I podem rm esbroncada. Digui eliminar esbroncada arxiu buit regular. I podem escriure i, i ara és lleva. baz rm. Traieu arxiu buit ordinari Baz i tipus n per no. Ara no és remogut. Així bar i baz encara existeix. Foo s'ha anat. GABRIEL: Segueix parlant. ROB BOWDEN: Gran. Així que el missatge molest aquí, treure empty-- regulars Què estàs fent allà baix? Traieu arxiu buit regular. Així que si no volem ser molestat per aquest missatge, podem llançar en aquest -f bandera, i pel que és la força. I ara si em rm -f, que no dius què vols eliminar aquest arxiu. Simplement va a fer-ho. I ls, no veig bar allà. Ara que és un potencialment ordre perillosa. Es tendeix a no massa dolent. Tornarem en un segon com que pot ser realment perillós. I anem a crear algun directori temporal. mkdir, un altre ordre. Així que és una ordre mkdir que fa que un directori. I ara per ls veiem aquesta bonica llum blau va destacar directori temporal. Puc cd a temp. I puc mkdir foo. cd a foo. bar mkdir. cd a la barra. Així que veiem que podem obtenir fàcilment en alguns d'implantació molt profund. Ara, com puc eliminar un directori? rmdir. Així que si jo només intento recta rm, com ho vam fer amb un fitxer normal, bar rm va a dir no es pot treure la barra. És un directori. Hi ha un comandament especial per l'eliminació de directoris, alguna cosa així. Així barra rmdir. Ara bar s'ha anat. OK, així que rmdir jo més o menys mai ús. La raó being-- ara anem a fer una barra de fitxer normal aquí. Boo Així rmdir. rmdir. Error en eliminar foo. Directori no buit. Així que no pots fer servir eliminar dir en un directori que té les coses en ella. Així que vostè té algunes opcions. Vostè pot anar a aquest directori, tregui tot manualment, i després sortir i rmdir directori. Això òbviament sona molest. Què passa si hi ha milers d'arxius en allà? Bé, podries rm *. Parlarem de * en un segon. Bàsicament, vol dir totes les coses. Però millor encara, -r tan rm. Així rm -r-- en un munt de contextos, -R significa recursiu, que anem a parlar sobre el que mitjans recursius en diverses setmanes. Però, bàsicament, significa travessia la totalitat d'aquest directori i eliminar tot. Foo -r Així rm dirà baixar al directori foo? Sí. Traieu arxiu foo / bar buit regular? Sí. Traieu directori foo? Sí. Així que ara foo i tot en el seu interior s'ha eliminat. Ara que es pot aconseguir especialment molest cuando-- tocarem 1, toc 2, toc març. Podria tenir un munt d'arxius. Si volgués, podria crear milers d'arxius en aquí. I foo rm -r va a ser bastant molest. Sí, sí, sí, sí, sí, sí. Amb molts més arxius que veure ràpidament com moltes vegades Hauria d'escriure si. Bé, acabem de veure abans com podem desfer-se de la necessitat d'escriure, sí, -f. Així mkdir foo foo cd tàctil 1 2 3. Acceptar, per la qual cosa rm -rf foo va a esborreu a cegues foo per complet. No ràpida. No res. Foo s'ha anat. Així que jo tendeixo a utilitzar aquest comandar tot el temps. Dit això, es tracta d'una ordre molt perillós, perquè si faig alguna cosa com això, no li demanarà. S'ha anat. I passa amb força freqüència, i fins i tot en els cursos de nivell més alt de CS. A vegades anem a veure alguna cosa que algú diu que accidentalment la nostra rm rf-ed casa meva directori i tots els de la meva conjunt P s'ha anat. I és devastador, però no hi ha pot d'escombraries. No hi ha no hi ha res perquè vostè pugui recuperar. Simplement s'ha anat. Pitjor encara seria una mena rm -rf /. Així que acabem de discutir aquest directori arrel. Porta a terme la totalitat de la arxius en el seu sistema. Les coses tendeixen a ser bastant desordenat quan es treu coses com ls, i cd, i tot això. AUDIÈNCIA: Quina és la diferència entre rm, rf, i rm * ROB BOWDEN: Així rm * - ALLISON: pregunta era quin és el diferència entre rm, rf, i rm *. ROB BOWDEN: Així rm *. Estrella a mitjans en general tots el contingut d'aquest directori. Tractar de pensar en una altra formes de mostrar l'estrella. Bé, en realitat l'estrella general significa trobar cap patró. Així que si tinc un arxiu anomenat dog1, dog2 tocar, tocar CAT1, toc cat2. Així ls * 1 va a imprimir i CAT1 dog1, perquè aquesta estrella pot ser omplert en el con-- un ha de ser-hi, però l'estrella pot ser gat o gos. És un comodí. Aquesta és la paraula que estic buscant. Comodí. O podria ls gos *, i Estic vaig arribar a veure dog1, dog2. Així que aquests són una llista dels fitxers que coincideix amb aquest patró particular. Podeu fer servir ls d'aquesta manera. Ls * estrelles coincideix amb qualsevol cosa. Així que va a imprimir tots el contingut d'aquest directori ja que tots ells coincideixen. No va a imprimir qualsevol cosa en els directoris de nivell superior. Si tinc un subdirectori, foo, i tocar febrer 1 3-- de manera que ara si rm * estrelles, eliminar CAT1, cat2, dog1, dog2. No es pot eliminar foo. És un directori. Així estrella s'expandeix a tota la arxius en el directori. Així que tècnicament rm * és com dir CAT1 rm, cat2, dog1, dog2, foo. Mentre -rf rm, tècnicament estrella faria aconseguim el que volem, però rm -rf-- si surto d'aquesta directori, temp -rf rm, això va a anar a la temperatura i eliminar de forma recursiva tot. Així estrella és separada en que aquesta S'entén així que aquesta cosa por-- que estic corrent, aquesta cosa que m'està motivant per les ordres i després executar i fer ells, em criden a això la meva petxina. I així aquesta petxina és en si mateix un programa. I si jo volia, podria funcionar a / bin / bash. La closca es diu bash. I ara ens adonem d'una cosa ha canviat lleugerament, i això és perquè les meves preferències per la closca són una mica diferents. Però ara estic tècnicament córrer una petxina dins del meu closca original, i puc sortir d'aquesta closca, i ara Ja estic de tornada al meu petxina nivell superior. El propòsit de dir que és- l'estrella. Així que l'estrella és una cosa entès per bash. Així -rf rm, bandera -rf és entès per només rm. Se sap que quan vostè passar un -rf que la volen treure de forma recursiva tots els arxius sense fer soroll. L'estrella s'entén alguna cosa per bash que quan dius rm *, festa no dirà Hey rm *, retiri estrelles. Bash dirà rm * eliminar CAT1, cat2, dog1, dog2. Es va automàticament a ampliar tots els arxius en el directori. I de la mateixa manera accent és una altra símbol que Bash entén. Quan dius cd ~, cop s'expandeix que al seu directori. Altres preguntes fins ara? Acceptar així que començarem a anar ràpid. La implementació del tabulador. Només per tirar per aquí. Molta gent no ho facis adonar-se d'això existeix. Així que si escric cd dow, jo vull entrar en les descàrregues. No necessito escriure nloads. Jo només puc colpejar Tab. Per tant, reconeix que Dow és un prefix que no coincideix amb res la resta en aquest directori, per la qual cosa es completarà per vostè. Ara puc entrar. També faig que de forma recursiva. Foo Així mkdir. Anem a entrar en foo. bar mkdir. Així que tornar a casa directori, puc veure les descàrregues. Ara pestanya colpejar de nou, passant automàticament a omplir foo. És l'únic directori. Fitxa Colpejar de nou, de forma automàtica va a omplir al bar. Així que ara estic a (~ Descàrregues / foo / bar). Així que aquesta implementació del tabulador, quan vaig arribar a les hores d'oficina, i estic de peu sobre l'espatlla d'algú, i estan passant rm D-O-W-N-L-O-A-D-S, m'estic morint. Només pestanya, pestanya, pestanya, pestanya. Així que definitivament fitxa utilitzada. I de la mateixa manera i baix, un munt de gent només que va passar amb mai han colpejat amunt i cap avall. Va a passar per l'anterior ordres, pel que si vostè acaba d'executar alguna cosa, i desitja executar de nou, només té capacitat fins a arribar-hi. Okay. Tan ràpid, algunes altres coses. Tornem a temp. Crearem alguns arxius. Així que aquí, només sóc anar a la llista d'algunes paraules. gos, gat, miau. Anem a fer de gos, peix. Així que ara és un representant molt ordres útils que utilitzar per buscar a tot arxius d'un text en particular, i tècnicament es pot fer realment expressions complexes perquè aquesta coincideixi. Així que aquí, si em grep, i el Què vull cercar? Diguem que estic buscant per als gats, i Vull cercar tots aquests arxius. Així que com ho faig tots aquests arxius? Estrella. Així que en un arxiu, tinc gat. Probablement podria tenir anomenat una mica millor, perquè això sembla números de línia o alguna cosa així. Però en l'expedient que tinc una línia amb el gat. A l'arxiu de dos tinc una línia amb el gat. Així que ara puc mirar un arxiu dins i veure oh sí, aquest arxiu tenia gat. Arxiu Avís 03:00 no va ser igualada perquè el gat no hi és. Puc grep per miol. Només presentar dos té miol. Així que això es pot combinar, de nou, amb -r, que com he dit abans sovint significa recursiu. I pel que puc venir aquí, grep -r per a qualsevol instància de-- anem a editar aquest només per tirar un gat en allà. Així grep -r per a qualsevol instància de gat al llarg d'aquest directori. I ho farà de forma recursiva buscar els subdirectoris. Així que en baz, hi ha gat. En temp / 2, hi ha gat. I en temp / 1 hi ha gat. Així que això és buscar dins d'arxius. Ara vostè també pot usar una troballa. I pel que trobar és específicament sobre a la recerca d'arxius amb un nom determinat. Així que farem una mica més. Anem a entrar en les descàrregues. Toc dog1. Toc cat2. Toc cat_dog. Toc catcat. Per això vull trobar tot arxius amb gos en el nom. Així que trobar, i per al més llarg el temps mai vaig recordar com trobar funcionava, fins que, finalment, llegir alguna cosa que ho va fer tan clara. Així que trobar, automàticament recursiva. No ha de passar una -r. Així que trobar punts. No hem parlat de punt encara. Mentre punt punt sempre significa un directori amunt. Dot sempre significa el directori actual. Així que podria rm -r en el punt mateixa manera que puc rm -rf *. En última instància, aconseguir la mateixa cosa. rm -rf punt es va a treure a tot el directori actual. Bé, que jo no vull fer-hi. Però trobar punts. Així de buscar de forma recursiva corrent directori, i ara tot després d'això hi ha un munt de banderes això vostè utilitzar per excloure les coses des de la tornada. Així que trobar punts retorna tot el que pot trobar en el directori actual. Aquests són tots els arxius buscant recursivament. Anem a veure algunes de les persones en un segon. Però en cas que vostè s'està preguntant com ho faig que, de manera de comando K, almenys en el meu terminal en el Mac va aclarir. Control de L generalment desapareix per a qualsevol tipus de terminal. També podeu escriure clar. I si alguna vegada tens en un estrany scenario-- que m'ha passat un parell temps-- on els colors de les seves indicacions estan tots en mal estat, o que no són capaços de veure res sent teclejat quan estàs escrivint, perquè de vegades com el color de fons s'estableix el mateix que el color de primer pla i ara no pots veure els tipus de lletra. Restablir és una cosa que només es restableix a el fons negre per defecte, front blanc, o el que sigui s'estableix que ho facin. Llavors, on estàvem? Troba punts. Així que ara tot aquest passat punt restringeix els resultats a alguna cosa que coincideix el patró donat. Així que aquí Vull cercar tot amb el nom de gat. No tinc res. Per què és aquest el cas? Bé, només estic buscant alguna cosa amb exactament el nom de gat. Si vull buscar alguna cosa que té un patró, i cat-- les cotitzacions tècnicament no són necessaris, però jo els estic llançant en aquest país. Així que ara que troba catcat perquè aquesta és l'única cosa que és una mica arbitrària patró seguit per gat. Puc posar el gat *, i ara trobar catcat, cat_dog, cat2, perquè aquestes són totes les coses amb el gat al principi seguit per res. Pot combinar això. Si voleu cercar tots els arxius de C que vostè té, vostè pot ser que faci * .c. Hem blah.c aquí. Així que això és una obra de recerca. Vostè pot buscar. Té un munt de banderes per més restriccions. I un d'ells, diguem -d. Així obsolet. Oh, això no és el que vull. No -d. Escrigui d. Així que trobar punts - tipus d. Així que el que acabes de fer és que estic buscant per a tots els arxius del directori actual amb A-- d significa Tipus de directori directory--. Retorna tots els directoris en el directori actual. I tot tipus F és normal arxius, tots els directoris no. Així que això és només una exemple d'altres maneres pot restringir la cerca altra que només el nom del fitxer. Ja han passat 30 minuts. Tot i això va. ALLISON: Vaig a brisa a través. Es va a estar bé. ROB BOWDEN: Així que algunes altres coses. Ara Bang, signe d'exclamació. Així que en general vol dir: bé, anem a veure un exemple. Així! F, el que es va a fer? Bé, sembla tenir repetit troballa de tipus punt f. Què passa! G? Això només grep gat -r *. Així que toques pot utilitzar per repetir una ordre de fet recentment. Així que si escric! Gre, que tornarà a executar les ordres que van començar amb sang més recentment. I es pot veure tots aquests ordres amb la història. Així la història. Aquestes són totes les ordres m'he trobat avui. I així, no és, literalment, restringit a dia d'avui, però jo només he utilitzat aquest aparell a partir d'avui. És la seva totalitat de la la història del seu shell bash, llevat que es talla en algun moment. AUDIÈNCIA: Què passa si ho fa historial d'ordres [inaudible] i un error en el resultat encara s'imprimirà ell-- ROB BOWDEN: Sí, si hi ha una error en un d'aquests commands-- així que anem a dir, que és un comandament d'error no trobat. Segueix apareixent en la història. Bé. Altres preguntes sobre qualsevol cosa? Així que això és explosió. Ara, comanda realment útil, home. Així que li dóna la manual per a un ordre determinat. Així que diguem que man ls, per la qual això m'està mostrant ls. En ell s'enumeren els continguts de directori. I aquí és on jo veig que hi ha aquestes són les diverses banderes que existeixen. Així que veiem que ls -l existeix si haguéssim de llegir això. ls -l em dóna aquesta llista completa de la directori amb qui posseeix l'arxiu, la mida del fitxer, la la marca de temps modificat. Així ls -a és un altre que et poden utilitzar realment alguna cosa freqüència. -al és la meva bandera més comú d'aquest últims ls. Així -a, notar que hi ha molt més arxius que un simple ls. ls -a. Què hi ha en comú amb tots aquests arxius? Comencen amb un punt. Així que això és una convenció en Linux que els arxius que comencen amb un punt estan ocults. Així que només vol dir que quan acabem de ls rectes, o que estem buscant aquest directori usant l'equivalent cercador, o la de Windows Equivalent Explorer, que no volen veure aquests fitxers punt. Ells només contaminen la visió de les coses. Així que ells estan ocults a menys que vostè específicament sol·licitar-los amb una mena -a. Així que puc cd a .local, i veig que és en si mateix un directori amb un directori compartit, i aplicacions, i bla, bla, bla. Així que punt, els arxius només estan ocults. Acceptar, pel que altres més importants. Tinc un parell que puc saltar. Anem a parlar de veritat sobre ràpida les coses de redirecció d'arxius. Així que hi ha una sèrie complexa totalitat de les coses que pots fer amb ells, però només per veure'ls, diguem, ressò. Un altre ordre. Comando realment ximple. Tot el que fa és imprimir el que li dic que ho faci. Així que tiro hola. Simplement es va fer ressò de saludar la pantalla. Hola, món. Ecos hola món. Així que una ordre o un símbol que entén festa és més gran que aquest símbol, i que és la sortida a un símbol d'arxiu. Així que si la sortida I a aquest foo, hi ha ara un fitxer anomenat foo, a l'interior de que és hola món. Llavors noto que quan em faig ressò hola canonada món en foo, que no trobo hola món. En el seu lloc, es va posar en arxiu foo. I un altre ordre només per tirar a vostè, gat. Aquesta és una manera fàcil de simplement completament llistar el contingut de l'arxiu de manera que jo no he d'obrir un editor de text per a veure-ho. Així el contingut de la arxiu foo són hola món. I vaig poder blah.c gat, els continguts són això. Una vegada més, aquests són els comandaments que, no ho fan esperen que vostè els té tots memoritzen. La idea és que els he vist. Potser vostè està treballant en alguna cosa, i ja està com que estic fart d'obrir aquest arxiu. Tant de bo pogués mirar en el contingut real ràpid. Vostè podria fer això, llavors mirar cap enrere i dir oh recordar alguna cosa així com el que existeix, i és el gat. Així que va a un arxiu. Ara no hi ha realment cap bona exemple de la lectura d'un arxiu encara. Què és una cosa que pren alguna cosa estàndard en? Qualsevol simple comandament de Linux? Quan arribem a la mateixa, en un parell setmanes tots els piece-- bé, Aquesta setmana teniu una peça en la qual començar a prendre la entrada de l'usuari. I en general s'escriu que l'entrada en el teclat. En lloc d'escriure que d'entrada en el teclat, en lloc vostè pot canalitzar des d'un fitxer de manera que quan ho fa Mario, ./mario, canonada des de qualsevol arxiu determinat, i que va a executar el programa de Mario. Sense esperar l'entrada en el teclat, sinó que és només va a llegir el línies de l'arxiu foo. Així més gran que foo posa en l'arxiu foo, i menys de foo pren les coses a partir de l'arxiu foo i el fa servir com a entrada a aquest programa. I només per veure-ho, també podríem ressò foo bar baz, i llavors, en lloc d'un més gran que, farem dos a foo. Què vol que faci? Simplement afegeix a l'arxiu. Així que en lloc d 'avís si jo trobo a bla foo i després foo gat, és només bla. Així que quan la sortida a un arxiu, sobreescriu completament aquest arxiu. Si el que desitja és afegir, doble [? grau. ?] I finalment, és la canonada. Pipe Obté molt més complicat, on que pren la sortida d'una ordre i la injecta a la següent comanda. Així que una mica de cosa comuna, la història. Així, uf, no vull veure aquesta. Mostreu-me tots els ordres en la meva història on grep-ed per alguna cosa. No, això és confús. Mostreu-me tots els ordres on trobo. Tots troben els comandaments que mai va córrer. Així la història. Ara sortides d'història a la detectar aquesta llista d'ordres, però jo no vull sortida a la pantalla. En el seu lloc vaig a canonada a grep. Així que anem a grep per totes les instàncies de la troballa. Així que ara en lloc de prendre grep l'entrada, en lloc de-- grep és capaç de manejar com input-- estem utilitzant grep una mica diferent aquí. Així que en lloc d'escriure la llista de coses que volien buscar i va dir grep està prenent com a entrada. Així que si jo només grep trobada, que espera que jo escric coses. Així gat hola trobar. Hola. Troba. Noti que cada vegada que escric trobar reconeix que he escrit troballa. Així que en lloc d'això, ho farà arxius de cerca per trobar. Així que la història ara va a generar una llista de tots els comandaments. Estem posant que la producció, i estem alimentant a grep, i el que és escopir totes les instàncies de descobriment. La raó per la qual va dir que estaria confonent és si jo-- és encara confús. Si jo grep grep. Observi que és gairebé sempre que mostra la comanda que acabo córrer perquè aquest comando sí que té grep dins d'ella. OK, així que qualsevol pregunta sobre qualsevol cosa? I vaig a transferir la volta en aquest punt. Esperem que aquest és un bon visió general de tots els comandaments que vostè no necessita tenir memoritzen, però aquests constitueixen un sòlid 95% del que fer a la línia d'ordres. També cal tenir en compte que la línia d'ordres sí, cop és un llenguatge de programació, i així, quan et poses a això, vostè podria voler fer coses realment complexes. I pel que té coses com bucles, i IFS, i tots aquells que et vas a acostumar a amb els seus llenguatges de programació. Però això és més enllà de la àmbit d'aplicació d'aquesta secció. OK, així que no hi ha preguntes? ALLISON: Cap? GABRIEL: Vas A-- ALLISON: puc fer-ho en la meva, si vols. Podem veure què passa. ROB BOWDEN: Off a Allison. ALLISON: Woo. Vostè és un acte difícil de seguir, Rob. Vostè vol que jo encenc amb vostè? O que tens, a D'acord. Vaig a tractar de no bastant ser tan llarg hi. Anem a veure si aquesta voluntat treballar la manera que jo vull que faci. Potser? Jaja! Sí. Així que només vaig a anar molt ràpid a través de variables, bucles, condicionals, i una mica en el compilador. Si vostè té preguntes en qualsevol moment, per favor em detingui. Aquests nois em van a recordar a repetir la teva pregunta en el cas que m'oblidi, però no ha de ser massa dolent. Així les variables, sí. No tenim a ningú de la seva Peces d'Scratch aquí. Estic segur que la majoria de vostès, si vostè tenia algun tipus de joc que va crear amb Scratch, que tenia fer un seguiment d'una cosa així com la puntuació, o el temps, o alguna cosa per l'estil. Així que els de color taronja brillant peces que veiem allà són només la forma de les ratllades les variables, i que sens dubte ser l'ús de variables a través dels seus programes. Si no ho ets, no estic realment segur del que estàs fent. Però de totes maneres, gran cosa, la definició de les variables. Amb C cada variable té tenir un tipus declarat, així que li vaig donar una molt una de general a la part superior. Així que vostè tindrà la seva escriure i després el que sigui decideix trucar al seu variable. Així que en aquest cas, el tipus en la seva llista de variables. Tenim tres exemples. Char d'algun grau, d'un A, que és el Estic segur que tots volen per obtenir en aquesta classe. Podeu definir múltiples variables en una línia sempre i quan tots són del mateix tipus, que és el nostre segon exemple hi ha on vostè té tres les variables, x, i, i z. Són totes les carrosses. I llavors vostè pot també, en aquest últim exemple amb int puntuació i nombre dels equips, es pot inicialitzar ells allà mateix. Així, en l'exemple medi on ens només has flotador de x, i, z, els que encara no s'inicialitzen. Ells no tenen cap valor. O tenen valors d'escombraries. I si vostè intenta i s'utilitzin, el compilador gritarte. Has de tant declarar i inicialitzar les seves variables. Així que en aquest últim, que estem fent les dues coses. Estem declarant les variables de la puntuació i número d'equips, i estem inicialitzant ells, donant ells els seus valors inicials de 7 i 4 respectivament. Refredar. Tothom bé? Impressionant. Acceptar, de manera que algunes convencions. Si vostès han llegit a través de l'estil 50, aquests són només les coses que ens agradaria per a implementar en el seu estil. Noms tan significatiu. Si comença a cridar a les coses acaba de x, i, i z, especialment com et fiques en més llarg programes, ets probablement va a confondre a tu mateix i ser com ho és aquesta variable es refereix a. No tinc idea del que això significa. Així que si se suposa que ha de mantenir una puntuació, en diuen la puntuació. Si se suposa que ha de mantenir alguna resposta o donar lloc, donar-li un nom com aquest. Per bucles, que anem a entrar a la següent diapositiva, variables d'una sola lletra estan bé. ROB BOWDEN: I, J i K són només convencions per als bucles que tothom els espera a ser cridat i, j, i k. Vostè pot trucar a ells-- veig fila columna o fila de vegades cridada per dos bucles niats, i això és també una espècie d'estàndard. Però i i j és totalment conegut. ALLISON: Sí, i j ets totalment bé. En nom de la claredat com en algunes de les seves sèries P, podria tenir sentit tenir més coses descriptius en allà només per realitzar un seguiment de la mateixa. Però crec que i, j, k i crec la gran majoria de nosaltres tot l'ús. ROB BOWDEN: Amb aquests convencions, per la qual cosa l'estil és important. És un dels quatre eixos en la qual vostè està classificat, i és tan fàcil d'anar més el P fixat en el final i assegurar- que no hi ha errors estilístics. Així que assegureu-vos que està correctament tabulació. Assegureu-vos que les seves variables són nomenats. Deixa alguns comentaris. És molt fàcil d'aconseguir aquests punts. No ha de pensar en qualsevol cosa per tal d'aconseguir aquests punts. No ha de desxifrar res. És simplement fent que es vegi bonic. ALLISON: De fet, tenir estil 50, que li dirà on t'estàs ficant fins si t'estàs ficant fins a l'estil i li dirà exactament el que cal esmenar i com ha de arreglar-ho. També és a bo esmentar que és la política de curs que si vostè està a l'oficina hores i el seu codi és un desastre, podem rebutjar a ajudar que fins que es vegi més bonic. Així que comença a sortir a la dreta, mantenir estil coherent, també només farem les seves vides molt més fàcil quan vostè està tractant d'anar a través de depuració. Si vostè està tractant d'esbrinar on s'està perdent una clau i estan per tot el lloc, que està només fer la seva pròpia vida més difícil. Així que estar d'acord amb l'estil. Et prometo que va a fer la seva vida més fàcil. Es va a fer la vida més fàcil. Tot el món serà molt més feliç. I això és el que vols. GABRIEL: El seu grau serà més gran. ALLISON: Sí, i el seu grau. Si el TF és com tu, tendeix a ser favorable. Molt bé, i després només el segon punt aquí. Inicialitzacions consistent. Així com hem vist, es pot declarar i inicialitzar les coses. Múltiples variables en la mateixa línia. Una cosa que ens agradaria que no de fer és declarar algunes variables i no inicialitzar ells en el mateix línia que està inicialitzant altres. Així que en el cas que va fer no té cap sentit, tenim l'exemple aquí on estem declarant ints en les variables de quarts monedes de deu centaus i penics, però quarts i centaus no tenen cap valor inicial. No els hem inicialitzat, però al bell mig hi ha ja inicialitzat monedes de deu centaus a 0. Així que, o fer cambres, monedes de deu centaus, monedes d'un cèntim. O quartes parts són iguals 0. Dimes equivalen a 0. Centaus igualen 0, o el que sigui aquests valors inicials són. Cosa gran amb estil, ser coherent. En cas de dubte, ser coherent. Però seguir la nostra guia d'estil també. Refredar. Tothom bé allà? AUDIÈNCIA: On és la guia d'estil? ALLISON: La guia d'estil és en-- quin és el lloc web? GABRIEL: Jo crec que és manual.cs50.net/-- ALLISON: Estil? GABRIEL: Estil. Sí. ALLISON: Sí. Per tant el dubte, on és l'estil 50. manual.cs50.net/style. Sí? AUDIÈNCIA: Si estem definint les variables, ¿està bé si posem com [inaudible] com int puntuació i després int meta. Així que diria que ara que hem ha de definir junts? ALLISON: tant el dubte, en cas de té codi redundant quan s'està definint variables com int puntuació i en la línia següent int joc? ROB BOWDEN: Hi ha definitivament casos en què el codi redundant és dolent. Jo no ho consideraria que el codi redundant. Jo gairebé mai declaro múltiple variables en la mateixa línia de sempre. I en tot cas, és perquè usualment deixo algun tipus de comentari explicant el que la variable és per. Així que vaig a dir int puntuació slash slash. Realitza un seguiment del que sigui. En tala total de barra. Així que és molt més basta d'aquesta manera per posar a tots en la mateixa línia. Jo mai vaig posar en la mateixa línia. ALLISON: Em sento com si fos preferència personal en aquest punt. AUDIÈNCIA: Això va per de bucles i coses també? ROB BOWDEN: Igual que a l'interior? Igual que int i és igual a 0 per comes longitud és igual a alguna cosa? Que vostè no té una elecció. Amb els bucles de la inicialització parcialment: pel que podria només haver vist int i és igual a 0 i punt i coma menys que en mengi i plus plus. Això int i és igual a 0, tècnicament també pot fem el que hem vist abans amb la sintaxi coma. int i és igual a 0 coma j és igual a 3 coma k és igual a 5. Vostè no té l'opció de dividir que en múltiples línies, i això és normal. En veure que no està bé. ALLISON: Awesome. Bé, segue convenient en bucles. Així que sí, aquí tenim alguns exemples de bucles que vostès va veure en scratch. I, per descomptat, tots aquests només pot ser recreat en C. I ells bàsicament li permeten repetir alguns secció de codi fins que una certa condició es compleix, el que anem a entrar a la dreta després de parlar sobre els bucles amb els condicionals. Així que tenim tres tipus principals. Perquè, mentre, i fer, mentre que tots anem a passar per aquest moment. Així que primer és per als bucles. Així, per alguna condició, executar aquest bloc de codi. Tenim aquest petit fresc diagrama aquí a la part inferior. Però, bàsicament, que té en seva per, aquesta primera línia, vostè va a inicialitzar les seves variables. Així com hem parlat, i és igual a 0 o I és igual a 10. El que vostè necessita que variable per a ser És serà inicialitzat allà, declarat i inicialitzat a algun valor. Així que tenim una mica de condició que va estar comprovant la nostra variables en contra d'alguna cosa. Així que en el cas que el cas típic en què potser vostè vol aquesta secció de codi per executar cinc vegades. Així tindríem int i és igual a 0, i vull que sigui quan i és menor que 5. Així que la condició és només va a comprovar que cada vegada. Si aquesta condició s'avalua a cert, és va a executar el codi, que és exactament el que aquest petit diagrama està mostrant. I així ho executa. S'actualitza una variable, que és el que veiem en l'última part de la nostra per inicialització de bucle allà. Així que seguiré fent això fins que no es compleix aquesta condició, i després sortirà el bucle i continuar seguir endavant amb la resta del seu programa. Tothom bé allà? Refredar. Així que aquí està un exemple, molt similar a alguna cosa que acabo de parlar. Així que només volem imprimir això és CS50 10 vegades. Així que ja veus que aquí tenim nostra per, a continuació, ens inicialitzar la variable i sigui igual a 0. La nostra condició és la comprovació que és menys de 10. Així que avaluar veritable quan per primera vegada començar, i després actualitza la nostra variable cada vegada que s'executa realment i imprimeix aquest és CS50. I acabarà després de 10 vegades. Refredar. Així, mentre que els bucles són fins a la pròxima. I com es pot veure aquí, només tenim alguns, mentre que aquesta pregunta condición--? AUDIÈNCIA: Com puc saltar en realitat no un nombre, però dos nombres [inaudible] i plus plus plus? ALLISON: tant el dubte era com pot vostè actualitzar la variable de més d'un a la vegada. Així que a més Plus actualització en un cada vegada. Si li agradaria actualitzar-lo per 2, vostè podria fer més i és igual a 2. ROB BOWDEN: Has vist més iguals en conferència encara? AUDIÈNCIA: [inaudible]. ALLISON: És efectivament el el mateix que i és igual i més 2. Així que prendrà i actualitzar per dos cada vegada. Plus iguals és només una mica que anomenem sucre sintàctica. ROB BOWDEN: Sí, els que hi ha per gairebé tots els operadors aritmètics. Vegades, així que potser a es duplicaria el nombre. j bretxa és igual a 3 és el mateix com j és igual a j dividit per 3. ALLISON: o menys és igual a 2 ho faria i disminuir per dos cada vegada. ROB BOWDEN: Fins i tot iguals mod. Vostè no ha vist els operadors bit a bit, però és igual d'intercalació i signe igual, tots aquells existeixen. ALLISON: Així que un munt de vegades, sobretot amb el seu primer parell de conjunts de P, vostè estarà probablement incrementant per un, així que a més de més, j plus plus són totes les coses que vas ser típicament usant. Però aquesta condició actualització totalment sota el seu control. Pot actualitzar-lo per qualsevol increments o de qualsevol manera que vostè decideix. Potser fins i tot vol que sigui un nombre aleatori de vegades. Però sí, hi ha un munt de coses que vostè pot fer amb això. No està limitat a i plus plus. ROB BOWDEN: Perquè ho sap que hi ha, sinó que també existeix en una altra forma, plus plus i. Així que si alguna vegada la recerca en línia i passar a veure plus plus i, més o menys significa el mateix. ALLISON: Cool. Bona? Impressionant. Així, mentre que els bucles. Molt similar. Vostè té alguna condició. El més important a notar aquí és en lloc de tenir tres parts diferents configurar, tenim un. Només tenim alguna condició que està sent comprovat. I de la mateixa manera, sempre que que la condició s'avalua com a veritable, el codi es va a executar. I si és fals, acabarà, moure en la següent part del seu programa. Així que això és una espècie del que és com-- un bon exemple de comprovació per alguna condició normal? GABRIEL: Si bé és cert. ALLISON: Vostè podria fer mentre cert. Bé, 1 és igual a 1. ROB BOWDEN: Vostè pot fer Rato-- només en lloc d'utilitzar un bucle for, sempre es pot codificar una de bucle en un bucle while, així que o més gran que 0 mentre i menys de 10. ALLISON: Awesome. I llavors hem fer bucles while, que és ideal per a la validació de l'usuari, on vol aconseguir una mica de l'usuari, veure si és vàlida, i després continuar a partir d'aquí. Així que una de les coses que ha de saber és amb un fer, mentre que és que es va a executar, i llavors tornar a executar si es compleix aquesta condició. Així que, probablement, la millor manera de fer això és només per veure un exemple aquí. Així com acabo d'esmentar, l'usuari validació és realment useful-- o fer mentre que són realment útil amb la validació de l'usuari. Així que això és només va per tornar a provocar algun usuari fins que entren un nombre positiu, el que podria ser útil per al conjunt de P aquesta setmana. I així, en aquest cas, quan inicialment executar aquest programa, que va a imprimir introdueixi un nombre positiu. Es va a aconseguir una mica de l'entrada de l'usuari, i després es va a comprovar que l'entrada en contra de la condició que ha establert per a això. Així que en aquest cas es va a comprovar. Es dirà, OK, és la nostra entrada negativa, o és 0 o negatiu, que seria vàlida. Així que llavors seria re-indicador. Pregunta? AUDIÈNCIA: És aquest el mateix llavors com un while si vostè acaba de copiar aquest codi i el va posar [inaudible] while? ALLISON: tant el dubte era el faria aquest sigui el mateix que només un mentre bucle si haguéssim de només copiar el bucle while anteriorment. Així que en aquest cas, el bucle while és va a comprovar la condició primera. Així que en aquest cas, si ho intentem escriure com només un bucle while, diria mentre d'entrada és menor que un. Però no tenim una entrada per a ella. AUDIÈNCIA: Si [inaudible] mentre bucle que inclou aquest codi, però llavors vostè fet front el codi per sobre de la bucle while també. Vostè acaba de tenir aquest codi [Inaudible] while. ALLISON: Seria el mateix, sí. Així que vostè podria write-- en lloc de tenir un sí fer--. GABRIEL: Però això és més elegant. ALLISON: Sí, això és més elegant. Vostè pot entrar en el disseny i tot això, però sí, es pot fer totalment això. Alguna altra pregunta? Acceptar, fresc. Així que hem parlat molt sobre les condicions amb tots aquests llaços que tenim, pel que en realitat estem ficant les condicions en les expressions booleanes. Una vegada més, utilitza aquests productes en C, de manera que només tipus de transició més de la interfície gràfica per realment codificació. Refredar, de manera que un gran, si. Bàsicament, només ens permet introduir una mica de lògica en el nostre programa i verificació condicions sys. Així que en aquest cas, està bé, n és més gran que 0? Sí que ho és, pel que pot executar aquest. És només la comprovació alguns condició que tens vaig posar, que crec que tots estem còmode amb la comprovació de les condicions. Refredar. Així que si la resta és el seu altre, es pot dir bé, si això és cert, fer això el primer. En cas contrari, et vull per defecte i fer una altra cosa. De la mateixa manera que en aquest cas, o bé escollir un nombre positiu o un nombre negatiu. Vostè només té dues opcions. El necessita per executar independentment del que els seus entrades de l'usuari. Així que es pot dir així, és més gran que 0? Refredar. Imprimir un nombre positiu. Si no ho és, imprimir un negatiu. Tothom bé? I després una cosa és reconèixer és que si es compleix la condició si, l'altre serà mai també executar. Només un d'ells ho farà executar alhora. Així que és una solució de compromís. No arribar a tenir tant. O tens la primera condició. O tens el si o l'altra, no totes dues. Que després pot fer que les coses encara més complicat, perquè es pot fer si, en cas contrari, i després més. Així que en aquest cas, tenir tres condicions. I de nou, només un d'ells és va a acabar sent executat. Així que pot ser que es pregunti bé, què passa si vostè tenir alguna cosa pot satisfer dos d'ells. Potser el que vostè està introduint compleix tant la condició per si i l'altre si. L'única cosa que va a executar ALLISON: Tan aviat com es troba alguna cosa que compleix amb la condició que avalua a veritable, això és el que que va a córrer i res més. Així que si vostè tenia és aquest número entre 0 i 5 per al primer d'ells, o és aquest número entre 3 i 5 per a l'altre si part, i que d'entrada la number-- Vaig dir 0 i 5 i- abril. Es va a colpejar a la primera. Va a dir OK, això nombre està comprès entre 0 i 5. Executar i se'n van. Mai arribarà a aquesta segona opció. Fresc? Impressionant. Acceptar també tenim sentències switch si Per obtenir encara més-- o ho sento, interruptor està al costat. M'estic avançant a mi mateix aquí. Una vegada més, si múltiples blocs on com acabo de dir és pel que fa a trobar una condició que ha conegut i un if-else if-else, deixa. Si vostè necessita per comprovar múltiples coses, ets voldrà usar això perquè comprovarà cada vegada que aquí. Així que això s'executarà a través de i si que és més gran que o igual a 90, que voleu imprimir això. I s'executarà a través de i comprovar tots i cadascun d'ells. AUDIÈNCIA: Així que això seria més defectuós que [inaudible]. Podria ser això com [inaudible]? ALLISON: La pregunta es seria aquest buggy o fa això el que vols. Realment depèn del que que vol del seu programa. AUDIÈNCIA: Em refereixo a com si poses 90 a. ALLISON: Si poses 90-- AUDIÈNCIA: [inaudible]. GABRIEL: aneu a aconseguir dues coses. ALLISON: aneu a aconseguir dues coses. Sí, dos. ROB BOWDEN: Dos? ALLISON: No. ROB BOWDEN: Quatre. Si poses 90, que va a dir vostè va obtenir una A, que va rebre una B, que va rebre una C, tens una D. AUDIÈNCIA: [inaudible]. ALLISON: Dret. Així que depèn del que desitjar de vostè programa. A vegades és necessari comprovar diverses coses. Vostè aconseguirà molt més profund en el que el bon disseny és la marxa cap endavant. L'important a es donen compte és que aquest comprovarà les quatre condicions aquí. Mentre que si es tractés d'un if-else if-else si una altra cosa, seria colpejar aquest primer cas, seria imprimir tens una A i per fer. ROB BOWDEN: Fins i tot si decidit a canviar això a si i major o igual a 90, si i major o igual a 80, i menor o igual a 89, si n més gran que o igual a 70, i n menor que o igual a 79, pel que serà correcta. Això va a fer el que volem, però encara comprova cada això. Així que mentre que en el primer escenari, si introduir 90 amb només si els altres si els altres si, i entrem en el 90, a continuació, que va a corregir. Es comprovarà la primera un, impressió que va rebre una A, ometre tot, perquè ja trobat un que funcioni. Tots els casos són mútuament excloents sobre la base de si els altres si la resta si. Així que va a executar el en primer lloc si, a continuació, es fa. Es va a anar fins al final. Mentre que si canviem que això és el que jo era dir amb menys d'o igual a 89. Es va a revisar la primera. Es va a imprimir. Es va a verificar el segon. No voleu imprimir. Comprovi el tercer. No voleu imprimir. Comprovi el quart. Ara voleu imprimir. Així que en aquest cas, la persona si de versió, ja que aquests casos són mútuament excloents, és un millor ús si una altra cosa si la resta si, perquè això tindrà un menor nombre de controls de les condicions d'aquesta versió. ALLISON: Awesome. Així que una altra cosa que puguem fer és sentències switch. Bàsicament una sentència switch presa en alguna variable, en aquest cas és n, i determina que el cas d'executar. Així que aquest és també un on els seus casos ha de ser una mena de mútuament excloents. Així doncs, en aquest cas, si nosaltres tenim un un, és coincidirà amb el que variable-- qualsevol que sigui el valor de n és un d'aquests casos, per la qual cosa 1, 2, o 3, i imprimir la línia corresponent. I llavors, si vostè nota aquí, també tenim un defecte, que es pot pensar en com de la seva persona. Així que si has de triar qualsevol altre nombre més de 1, 2, i 3 en aquest cas que només voleu imprimir vàlid. Decidir quan utilitzar IFS front si vigilés davant els interruptors que està passant de ser alguna cosa que vostès ho farà Vegi el disseny intel·ligent com comenci a escriure programes més complicats, i no hi ha regles dures i ràpides de quan usar-los. Realment depèn del seu context. ROB BOWDEN: I de la mateixa per llençar-lo per aquí ja que és la secció més còmode. Interruptors, tendeixen a ser: el que està limitat en el nombre de maneres en què vostè pot usar-los, perquè passaria si, la condició pot ser bastant qualsevol cosa que vulguis. Amb els commutadors dels casos han de ser nombres, o tècnicament poden ser caràcters, però caràcters, com veurem, són nombres només. Així que han de ser nombres, però els interruptors són realment més eficient que si més si la resta si, perquè fins i tot prenent l'exemple abans-- bé, l'exemple de qualitat sembla bona. Bé diguem que aquí, en comptes fem això com si una altra persona si la resta si escenari. Així que si n és igual a és igual a 1, imprimir vostè va escollir un nombre baix. Si un altre si n és igual és igual a 2, que va triar un nombre mitjà. Perquè si els iguals és igual a 3, alta. La resta no és vàlid. Així que diguem que era el nostre escenari. Així que diguem que entrem 4, de manera que esperem no vàlid. La manera que si una altra cosa si la resta si l'enfocament es va a treballar és comprova la primera condició. No està satisfet. Així, comprovem la segona condició. No està satisfet. Verifiqui la tercera condició. No satisfet. Així que ens anem a l'altra persona i imprimim vàlid. La forma en què les obres de l'interruptor és que compila baix en el que anem per trucar a una taula de salts. La idea de ser principal que quan entres en 4, immediatament es pot anar a l'opció per defecte. No és necessari per comprovar el matí em cas 1? Nop no és això. Cas 2? Nop. Cas 3? Nop. Defecte. OK, això ha d'estar on volen, i després executar aquest. No, immediatament salta a la predeterminada. O entro 2, és immediatament va a anar a la 2 sense necessitat de passar pel cas 1. Així que d'aquesta manera, realista avui en dia que és no és que gran part d'un augment de l'eficiència. En general, els ordinadors són bastant ràpid, i això no és tan gran. Però és el cas que interruptors són més ràpids. Si vostè està realment tractant per optimitzar, utilitzar un interruptor. ALLISON: Cool. I després tenim operador ternari. Així que sé que he esmentat abans la paraula sucre sintàctica. Així que és només les coses que fan el seu codi molt més concisa. Així que aquest és un d'aquests casos. Així operador ternari és signe d'interrogació de còlon, com ho veiem en la cadena de línia s és igual a n major que 100 signe d'interrogació sota alta còlon. Així que, bàsicament, com funciona això és que és el n major que 100 és una condició. Així que crec que pot tenir sentit. És com fer una pregunta. Està dient oh, és n més gran que 100. Qui sap? I si s'avalua com cert, que va a donar-li la primera cosa que és que apareix allà, que és alta. En cas contrari, va a donar-li de baixa. Així que això és només una veritat simple i manera eficaç de fer com si una cosa. Això és tot el que és això. I si haguéssim d'escriure això com si la resta condicional, el que seria si n és més gran de 100, tornar alta. Si no, tornar sota. Això és només una molt més manera concisa d'escriure. ROB BOWDEN: Així que aquest exemple particular està sempre estàs fent alguna cosa així, aquest és el patró on utilitzo ternari amb molta freqüència. Així que no hem parlat d'abast, però, però Odi veure punt i coma cadena s. Si n més gran que 100, s és igual d'alta. Si no, és igual a s baix. Així que aquest patró, aquestes cinc línies de codi, literalment, 100% de les vegades pot ser transferit al hi era amb un ternari. Així que el ternari, una línia de codi. El cas més, 05:00. Això és un exemple va assenyalar fos cada vegada. Això faria un gran lloc per a un operador ternari. És tan net. Però la gent tendeix a no utilitzar-lo. ALLISON: Agafeu les escombraries Gabe. GABRIEL: Així que ara vostès tot après a la conferència d'aquesta setmana que tot en una ordinador és binària, oi? De la mateixa manera que els llums d'aquí. Vostè pot ser encesa i apagada. I per tot el que em refereixo literalment tot. Alguns nombres i caràcters i cadenes, i fins i tot el codi que escrius quan que es compila a màquina codi i coses per l'estil, de manera que tot es redueix a 0 i d'1 '. I així, quan ens enfrontem amb nombres enters, els quals és una cosa que és tècnicament molt simple, hem de ser capaços de fer coses com l'addició d'ells, que és probablement una de les coses més simples vostè pot fer per a dos sencers, no? Així que la suma i la resta funciona igual com funciona en notació decimal, excepte aquí és binària, oi? Així que és en base dos. Així que afegir 1 més 1. Això li dóna a 0 i 1 es trasllada. I així seguir fent això, així que ara ve la pregunta més interessant. Sabem com representar tot nombres enters positius a l'ordinador, però farem aquest exercici. Feu de compte que vostès estan tots en l'any 1960 o una mica tractant de crear un ordinador, i vostè ha de venir de una manera d'emmagatzemar menys 1, per exemple, o menys qualsevol nombre enter per al cas. Com fer això? Alguna idea? Simplement llençar res a mi. Sí? AUDIÈNCIA: [inaudible] designar un especial si el seu [inaudible]. GABRIEL: Vostè pot designar un mica especial, que serà 0 o 1. Diguem que un si és positiu i 0 si és negatiu. I després la resta de la broca és només per emmagatzemar el nombre. Refredar. Així que això és una molt bona idea. Tenim, no ho sé, 200. I si el primer bit és encès, llavors és més 200. Si està apagada, és menys de 200. Refredar. Només hi ha una petita problema amb això, que és si tractem de resumir les coses. Així que imaginin que tenim aquí 11111, i estem sumant això amb 00,100 el que sigui. Si els dos són positius, això està bé. Però llavors, si un ells és negatiu, igual que diguem que aquesta poc aquí és la que és responsable para-- Vaig a fer una separate-- així que aquest significa que aquest nombre aquí és positiu. Això significa que aquest nombre aquí és negativa, no? Però després, quan estigui va a resumir ells, necessitarà una sentència if dient oh si això és 0, llavors la meva suma serà alguna cosa diferent, no? Així que hi ha una mica més intel ligent manera de fer-ho que, que es diu complement a dos. Així que, bàsicament, el que fem és definim almenys 1 a ser la cosa que si sumem a 1 ens dóna 0. Permetin-me repetir això. Així que diguem que aquesta aquí és 1. Què és el que naturalment en nombres enters positius afegit al fet que ens dóna 0? Què passa si intentem afegir a aquest número? Anem a tener-- bé, així que anem a afegir. Tindrem 1 més 1 és 0, i després es transporta. I després anem a obtenir 0 de nou. M'estic confós. I vostè va a obtenir 0 i 0 i 0 i 0 i 0 i 0. Molta de 0. Per últim, no estem serà capaç de portar a la tornada, perquè diguem que només estem tractant amb un byte, per la qual cosa només 8 bits. Així que el que l'equip fa per defecte és simplement s'oblida que [inaudible], D'acord? Així que això és el que es diu el complement a dos. Simplement definim menys 1 a ser el cosa aquí que si afegeix que a 1 li donaria 0. I això és bastant cool perquè no ho fem realment necessitarà tard per implementar un tipus diferent de summa depenent de si això és una negatiu o un nombre positiu. Això té sentit? Així que una cosa que fem aquí el cap de convertir entre un positiu i un negatiu sencer està llavors voltejar tot, i després afegim 1 a aquest nombre. Si tracta de fer-ho vostè mateix en un tros de paper, vas a veure que això té sentit. Però si prenc aquest número aquí, això és cinc. Així que si li dono la volta tot aquí, així que 1, 1, 1, 1, 1. Voltejar, flip, flip. I després afegeixo 1 a la mateixa. Vaig a tenir exactament almenys 5. D'acord? Aquest tipus de sentit perquè si intenta resumir això amb el número que teníem abans, que era-- anem a voltejar de nou. Va ser 101 i un munt de de 0. Si voleu afegir aquests dos números junts, vostè va a tenir exactament 0. Okay. Alguna pregunta? AUDIÈNCIA: [inaudible] GABRIEL: Què vols dir? AUDIÈNCIA: Negatiu a positiu [inaudible]. GABRIEL: No, li dóna la volta i s'agrega 1 sempre. Sí. Acceptar, de manera que els personatges també codificats binaris. Tenim taula ASCII, com vostè també va veure en la conferència, no? Així que és bàsicament un mapatge de les coses. I aquí no puc emfatitzar prou que per a un ordinador, a i 65 són literalment la mateixa cosa. Així que si escric alguna cosa com Char c és igual a una, jo podria a la vegada acaba d'escriure 65 aquí, i seria exactament el mateix, d'acord? No hi ha cap diferència. En general, tendim a posar personatges de variables de tipus. Char, no perquè són essencialment fet per això, sinó perquè de convenció humana. Però només es pot tractar amb nombres enters en lloc de les variables de tipus char, i se li multa. L'única diferència real entre un char c i un int i és que un int té quatre bytes més sistemes, mentre que un char té un byte. Són essencialment el el mateix en termes de dades. Així que el que va a imprimir en aquesta llista? Aquí estem imprimint un dígit usant printf amb un més 1, i igual que els nombres enters, caràcters es poden resumir, per la qual personatges també es poden sumar. Així que això és exactament 65. Així que serà 66, i aquí tenim 65 més poc un menys gran A, que serà, no ho sé. Però serà exactament la bretxa entre les lletres majúscules i les lletres més petites i, per anem a obtenir una petita, oi? Sí. Així que això va a imprimir un personatge que és exactament aquest. Bona? Alguna pregunta? Aquí tenim un munt de diferents tipus de variables numèriques. Ja parlem de int. Float és només una manera A-- això és realment divertit, perquè quan vaig saber per primera vegada per a programar en el seu dia amb Python, el primer programa que he tractat d'escriure, em vaig adonar que hi havia un tipus anomenat i un tipus anomenat flotador. I el flotador era per a tots els nombres reals. Llavors em va preguntar per què hauria Jo mai faig servir un int llavors? Perquè si puc usar tot nombres reals amb un flotador, Només vull deixar d'usar sencers, no? A causa que els nombres reals són de la mateixa manera que més genèric. Resulta que això és no és el cas en els ordinadors perquè són essencialment diferents coses. Així que els nombres enters i les carrosses, la operacions que facis amb ells són essencialment diferent perquè de la forma en què s'emmagatzemen, d'acord? Anem a parlar una mica poc més sobre això en un segon. Així que doble és només un flotador més gran. En general, en la majoria dels sistemes, un flotador és de quatre bytes, com un int. I una doble és de vuit bytes. Un llarg, llarg és en realitat només un símbol d'annexar a un tipus com int. Vostè diu int llarg termini com aquest. Llarg long int x perquè sigui més llarg. Així que en la majoria dels sistemes, que donarà 8 bytes en lloc dels quatre habituals. I en realitat es pot caure el en, de manera que només es pot dir molt, molt, i que treballa massa, d'acord? També pot fer altres coses com int sense signe, o de nou just sense signar també funcionaria. I això faria que x sigui una variable com tot el que és positiu, així que realment no es pot tenir efectes negatius nombres en la forma en què vam veure aquí. Així doncs, seguint meravellós punt flotant i precisió. Aquesta és una de les raons per les quals voler utilitzar sencers en lloc de carrosses, perquè ints són 100% precises, no? És exactament aquest nombre. Per als punts flotants, si dir la resposta és igual a 1 sobre 10-- Resulta que tinc aquesta exacta programa aquí, float.c. Que imprimeix a 20 xifres decimals. 1 dividit per 10, i que en general és de 0,1, oi? Però aquí si fem flotador i després ho executem, veiem que no és exactament 0,1. És una cosa 0,149. I per què és això? Perquè no es pot realment representar cada únic nombre real possible en la memòria perquè hi ha uncountably molts d'ells. Així que estem tècnicament només és capaç de representar una quantitat finita d'ells amb una quantitat finita de dades. Però és molt interessant. Ara bé, això ens porta a la qüestió de com ho faria anar sobre el que representa això amb els bits, no? Llavors, ¿com s'emmagatzemen els flotadors? Amb nombres enters que va ser fàcil. Però amb flotadors que desitges per maximitzar el rang, i vol ser capaç de representar enormes nombres i nombres molt petits com 0.000001 a la vegada. Així que de nou, el mateix joc. Algú té alguna idea del que vam poder anar sobre la representació de flotador a la memòria? Simplement llençar res. Sí, si us plau. AUDIÈNCIA: [inaudible] com si es tractava de dos sencers i un sent la [inaudible] i un sol ésser sobretot després del punt decimal. GABRIEL: OK, fresc. Així que dos enters diferents. Vostè pot tenir les 12.45, pel que és 12 i 45. Niça. Què ERO que dirà? La mateixa cosa? Sí? AUDIÈNCIA: notació [inaudible] on se separa la base. GABRIEL: La notació científica, sí que és en general el que passa. Així que això és el que s'anomena la mantissa. Això és el que és en realitat el nombre, i després l'exponent és just on la coma és, oi? Així que això serà una cosa de la forma 1, 2, 3, 4, 5 vegades 10 almenys 4. M'acabo de donar compte que-- Sí, exactament. I llavors aquest 10 a la menys 4 és definirà on la coma és, ¿d'acord? Al Brasil s'utilitza coma. Aquí vostès utilitzen un punt. Així un punt. I això és genial, perquè llavors vostè pot centrarà molts dels seus trossos en aquest noi aquí, a la mantissa, i llavors això és serà la seva precisió real. I vostè pot fer això ja sigui en decimal o en el sistema basat en binari. Hi ha diferents formes d'implementar això. Preguntes? Sí? AUDIÈNCIA: Quants llocs després del punt decimal [inaudible]? GABRIEL: Aquesta és una pregunta complicada, perquè mai és realment 100% precisa, perquè com vostè veu aquí, per alguns números és 100% precisa. Crec que si posem 0.5 aquí, que serà 100% precís. Serà 0,500000. Així que en aquest cas, és perfecte. Però en altres casos, és molt menys perfecta. En la meva experiència, de la mateixa manera que un màxim de quatre, a cinc xifres decimals és bastant precís. Si utilitzeu un doble, que va a ser molt més precís que això, d'acord? ROB BOWDEN: Així que només per llançar- algun context més en carrosses, No recordo com el 100% especificació de carrosses en realitat funciona, però ho faig sempre recordi que carrosses comença a rebre desordenat. Així que la idea és que quan vostè aconsegueix realment, realment grans nombres o molt, molt nombres petits, que comencen cada vegada pitjor en la diferenciació entre dos flotadors propers. Llavors, ¿com m'agrada pensar és en amb punt flotant imprecisió, hi ha dos flotadors que si intento especificar en C, malgrat el fet que són diferents els números, que seran interpretat com el mateix nombre, perquè no podem emmagatzemar-los de manera diferent. Hem d'utilitzar els mateixos bits. I així, quan arribem a molt, molt gran nombre, parlant com 10 a la 300 o alguna cosa, és en aquest punt que 10 a la 300 o 5 vegades 10 a la 300 no pot ser diferenciada de 7 vegades 10 a la 300. Així que això és una diferència bastant gran entre els dos nombres. Però després, quan et poses a les coses normals de rang, que tendeixen a ser bastant bo en la diferenciació. I després, quan et poses realment petit, vostè també obté molt malament de nou. Així que, com un munt de 0.0000, que es posa bastant malament. GABRIEL: Sí, de manera que una nota ràpida. Mai faci això. Mai tracti de comparar flotadors usant iguals iguals, perquè fins i tot si són gairebé el mateix, gairebé el mateix no és el mateix. Així que el que sol fer és restar ells, prenen el valor absolut que, i veure si això és menor que 0,0001 o alguna cosa així, d'acord? I fresc. Sé que molta gent té alguns antecedents en Java, especialment els que van fer Ciències de la computació AP, oi? I Java és un llenguatge que majoritàriament sobre la base de C, té molt grans diferències d'un parell. Però per als bucles, i IFS, i coses per l'estil que, són tots la mateixa sintaxi. Tinc un parell de programes aquí per mostrar això. Així, per exemple, un món hola simple. Aquesta és hola món en C, que li nois són sens dubte familiaritzat amb, i això i això és en Java. Així que en Java tenim aquest public class, hola món, i public void estàtica args principal, i de cadena. Els arguments de cadena van a aparèixer en C molt poc. Però no anem a anar-hi encara. En aquest moment tenim buit aquí, el que significa que la principal no es pren cap argument. I llavors tenim System.out.println, el i això és mena d'equivalent de printf. Aquí a realitat no necessitem la barra invertida n perquè ln impressió ho fa per vostè. S'afegeix la barra invertida n en l'extrem de la línia. Però si vostè entra en una mena de per, vostè pot veure que són més o menys la mateixa cosa. Així inicialització, i el condició, i l'actualització és-- em vaig perdre un espai aquí-- són més o menys la mateixa cosa, a excepció de Java té com uns pocs més coses d'alt nivell. Aquí podem fer més I i Java automàticament fer d'aquest i aquí, que és un nombre enter, en una cadena, i després afegir el dues cadenes juntes. Aquí a C que necessitem fer el &% d. La línia d'aquí, el per es veu exactament el mateix. I si ens fixem en si, les FI També veurà exactament el mateix, oi? Així que les grans diferències reals són en les coses que vostè veu aquí. Estàtica Pública, nul·la, i llavors la classe pública si. Així que Java té el que és anomenat una màquina virtual. I es basa en gran mesura en el que es diu la programació orientada a objectes, que és un molt, molt comú paradigma de la programació d'avui en dia. I aquesta cosa de classe és el que es veu, una mica de l'orientació a objectes, és que vostè crea una classe i després pot derivar objectes d'aquesta classe. No anem a parlar massa molt d'això en CS50, però això és sens dubte alguna cosa realment fresc, especialment si vols anar a desenvolupament web més sofisticat al final del curs, com presentar el seu projecte final i alguns marcs bonics i aquestes coses. Així que, bàsicament, la idea és que vostè no vull tornar a implementar alguna cosa, per la qual cosa es crea una cosa que és molt genèrica, com la forma, i després es crea diferents formes de la mateixa, i després de cada un aquestes formes, es creen algunes formes més específiques de cada tres dimensions o alguna cosa per l'estil. I tenen aquesta jerarquia que heretar dels altres, de manera que totes les funcions i totes les variables que la gran forma d'aquí té, tots ells tindran, i tots aquests són tindrà, i així successivament i així successivament. Així que aquesta és la idea bàsica. C no ha de, però C ++ no tenir aquest tipus de característica. I Java està fortament influenciat per l'orientació a objectes, així que per això es veu classe aquí tot el temps. I l'altra cosa és aquesta màquina virtual de Java. Així que això, crec, és una idea molt intel·ligent. Així que el que la gent que java inventat va fer és que no volen compilar el codi dues vegades si haguessin de executar en un equip amb Windows, o un Mac, o Linux, així que el que fan és que, literalment, s'executen alguna cosa així com l'aparell, però realment no veu que això passi. Així que s'executen en una màquina virtual a l'interior del seu equip, que és, bàsicament, com un mini sistema operatiu. I això de funcionament El propòsit del sistema a la vida és només per a executar el que s'anomena codi de bytes. Així que en lloc d'en C, la forma en què ho faria compilar això és fer que si, a continuació, executeu ./if. Em vaig oblidar de la barra invertida a. En Java, que faria primer Java C a compilar, if.c. No és punt de Java C .. I després has de córrer no ./. Vostè rep aquest nou arxiu if.class, però realment no es pot executar if.class ara només com ho vam fer abans. Això no és un executable. Has de córrer. Vostè ha de alimentar a un programa anomenat Java, i aquest programa és la màquina virtual, i després ho fas if.class, o si. Sí. I llavors funciona. Acceptar així que això és una espècie de la màquina virtual succeint. C no ha de, per la qual cosa si jo fos a posar aquest programa en una màquina Windows, que no funcionaria en C. En Java el fa. Preguntes? Refredar. Això si per super secció per avui.