|
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
#ifndef _MYHEADER_H #define _MYHEADER_H 1
int *antidiagonal( int *, int );
#endif /* myheader.h */
letöltés szöveges állományként
main.c
#include <stdio.h> #include <stdlib.h> #include "myheader.h"
#define N 5
int main() { int t[ N ][ N ] = { { 3, 2, 10, -14, -7 }, { -6, -3, -4, -19, 20 }, { -5, 6, 1, 18, -8 }, { 15, 17, -4, 15, -19 }, { 20, 1, 17, -7, -4 } }; int i, j, *p;
printf( "%d\n\n", N ); for ( i = 0; i < N; ++i ) { for ( j = 0; j < N; ++j ) { if ( j > 0 ) putchar( ' ' ); printf( "%d", t[ i ][ j ] ); } putchar( '\n' ); } putchar( '\n' ); p = antidiagonal( &t[0][0], N ); for ( i = 0; i < N; ++i ) { for ( j = 0; j < N; ++j ) { if ( j > 0 ) putchar( ' ' ); printf( "%d", t[ i ][ j ] ); } putchar( '\n' ); } putchar( '\n' ); for ( i = 0; i < N; ++i ) { if ( i > 0 ) putchar( ' ' ); printf( "%d", p[ i ] ); } putchar( '\n' ); free( p ); return EXIT_SUCCESS; }
letöltés szöveges állományként
Makefile
CC = gcc OBJS = main.o antidiagonal.o TARGETS = main
all: $(TARGETS)
main: main.o antidiagonal.o $(CC) main.o antidiagonal.o -o main
main.o: main.c $(CC) -c main.c
antidiagonal.o: antidiagonal.c $(CC) -c antidiagonal.c
clean: rm -rf $(OBJS) *~ $(TARGETS)
letöltés szöveges állományként
A fenti program kimenete
5
3 2 10 -14 -7 -6 -3 -4 -19 20 -5 6 1 18 -8 15 17 -4 15 -19 20 1 17 -7 -4
3 2 10 -14 -7 -6 -3 -4 -19 20 -5 6 1 18 -8 15 17 -4 15 -19 20 1 17 -7 -4
-7 -19 1 17 20
letöltés szöveges állományként
|
|