Programozó versenyek

Magas szintű programozási nyelvek 1, 2014. május 20., K12 ZH

2014. május 20. 12:05 – 2014. május 20. 13:50

Mellékátló

Írjon függvényt, amely paraméterként megkapja egy egészeket tartalmazó kvadratikus mátrix (négyzet alakú kétdimenziós tömb) kezdőcímét, valamint sorainak számát! A függvény az eredeti tömb módosítása nélkül hozzon létre egy új, egészeket tartalmazó egydimenziós tömböt, amely az eredeti mátrix mellékátlójában lévő elemeket tartalmazza a sorindexek növekvő sorrendjében, és adja vissza e tömb kezdőcímét! Egy kvadratikus mátrix mellékátlója azokat az elemeket tartalmazza, amelyek sor- és oszlopindexeinek összege eggyel kevesebb a mátrix sorainak (oszlopainak) számánál.

A függvény specifikációja

int *antidiagonal( int *, int );

Megjegyzés

A függvényt helyezze az antidiagonal.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 három állomány 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!

myheader.h

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

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "myheader.h"
  4. #define N 5
  5. int main()
  6. {
  7.   int t[ N ][ N ] =
  8.     { {  3,  2, 10, -14,  -7 },
  9.       { -6, -3, -4, -19,  20 },
  10.       { -5,  6,  1,  18,  -8 },
  11.       { 15, 17, -4,  15, -19 },
  12.       { 20,  1, 17,  -7,  -4 } };
  13.   int i, j, *p;
  14.   printf( "%d\n\n", N );
  15.   for ( i = 0; i < N; ++i )
  16.   {
  17.     for ( j = 0; j < N; ++j )
  18.     {
  19.       if ( j > 0 )
  20.         putchar( ' ' );
  21.       printf( "%d", t[ i ][ j ] );
  22.     }
  23.     putchar( '\n' );
  24.   }
  25.   putchar( '\n' );
  26.   p = antidiagonal( &t[0][0], N );
  27.   for ( i = 0; i < N; ++i )
  28.   {
  29.     for ( j = 0; j < N; ++j )
  30.     {
  31.       if ( j > 0 )
  32.         putchar( ' ' );
  33.       printf( "%d", t[ i ][ j ] );
  34.     }
  35.     putchar( '\n' );
  36.   }
  37.   putchar( '\n' );
  38.   for ( i = 0; i < N; ++i )
  39.   {
  40.     if ( i > 0 )
  41.       putchar( ' ' );
  42.     printf( "%d", p[ i ] );
  43.   }
  44.   putchar( '\n' );
  45.   free( p );
  46.   return EXIT_SUCCESS;
  47. }
letöltés szöveges állományként

Makefile

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

A fenti program kimenete

  1. 5
  2. 3 2 10 -14 -7
  3. -6 -3 -4 -19 20
  4. -5 6 1 18 -8
  5. 15 17 -4 15 -19
  6. 20 1 17 -7 -4
  7. 3 2 10 -14 -7
  8. -6 -3 -4 -19 20
  9. -5 6 1 18 -8
  10. 15 17 -4 15 -19
  11. 20 1 17 -7 -4
  12. -7 -19 1 17 20
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.