Programozó versenyek

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

2014. május 20. 16:05 – 2014. május 20. 17:50

Hosszú másolat

Írjon függvényt, amely paraméterként megkapja egy sztringeket tartalmazó kétdimenziós tömb kezdőcímét, valamint sorainak és oszlopainak számát! A függvény járja be sorfolytonosan a kétdimenziós tömböt, határozza meg a tömb leghosszabb sztringjét, készítsen róla másolatot, és az eredeti tömb módosítása nélkül adja vissza e másolat kezdőcímét! Ha a tömbben több olyan sztring is található, amelynek a hossza megegyezik a leghosszabbéval, akkor a bejárás sorrendjében legelsőről készítsen másolatot a függvény!

A függvény specifikációja

char *longcopy( char *[], int, int );

Megjegyzés

A függvényt helyezze a longcopy.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. char *longcopy( char *[], 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 3
  5. #define M 4
  6.  
  7. int main()
  8. {
  9.   char *t[ N ][ M ] =
  10.     { { "alma",     "dio",        "korte",   "szilva" },
  11.       { "eper",     "cseresznye", "banan",   "narancs" },
  12.       { "mandarin", "szolo",      "ribizli", "malna" } };
  13.   int i, j;
  14.   char *p;
  15.   printf( "%d %d\n\n", N, M );
  16.   for ( i = 0; i < N; ++i )
  17.   {
  18.     for ( j = 0; j < M; ++j )
  19.     {
  20.       if ( j > 0 )
  21.         putchar( ' ' );
  22.       printf( "*%s*", t[ i ][ j ] );
  23.     }
  24.     putchar( '\n' );
  25.   }
  26.   putchar( '\n' );
  27.   p = longcopy( &t[0][0], N, M );
  28.   for ( i = 0; i < N; ++i )
  29.   {
  30.     for ( j = 0; j < M; ++j )
  31.     {
  32.       if ( j > 0 )
  33.         putchar( ' ' );
  34.       printf( "*%s*", t[ i ][ j ] );
  35.     }
  36.     putchar( '\n' );
  37.   }
  38.   putchar( '\n' );
  39.   printf( "*%s*\n", p );
  40.   free( p );
  41.   return EXIT_SUCCESS;
  42. }
letöltés szöveges állományként

Makefile

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

A fenti program kimenete

  1. 3 4
  2. *alma* *dio* *korte* *szilva*
  3. *eper* *cseresznye* *banan* *narancs*
  4. *mandarin* *szolo* *ribizli* *malna*
  5. *alma* *dio* *korte* *szilva*
  6. *eper* *cseresznye* *banan* *narancs*
  7. *mandarin* *szolo* *ribizli* *malna*
  8. *cseresznye*
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2018.05.24.