Difference between revisions of "IAX0583 - Programmeerimine I"

From ATI public wiki
Jump to: navigation, search
((by SublimeText.Mediawiker))
Line 8: Line 8:
 
* [http://ati.ttu.ee/wiki/index.php/Git_manual Git manual EN]
 
* [http://ati.ttu.ee/wiki/index.php/Git_manual Git manual EN]
  
=== Materjalid/Materials ===
+
=== Materjalid ===
''Vladimir Viies'' - http://www.tud.ttu.ee/im/Vladimir.Viies/materials/IAG0581,IAG0582,PROGRAMMEERIMINE/PR1/
+
==== Aine õppejõudude materjalid ===
 +
[http://www.tud.ttu.ee/im/Vladimir.Viies/materials/IAG0581,IAG0582,PROGRAMMEERIMINE/PR1/ Vladimir Viies]
  
''Risto Heinsar'' - http://www.blue.pri.ee/ttu/programmeerimine-i/
+
[http://www.blue.pri.ee/ttu/programmeerimine-i/ Risto Heinsar]
  
 +
====Vanad materjalid====
 +
[http://www.tud.ttu.ee/im/Vladimir.Viies/materials/Helena_materjalid/iag0581/ Helena Kruus]
 +
[[IAG0581 - Programmeerimine I (2015)|Eelmise aasta materjalid]]
  
Vanad materjalid
+
==== Moodle materjalid ====
 
+
''Helena Kruus'' - http://www.tud.ttu.ee/im/Vladimir.Viies/materials/Helena_materjalid/iag0581/
+
 
+
 
+
=== Moodle materjalid ===
+
 
Ise registeerumisega kursususele "IAG0581 Programmeerimine I".
 
Ise registeerumisega kursususele "IAG0581 Programmeerimine I".
 +
[https://moodle.e-ope.ee/]
  
https://moodle.e-ope.ee/
 
 
 
=== Praktikumitunnid (Õppejõud Vladimir Viies) ===
 
==== 4. nädal ====
 
[http://ati.ttu.ee/wiki/images/Praktikum4.pdf Slaidid]
 
 
[[C/prefix_and_postfix|Lisa lugemist]]
 
==== 5. nädal ====
 
[http://ati.ttu.ee/~hkinks/iag0581/labs/praktikum5.pdf Rühmatöö]
 
==== 6. nädal ====
 
Näide alamprogrammide loomisest kasutades funktsioone:
 
<source lang="c" collapse="true">
 
#include <stdio.h>
 
 
/* funktsioone saab deklareerida kahel viisil: */
 
// funktsiooni deklaratsioon ja kohe defineerimine
 
int findSquare(int number) {
 
  return number*number;  // funktsioon peab tagastama int tüüpi muutuja ja v6tab sisendiks int tyypi argumendi
 
}
 
 
// prototyyp (funktsiooni deklaratsioon) ja definitsioon eraldi
 
void input(int *value);
 
void output(int v);   
 
 
//peafunktsioon
 
int main(void) {
 
  int n;        // deklareerime muutuja n, mis asub nt aadressil x01
 
  input(&n);    // anname funktsioonile edasi tema aadressi (x01), kuhu kysitakse tema väärtus
 
 
  // kutsume välja ruudu leidmise funktsiooni, andes ette muutuja n väärtuse ja talletame tulemuse muutujasse vastus
 
  int vastus = findSquare(n);
 
 
  // väljastame leitud vastuse, andes selle (väärtuse) ette väljastusfunktsioonile
 
  output(vastus);
 
  return 0;
 
}
 
 
/* sisestusfunktsioon.
 
void tüüpi funktsioon - ei tagastata midagi.
 
argumendina antakse ette pointer,
 
milles hoitakse muutuja asukohta mälus.
 
*/
 
void input(int *value) {
 
  printf("Sisesta n:\n");
 
  scanf("%d", value);
 
}
 
 
/* v2ljastusfunktsioon
 
argumendina antakse ette v22rtus
 
*/
 
void output(int v) {
 
  printf("%d\n", v);
 
}
 
 
</source>
 
 
Kui sisestatavaid andmeid on palju ja testimisel klaviatuurilt sisestamine läheb pikaks, siis ei ole keelatud suvalisi sisendandmeid genereerida. Näide sellest, kuidas suvalist arvu genereerida C-s:
 
<source lang="c" collapse="true">
 
#include <stdio.h>
 
#include <time.h> // aja küsimine
 
#include <stdlib.h> // srand ja rand
 
 
int main(void) {
 
  srand(time(NULL));
 
  int randomNumber = rand()%10 +1; // suvaline number 1-10
 
  printf("%d\n", randomNumber);
 
  return 0;
 
}
 
</source>
 
==== 8. nädal ====
 
Näiteid kasutaja sisestuse valideerimisest
 
<source lang="c" collapse="true">
 
/* sisestused arvu kontrolliga. Mõned näited, mis lasevad kasutajsõbralikumat sisestust luua.
 
Scanf ei ole üldiselt niivõrd interaktiivseks sisestuseks mõeldud. Ta eeldab kindla formaadiga sisestust ja kui seda ette ei anta,
 
siis loetakse mida võimalik ja minnakse edasi lihtsalt. Andmed mida lugeda ei suudetud, jäetakse stdin puhvrisse alles ja see tekitab
 
edaspidi probleeme.
 
 
Üldiselt mida nende asemel soovitatakse on fgets() ja sscanf();
 
*/
 
#include <stdio.h>
 
#define EX 3 // näite valik
 
 
int main(void) {
 
    int arv;
 
   
 
    # if EX==1
 
    // scanf kasutamine sisestuse kontrolliks
 
    while(1) {
 
        printf("Sisesta arv\n");
 
        if (scanf("%d", &arv) != 1) {
 
            printf("Viga sisestusel\n");
 
           
 
            // peame puhvri tühjaks tegema, et arvu küsimine tsüklisse kinni ei jääks
 
            int c;
 
            while ( (c = getchar()) != '\n' && c != EOF ) { }
 
        } else {
 
            break;
 
        }
 
    }
 
    printf("Loeti %d\n", arv);
 
    # endif
 
   
 
    # if EX==2
 
    // fgets ja sscanf
 
    char buffer[256];
 
    while (1) {
 
        printf("Sisesta arv\n");
 
        if (fgets(buffer, sizeof(buffer), stdin)) {
 
            if ( sscanf(buffer, "%d", &arv) ) { // sisestusest püütakse filtreerida formaadi järgi välja täisarv
 
                printf("Sisestati naturaalarv %d\n", arv);
 
                break;
 
            } else printf("Sisestati string %s\n", buffer);     
 
        }
 
    }
 
    # endif
 
       
 
    # if EX==3
 
    // isdigit näide
 
    char buffer[256];
 
    while (1) {
 
        printf("Sisesta arv\n");
 
        if (fgets(buffer, sizeof(buffer), stdin)) {
 
            int i;
 
            int int_flag = 1; // eeldame et tegu on täisarvuga algul
 
            for (i = 0; i < sizeof(buffer) && buffer[i] != '\n'; i++) { //käime kõik elemendid läbi, kuni jõuame lõpuni või reavahetuseni
 
                if (!isdigit(buffer[i])) {
 
                    int_flag = 0;
 
                    printf("%c pole number.\n", buffer[i]);
 
                    break;
 
                }
 
            }
 
            if (int_flag && i>0) {
 
                arv = atoi(buffer);
 
                printf("Sisestati arv %d\n", arv);
 
                break;
 
            }
 
        }
 
    }
 
    # endif
 
           
 
    # if EX==4
 
    // atoi kasutamine sisestuse valideerimiseks
 
    char buffer[256];
 
    while (1) {
 
        printf("Sisesta arv\n");
 
        scanf("%s", &buffer);
 
        // atoi - string to integer conversion. Proovime kas õnnestus. Kui ei õnnestunud, siis tagastab 0. Samas see tähendab ka et 0 sisetamine on viga.
 
        if ( (arv = atoi(buffer)) != 0) {
 
            printf("Sisestati arv %d.\n", arv);
 
            break;
 
        }
 
    }
 
    # endif
 
               
 
    return 0;
 
}
 
 
</source>
 
==== 13. nädal ====
 
[http://ati.ttu.ee/~hkinks/iag0581/examples/file_string/file_string.c Failist lugemine]
 
 
==Õppetöö==
 
==Õppetöö==
 
===Punktisüsteem===
 
===Punktisüsteem===
Line 204: Line 43:
 
! Kuupäev !! Teema !! Tähtaeg
 
! Kuupäev !! Teema !! Tähtaeg
 
|-
 
|-
| 10.09.2015 || algoritmi mõiste ||
+
| 10.09.2015 || Algoritmi mõiste ||
 
|-
 
|-
| 24.09.2015 || arvsüsteemid, ekstreemumid ja mullsort, kalender ||
+
| 24.09.2015 || Arvsüsteemid, ekstreemumid ja mullsort, kalender ||
 
|-
 
|-
 
| 08.10.2015 || UML, Shell sort. || I kodutöö  algoritmi kaitsmine
 
| 08.10.2015 || UML, Shell sort. || I kodutöö  algoritmi kaitsmine
 
|-
 
|-
| 22.10.2015 || kontrolltöö kirjutamine (algoritmi koostamine) || '''I kontrolltöö'''  
+
| 22.10.2015 || Kontrolltöö kirjutamine (algoritmi koostamine) || '''I kontrolltöö'''  
 
|-
 
|-
 
| 05.11.2015 || C Keel, põhilaused, dialoogprogramm. || '''I kodutöö''' (algoritm + programmikood)
 
| 05.11.2015 || C Keel, põhilaused, dialoogprogramm. || '''I kodutöö''' (algoritm + programmikood)
 
|-
 
|-
| 19.11.2015 || sortimisagoritmi realiseerimine, alamprogrammid ||
+
| 19.11.2015 || Sortimisagoritmi realiseerimine, alamprogrammid ||
 
|-
 
|-
| 03.12.2015 || kontrolltöö kirjutamine (programmikood) || '''II kontrolltöö''' ja '''II kodutöö '''  
+
| 03.12.2015 || Kontrolltöö kirjutamine (programmikood) || '''II kontrolltöö''' ja '''II kodutöö '''  
 
|-
 
|-
 
| 17.12.2015 || Arvestustöö (juhul kui on vaja) ||
 
| 17.12.2015 || Arvestustöö (juhul kui on vaja) ||
 
|}
 
|}
http://www.tud.ttu.ee/im/Vladimir.Viies/materials/IAG0581,IAG0582,PROGRAMMEERIMINE/PR1/prog_I__est/Progra1Kalender15.xls
 
  
 
===I Kodutöö ülesanne===
 
===I Kodutöö ülesanne===
http://www.tud.ttu.ee/im/Vladimir.Viies/materials/IAG0581,IAG0582,PROGRAMMEERIMINE/PR1/prog_I__est/Kodune_I.pdf
+
[Ülesande kirjeldus ati.ttu.ee/~hkinks/iag0581/hw1/hw1.pdf]
 
+
[I kodutöö ülesande genereerimine ati.ttu.ee/~hkinks/iag0581/hw1/hw1.html]
  
 
== Töö praktikumis ==
 
== Töö praktikumis ==

Revision as of 12:48, 11 August 2016

English course page United Kingdom.png

Viited


Materjalid

= Aine õppejõudude materjalid

Vladimir Viies

Risto Heinsar

Vanad materjalid

Helena Kruus Eelmise aasta materjalid

Moodle materjalid

Ise registeerumisega kursususele "IAG0581 Programmeerimine I". [1]

Õppetöö

Punktisüsteem

  • 15p - I kontrolltöö
  • 15p - II kontrolltöö
  • 15p - I kodutöö
  • 15p - II kodutöö
  • 40p - Tunnitöö
  • 10p - Boonus

Hinne

  • < 50p - 0
  • 50p - 1
  • 60p - 2
  • 70p - 3
  • 80p - 4
  • 90p - 5

Loengud

Kuupäev Teema Tähtaeg
10.09.2015 Algoritmi mõiste
24.09.2015 Arvsüsteemid, ekstreemumid ja mullsort, kalender
08.10.2015 UML, Shell sort. I kodutöö algoritmi kaitsmine
22.10.2015 Kontrolltöö kirjutamine (algoritmi koostamine) I kontrolltöö
05.11.2015 C Keel, põhilaused, dialoogprogramm. I kodutöö (algoritm + programmikood)
19.11.2015 Sortimisagoritmi realiseerimine, alamprogrammid
03.12.2015 Kontrolltöö kirjutamine (programmikood) II kontrolltöö ja II kodutöö
17.12.2015 Arvestustöö (juhul kui on vaja)

I Kodutöö ülesanne

[Ülesande kirjeldus ati.ttu.ee/~hkinks/iag0581/hw1/hw1.pdf] [I kodutöö ülesande genereerimine ati.ttu.ee/~hkinks/iag0581/hw1/hw1.html]

Töö praktikumis

Arvutiklassis töötamise kohta üldiselt: Arvutiklassis töötamise juhend

Üksikasjalik kaugtöö juhend piltidega EST ENG

Töö alustamisel terminalis on vaja paika seada töökeskkond käsuga cad

Programmeerimistarkvara

Kompileerimine terminalis

Terminalis kompileerimiseks on käsk gcc.

Näiteks kui programmikood on failis hello.c, siis kompileerimiseks tuleks anda käsk

gcc –o hello hello.c

See tekitab binaarfaili hello, milles võime veenduda kasutades käsku ls. Järgnevalt on see võimalik tööle panna käsuga

./hello

Windowsi all käsitsi gcc-ga kompileerimiseks võib kasutada nt:


C/C++ Integreeritud programmeerimiskeskkonnad (IDE)

Klassi arvutites terminali käsk codeblocks



Klassi arvutites terminali käsk geany

Süntaksi värvimisega tekstiredaktorid

SciTE

Klassi arvutites terminali käsk SciTE


Diagrammide joonistamisvahendid

Klassi arvutites terminali käsk argouml


Klassi arvutites terminali käsk astah-com


Klassi arvutites terminali käsk yEd


Klassi arvutites terminali käsk jsp

argoUML
yEd
Jackson System Programming (JSP) Editor