Aloittaminen
CS50 IDE on verkkopohjainen ”integroitu kehitysympäristö”, jonka avulla voit ohjelmoida ”pilvessä” asentamatta mitään ohjelmistoja paikallisesti. Itse asiassa CS50 IDE tarjoaa sinulle ikioman ”työtilan” (eli tallennustilan), johon voit tallentaa omia tiedostojasi ja kansioitasi (eli hakemistojasi).
Kirjautuminen sisään
Käy osoitteessa ide.cs50.io ja napsauta ”Kirjaudu sisään GitHubilla” päästäksesi CS50 IDE:hen. Kun IDE latautuu, sinun pitäisi nähdä, että (oletusarvoisesti) se on jaettu kolmeen osaan. CS50 IDE:n yläosassa on ”tekstieditori”, johon kirjoitat kaikki ohjelmasi. Alareunassa on ”terminaali-ikkuna” (oletusarvoisesti vaaleansininen), komentorivikäyttöliittymä (CLI), jonka avulla voit tutkia työtilasi tiedostoja ja hakemistoja, kääntää koodia, ajaa ohjelmia ja jopa asentaa uusia ohjelmia. Ja vasemmalla on ”tiedostoselain”, joka näyttää kaikki IDE:ssä tällä hetkellä olevat tiedostot ja kansiot.
Aloita klikkaamalla terminaali-ikkunan sisällä. Sinun pitäisi huomata, että sen ”kehote” muistuttaa alla olevaa.
~/ $
Klikkaa tuon terminaali-ikkunan sisällä ja kirjoita sitten
mkdir ~/pset1/
seuraavana Enter-näppäinyhdistelmänä tehdäksesi hakemiston (eli kansion) nimeltä pset1
kotihakemistoosi. Varo, ettet unohda välilyöntiä mkdir
:n ja ~/pset1
:n välissä tai mitään muutakaan merkkiä! Muista, että ~
tarkoittaa kotihakemistoasi ja ~/pset1
tarkoittaa pset1
-nimistä hakemistoa ~
:n sisällä.
Jatkossa komennon suorittaminen (eli ajaminen) tarkoittaa sen kirjoittamista terminaali-ikkunaan ja Enter-näppäintä. Komennot ovat ”case-sensitive”, joten muista olla kirjoittamatta isoja kirjaimia, kun tarkoitat pieniä kirjaimia, tai päinvastoin.
Toteuta nyt
cd ~/pset1/
siirtyäksesi (eli avataksesi) kyseiseen hakemistoon. Kehotteesi pitäisi nyt muistuttaa alla olevaa.
~/pset1/ $
Jos ei, jäljitä askeleesi taaksepäin ja katso, pystytkö päättelemään, missä menit pieleen.
Now execute
mkdir ~/pset1/hello
luodaksesi uuden hakemiston nimeltä hello
hakemistosi pset1
sisälle. Suorita sitten execute
cd ~/pset1/hello
siirtääksesi itsesi tuohon hakemistoon.
Kirjoitetaanko ensimmäinen ohjelmasi? Valitse Tiedosto-valikosta Uusi tiedosto ja tallenna se (kuten Tiedosto-valikon Tallenna-vaihtoehdon kautta) nimellä hello.c
hakemistosi ~/pset1/hello
sisällä. Jatka ensimmäisen ohjelmasi kirjoittamista kirjoittamalla tiedostoon juuri nämä rivit:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Huomaa, että CS50 IDE lisää ”syntaksin korostuksen” (eli värin) kirjoittaessasi, vaikka CS50 IDE:n värivalinta saattaa poiketa tämän ongelmasarjan värivalinnasta. Näitä värejä ei itse asiassa tallenneta itse tiedostoon; CS50 IDE vain lisää ne, jotta tietty syntaksi erottuu. Jos et olisi alusta alkaen tallentanut tiedostoa nimellä hello.c
, CS50 IDE ei tietäisi (tiedostonimen laajennuksen perusteella), että kirjoitat C-koodia, jolloin nuo värit puuttuisivat.
Tiedostojen luettelointi
Seuraavaksi suorita terminaali-ikkunassasi heti kehotteen (~/pset1/hello/ $
) oikealla puolella komento
ls
>
Siitä pitäisi näkyä vain hello.c
? Se johtuu siitä, että olet juuri listannut hello
-kansiossa olevat tiedostot. Suoritit (eli ajoit) komennon ls
, joka on lyhenne sanoista ”list”. (Se on niin usein käytetty komento, että sen laatijat kutsuivat sitä vain ls
säästääkseen näppäinpainalluksia.) Onko mitään järkeä?
Ohjelmien kääntäminen
Nyt ennen kuin voimme suorittaa hello.c
-ohjelman, muistakaa, että meidän on käännettävä se kääntäjällä (esim. clang
), joka kääntää sen lähdekoodista konekoodiksi (eli nolliksi ja ykkösiksi). Suorita alla oleva komento juuri tätä varten:
clang hello.c
Ja suorita sitten tämä uudestaan:
ls
Tällä kertaa sinun pitäisi nähdä hello.c
:n lisäksi myös a.out
listattuna? (Näet saman graafisesti, jos napsautat tuota kansion kuvaketta uudelleen.) Tämä johtuu siitä, että clang
on kääntänyt hello.c
:ssä olevan lähdekoodin konekoodiksi a.out
:ssä, joka sattuu tarkoittamaan ”assembler outputia”, mutta siitä lisää toisella kertaa.
Ajoita nyt ohjelma suorittamalla alla oleva.
./a.out
Hello, maailma, todellakin!
Ohjelmien nimeäminen
Nyt, a.out
ei ole kaikkein käyttäjäystävällisin nimi ohjelmalle. Käännetään hello.c
uudelleen, tällä kertaa tallentamalla konekoodi tiedostoon, jonka nimi on osuvammin hello
. Suorita alla oleva.
clang -o hello hello.c
Varo, ettet unohda yhtään välilyöntiä siinä! Suorita sitten tämä uudelleen:
ls
Sinun pitäisi nyt nähdä paitsi hello.c
(ja a.out
aiemmasta) myös hello
listattuna? Se johtuu siitä, että -o
on komentoriviargumentti, joka tunnetaan joskus nimellä flag tai switch ja joka käskee clang
:n tulostaa (siksi o
) tiedoston nimeltä hello
. Suorita alla oleva komento kokeillaksesi juuri nimettyä ohjelmaa.
./hello
Hello taas!
Making Things Easier Easier
Muistathan, että voimme automatisoida clang
:n suoritusprosessin antamalla make
:n miettiä, miten se tehdään puolestamme, ja säästämällä siten näppäinpainalluksia. Suorita alla oleva komento kääntääksesi tämän ohjelman vielä viimeisen kerran.
make hello
Se pitäisi huomata, että make
suorittaa clang
vielä useammalla komentoriviargumentilla puolestasi? Niistäkin lisää joskus toiste!
Toteuta nyt itse ohjelma vielä viimeisen kerran suorittamalla alla oleva.
./hello
Phew!
Käyttäjäsisällön saaminen
Riittää kun sanot, että riippumatta siitä, miten käännät tai suoritat tämän ohjelman, se tulostaa aina vain hello, world
. Muokataan sitä hieman yksilöllisemmäksi, aivan kuten teimme tunnilla.
Muokkaa tätä ohjelmaa siten, että se ensin kysyy käyttäjältä hänen nimeään ja tulostaa sitten hello, so-and-so
, jossa so-and-so
on hänen todellinen nimensä.
Kuten aiemminkin, muista kääntää ohjelmasi:
make hello
Ja muista suorittaa ohjelmasi ja testata sitä muutaman kerran erilaisilla syötteillä:
./hello
Kävelyohje
Vihjeitä
Etkö muista, miten käyttäjältä kysytään nimi?
Muista, että voit käyttää get_string
seuraavasti, jolloin sen paluuarvo tallennetaan name
-nimiseen muuttujaan, jonka nimi on string
ja tyyppi string
.
string name = get_string("What is your name?\n");
Ei muisteta, miten merkkijono muotoillaan?
Ei muisteta, miten liitetään (esim, ketjuttaa) käyttäjän nimi ja tervehdys? Muista, että voit käyttää printf
:tä paitsi tulostamiseen myös merkkijonon muotoilemiseen (siksi f
printf
:ssä), a la alla oleva, jossa name
on string
.
printf("hello, %s\n", name);
Use of undeclared identifier?
Näetkö alla olevan, kenties muidenkin virheiden päällä?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Muistathan, että voidaksesi käyttää get_string
:aa, sinun on sisällytettävä cs50.h
(jossa get_string
on deklaroitu) tiedoston päälle, kuten seuraavassa:
#include <cs50.h>
Koodin testaaminen
Toteuta allaoleva arvioidaksesi koodisi oikeellisuutta check50
:aa käyttäen. Muista kuitenkin kääntää ja testata se myös itse!
check50 cs50/problems/2020/x/hello
Suorita alla oleva arvioidaksesi koodisi tyyliä käyttämällä style50
.
style50 hello.c
How to Submit
Suorita alla oleva kirjautumalla sisään GitHub-käyttäjätunnuksellasi ja salasanallasi, kun sitä pyydetään. Turvallisuuden vuoksi näet salasanassasi tähtimerkkejä (*
) varsinaisten merkkien sijasta.
submit50 cs50/problems/2020/x/hello