Kirjoita funktio, joka tutkii, onko annettu merkkijono palindromi. Palindromi on merkkijono, joka on sama luettuna etuperin ja takaperin. Huom! välilyöntejä ei huomioida ollenkaan palindromissa. Tunnettu palindromi on 'saippuakauppias', mutta myös 'innostunut sonni' ja 'sinä ja jänis' ovat palindromeja.
Kirjoita ohjelma, joka lukee kaksi päiväystä muodossa pp.kk.vvvv ja ilmoittaa niiden välisen eron päivinä.Ota ratkaisussasi huomioon myös karkausvuodet. Vuosi on karkausvuosi, jos se on jaollinen neljällä. Kuitenkin sadalla jaollisista vuosista karkausvuosia ovat vain neljälläsadalla jaolliset vuodet.
Kirjoita ohjelma, joka tulostaa alla olevan mallin mukaisen vinoneliön. Ohjelma pyytää vinoneliön sivun pituuden käyttäjältä. Vinoneliö tehdään kirjoittamalla merkkejä x ja välilyöntejä sopiviin paikkoihin. Alla on esimerkit vinoneliöistä, joiden sivun pituudet ovat 3 ja 4.
x x xxx xxx xxxxx xxxxx xxxxx xxxxxxx xxx xxxxx x xxx xWrite a program that reads a text file and splits it into two files. The first file contains the first half of the lines, and the second file contains the remaining lines. The name of the input file should be passed as a command line parameter.
Kirjoita ohjelma, joka
laskee parametrina annetun kokonaislukutaulukon alkioiden summan
int summa(int taulukko[i],
int lkm);
Kirjoita ohjelma, joka tulostaa C-ohjelmatiedostossa olevat kommentit. Kommentti alkaa /*- osalla ja päättyy */-osaan. Kumpikaan näistä osista ei saa olla merkkijonon “..” sisällä.
Kirjoita ohjelma, joka saa komentorivin parametreina joukon lukuja, ja tulostaa luvut ja lukujen summan. Voit olettaa, että annetut parametrit ovat kokonaislukuja. Esimerkiksi
melkinkari:~$summa 1 2 5 6 -4 1 1+2+5+6+-4+1=11 melkinkari:~$
Kirjoita ohjelma, joka laskee syötteestä eripituisten sanojen frekvenssit tyyliin 'pituus 1: 30 kpl'. Sana päättyy välilyöntiin tai rivinvaihtomerkkiin. Voit olettaa, että sanat ovat korkeintaan 80 merkin mittaisia.
Kirjoita ohjelma, joka laskee vuosittaiset asuntolainan hoitokulut eli yhdistetyt lyhennys- ja korkokulut. Lainaa lyhennetään kerran vuodessa vuoden lopussa tasasummalla. Korko vaihtelee jäljellä olevan pääoman mukaan. Ohjelma pyytää käyttäjältä lainasumman, laina-ajan ja korkoprosentin sekä tulostaa lainahoitokulut eri vuosina.
Tee funktio int alkuluku( int luku), joka ilmoittaa, onko parametrina annettu luku alkuluku vai ei. Luku on alkuluku, jos se on jaollinen vain itsellään ja ykkösellä. Tee lisäksi pääohjelma, joka lukee syötteestä luvun n ja tulostaa kaikki alkuluvut väliltä 1-n käyttäen apuna funktiota alkuluku. Lukemiseen voit käyttää joko edellisen tehtävän funktiotasi tai jotain opppikirjan esimerkkifunktiota. Voit olettaa, että n on tyyppiä int.
Kirjoita funktio int itob(int n, char s[], int b), joka muuntaa luvun n merkkijonoksi kantaluvussa b. Kantaluvun b on oltava välillä 2-36. Funktio palauttaa kirjoitetun merkkijonon pituuden tai -1, jos kantaluku on laiton. Kirjoita sitten ohjelma, joka tulostaa syötteenä saadun luvun kaikissa kantaluvuissa välillä 2-36.
Kirjoita ohjelma, joka lukee kaksi päiväystä muodossa pp.kk.vvvv ja ilmoittaa niiden välisen eron päivinä. Ota ratkaisussasi huomioon myös karkausvuodet. Vuosi on karkausvuosi, jos se on jaollinen neljällä. Kuitenkin sadalla jaollisista vuosista karkausvuosia ovat vain neljälläsadalla jaolliset vuodet.
Kirjoita funktio etsi(char *s, char c), joka etsii parametrina annetun merkin ensimmäisen esiintymän annetusta merkkijonosta ja palauttaa osoittimen tähän esiintymään. Jos merkkiä ei löydy, funktio palauttaa NULLin. Älä käytä standardikirjastojen funktioita (paitsi pääohjelman syöttöön ja tulostukseen.) Käytä osoittimia merkkijonon käsittelyyn.
Kirjoita funktio sijoita(char *tulos, char *tahan, char *tasta, char c), joka sijoittaa osoittimen tasta osoittaman merkkijonon osoittimen tahan osoittamaan merkkijonoon heti merkin c ensimmäisen esiintymän jälkeen. Näin koottu merkkijono sijoitetaan osoittimen tulos osoittamaan taulukkoon. Jos merkki c ei esiinny lainkaan merkkijonossa tahan, niin merkkijono tahan kopioidaan sellaisenaan taulukkoon tulos. Käytä osoittimia merkkijonojen käsittelyyn.
Kirjoita ohjelma, jolla teet komennon nurin. Komento nurin kääntää sille argumentteina annetut merkkijonot päinvastaiseen järjestykseen. Esimerkiksi nurin tämä kääntyy tulostaa ämät yytnääk. Ps. Suoritettavan ohjelman nimeksi saat nurin kääntämällä sen optiolla -o nurin: gcc -Wall -ansi -o nurin.
Kirjoita funktio, joka laskee kahden 10*10 -matriisin summan. Matriisit lasketaan yhteen summaamalla vastinalkiot keskenään. Palauta tulos muuttujaparametrissa. Kirjoita myös pääohjelma, jolla testaat funktiotasi. 10*10 -matriisi on kaksiulotteinen 10*10 -taulukko.
Opiskelija A on kirjoittanut tekstitiedoston käyttämällä vain isoja kirjaimia. Hän haluaa muuttaa tiedostonsa paremman näköiseksi siten, että vain kunkin virkkeen ensimmäinen kirjain on iso ja muut kirjaimet ovat pieniä. Kirjoita hänen avukseen ohjelma, joka kopioi s tandardisyöttövirrasta merkit standarditulosvirtaan siten, että se muuttaa isot kirjaimet pieniksi virkkeiden 1. kirjaimia lukuunottamatta. Ohjelma tunnistaa virkkeen 1. kirjaimen siitä, että sitä ennen välilyöntiä tai rivinvaihtoa edeltävä merkki on joko piste, kysymysmerkki tai huutomerkki. Muut erikoistapaukset voit jättää käsin muutettavaksi. Ohjelmasi ei tarvitse muuttaa skandinaavisia aakkosia (å, ä , ö).
Tee struktuuri ajan (tunti, minuutti) tallentamiseen. Tee tätä hyväksikäyttäen ohjelma, joka kysyy käyttäjältä kaksi aikaa (tunti ja m inuutti) ja laskee paljonko niiden välinen ero on tunneissa ja minuuteissa ilmaistuna.
Tee ohjelma, jolla voi yhdistää tiedostoja toistensa perään. Käyttäjä antaa ensin tiedoston, jonka perään tiedostoja liitetään. Jos käyttäjän antamaa tiedostoa ei ole olemassa, se luodaan. Sen jälkeenkäyttäjä antaa yhde tai useaampia tiedostoja, jotka kopioidaan antamisjärjestyksessä ensimmäisen tiedoston perään.. Kopioitavat tiedostot säilyvät
Kirjoita sopivat tietorakenteet yksisuuntaiselle linkitetylle iastalle. Listan alkioina on merkkijono-osoittimia. Kirjoita tietorakenteisiin perustuva funktio list_reverse, joka kääntää yksisuuntaisen linkitetyn listan. Siis ensimmäisestä solmusta tule viimeinen, toisesta solmusta toiseksi viimeinen jne.
Yksisuuntaiseen linkitettyyn listaan on talletettu merkkejä niin, että listan jokainen alkio sisältää yhden merkin ja osoittimenlistan seuraavaan alkioon.
Kirjoita ohjelma, joka saa komentorivin parametreina joukon tiedostonimiä ja tulostaa niiden sisältämien rivien lukumäärän tiedostoittain. Jos jotain annettua tiedostoa ei ole olemassa, ohjelma tulostaa tämän nimen kohdalla virheilmoituksen, mutta jatkaa muiden tiedostojen rivimäärien tulostamista.
Eräs C-kurssin innokas opiskelija on kirjoittanut seuraavan C-ohjelman parhaansa yrittäen ja tietenkin ilman kommentteja. Tällaisena ohjelma ei kuitenkaan aivan toimi niin kuin sen pitäisi. Selvitä, mitä ohjelma yrittää tehdä. Kerro, mitä virheitä ohjelmassa on. Perustele myös, miksi mielestäsi kyseessä on virhe. Näytä, kuinka korjaisit ohjelman toimivaksi.
#include <stdio.h> int longest(char **p, char *r) { char *s,*t; int max=0, len; while(*p++) { if (len=strlen(*p) > max ) { max=len; s=*p; } p++; } t=s; while(*r++ = *s++); r=t; return s - t; } int main () { int pit; char pisin_rivi[80]; static char *tptr[5] ={ "Ensimmäinen rivi", "Toinen rivi", "Ja tässä kolmas rivi", "Neljäs on riveistä kaikkein pisin", "Viides ja viimeinen" }; char *pp; pp=pisin_rivi; pit= longest(tptr,pp); printf("%d merkkiä: %s\n",pit, pp); return 0; }