Programozó versenyek

Magas szintű programozási nyelvek 1, 2016. január 5., K8 ZH

2016. január 5. 8:05 – 2016. január 5. 11:35

Mátrixszorzás

Adott a következő fejlécállomány:

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. void foo(int *, int *, int, int, int);
  4. #endif /* myheader.h */
letöltés szöveges állományként

Írja meg a myheader.h állományban deklarált foo() függvényt (eljárást), amely paraméterként két, egymással összeszorozható mátrix adatait kapja meg: első két paramétere a két mátrix kezdőcíme, harmadik paramétere az első mátrix sorainak a száma (n), negyedik paramétere az első mátrix oszlopainak a száma (k, ami egyúttal a második mátrix sorainak a száma is), ötödik paramétere pedig a második mátrix oszlopainak a száma (m).

Ha adott egy és egy mátrix, akkor a szorzatmátrix elemeit a következő képlettel (ún. sor-oszlop szorzással) tudja meghatározni:

, minden 1 ≤ i ≤ n és 1 ≤ j ≤ m esetén.

A foo() függvény (eljárás) feladata az, hogy a szorzatmátrix elemeit megjelenítse a standard kimeneten. A kimenet egyes soraiba a szorzatmátrix megfelelő sorának az elemeit kell írni, őket egymástól pontosan egy szóköz karakterrel elválasztva. Ügyeljen rá, hogy a sor elejére és végére a függvény (eljárás) ne írjon ki felesleges szóköz karaktereket, minden sorban az utolsó számot közvetlenül kövesse egy soremelés karakter!

Megjegyzés

A függvényt (eljárást) helyezze a foo.c nevű állományba, és ezt az állományt küldje be megoldásként a kiértékelő rendszernek! Megoldását az alábbi állományok segítségével tesztelheti. Megoldásának kiértékelését a tesztelő rendszer nem feltétlenül ezeknek az állományoknak a felhasználásával végzi!

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "myheader.h"
  4. int main()
  5. {
  6.     int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  7.     int b[4][2] = {{13, 14}, {15, 16}, {17, 18}, {19, 20}};
  8.     foo(&a[0][0], &b[0][0], 3, 4, 2);
  9.     return EXIT_SUCCESS;
  10. }
letöltés szöveges állományként

Makefile

  1. SRCS = main.c foo.c
  2. OBJS = $(SRCS:%.c=%.o)
  3. TARGETS = main
  4. .PHONY: clean
  5. all: $(TARGETS)
  6. main: $(OBJS)
  7. $(CC) $(OBJS) -o main
  8. %.o: %.c
  9. $(CC) -Wall -c $< -o $@
  10. clean:
  11. rm -rf $(OBJS) *~ $(TARGETS)
letöltés szöveges állományként

A példa tesztprogram kimenete

  1. 170 180
  2. 426 452
  3. 682 724
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.