Tämä on CS50x

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

Jätä kommentti