Uvod u računarstvo: 4. zadaća
ak. godina 2005/2006.

  1. zadatak (obavezan):
    Napišite program koji učitava matricu m×n, te ispisuje koliko u njoj ima brojeva s neparnom sumom znamenaka.
    Rješenje:
    scanf(m, n);
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
        scanf(a[i][j]);
    cnt = 0;
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++) {
        s = 0;
        b = a[i][j];
        if (b < 0) b = -b;
        while (b > 0) {
          s = s + b % 10;
          b = b div 10;
        }
        if (s % 2 == 1) cnt = cnt + 1;
      }
    printf("U ucitanoj matrici ima ", cnt, " brojeva s neparnom sumom znamenaka.");
  2. zadatak (obavezan):
    Napišite program koji učitava prirodan broj n, niz od 2n+1 realnog broja, te realni broj x. Program treba ispisati vrijednost polinoma p(x) za učitani x, gdje je
    p(x) = p1(x) ⋅ p2(x)
    p1(x) = a2nx2n + a2n-2x2n-2 + ... + a2x2 + a0
    p2(x) = a2n-1x2n-1 + a2n-3x2n-3 + ... + a1x
    Napomena: Zadatak riješite primjenom Hornerovog algoritma!
    Rješenje:
    Problem možemo riješiti množenjem polinoma p1 i p2, te primjenom Hornerovog algoritma, ili jednostavnom primjerom Hornerovog algoritma na oba polinoma, te množenjem rezultata. Ovdje prikazujemo drugo rješenje.
    scanf(n, x);
    for (i = 0; i <= 2 * n; i = i + 1)
      scanf(a[i]);
    p1 = 0;
    p2 = 0;
    for (i = 2 * n; i >= 0; i = i - 1) {
      p1 = x * p1;
      p2 = x * p2;
      if (i % 2 == 0)
        p1 = p1 + a[i];
      else
        p2 = p2 + a[i];
    }
    printf("p(", x, ") = ", p1 * p2);
  3. zadatak (dodatni):
    Napišite program koji učitava matricu m×n, te sortira njene stupce prema umnošku elemenata tih stupaca koji imaju parni indeks retka. Na kraju treba ispisati te umnoške.
    Matricu obavezno treba sortirati kako je opisano, tj. nije dovoljno samo ispisati umnoške!
    Primjer: Ako je učitana matrica
     5  2 11  7
     3 13  5  7
     7  2  3  2
    umnošci elemenata u parnim recima (po stupcima) su: pa rezultat sortiranja treba biti matrica
     2  7 11  5
    13  7  5  3
     2  2  3  7
    Program treba ispisati: 4 14 33 35.
    Napomena: Rješenje trećeg zadatka će biti priznato isključivo onim studentima koji zadaću predaju u prvom tjednu, dakle zaključno s terminima demostratura u tjednu, 12.-16.12.2005.
    Rješenje:
    scanf(m, n);
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
        scanf(a[i][j]);
    // Računanje umnožaka stupaca u zasebni niz,
    // da se račun ne bi ponavljao prilikom sortiranja:
    for (j = 0; j < n; j++) {
      p[j] = 1;
      for (i = 0; i < m; i = i + 2)
        p[j] = p[j] * a[i][j];
    }
    // Sortiranje
    for (i = 0; i < n; i++)
      for (j = i + 1; j < n; j++)
        if (p[i] > p[j]) {
          // Zamjena stupaca:
          for (k = 0; k < m; k++) {
            t = a[k][i];
            a[k][i] = a[k][j];
            a[k][j] = t;
          }
          // Zamjena kriterija za sort:
          t = p[i];
          p[i] = p[j];
          p[j] = t;
        }
    for (i = 0; i < n; i++)
      printf(p[i]);

Rok za predaju zadaće: Dva tjedna, dakle zaključno s terminima demostratura u tjednu, 19.-23.12.2005.

Komentari/pitanja: Eventualne nejasnoće će biti riješene ovdje.

Molba: Zadaću predajte na što manje papira - čuvajmo šume!