Програмирање 2/К2 2019
Drugi kolokvijum 2019. godine održan je 22. aprila. Zadaci i rešenja dostupni su sa stranice predmeta.
Zadatak
Prva funkcija
Napisati funkciju char** loadMap(int *rows) koja najpre čita broj vrsta matrice i smešta pročitanu vrednost na lokaciju na koju pokazuje pokazivač rows, nakon toga formira matricu karaktera dimenzija rows x 2 i popunjava je po vrstama karakterima koje čita iz jednog reda sa standardnog ulaza.
#include <stdlib.h>
#include <stdio.h>
char** loadMap ( int *rows ) {
scanf("%d", rows);
char** matrix = malloc(*rows*sizeof(char*));
for(int i = 0; i < *rows; i++)
{
matrix[i] = malloc(2*sizeof(char));
scanf(" %c %c", &matrix[i][0], &matrix[i][1]);
}
return matrix;
}
Druga funkcija
Napisati funkciju int charToDigit(char c, char **map, int rows) koja karakter c preslikava u odgovarajuću cifru na osnovu matrice preslikavanja map. Dimenzije matrice preslikavanja su rows x 2. Ukoliko ne postoji preslikavanje za odgovarajući karakter vratiti 0.
int charToDigit ( char c, char **map, int rows ) {
for(int i = 0; i < rows; i++)
{
if(map[i][0] == c)
return map[i][1] - '0';
}
return 0;
}
Treća funkcija
Korišćenjem prethodno realizovane funkcije realizovati funkciju int stringToInt(char *word, char **map, int rows) koja string word preslikava u ceo broj tako što svaki karakter iz stringa word preslika u odgovarajuću cifru na osnovo matrice preslikavanja map.
#include <stdlib.h>
int stringToInt ( char *string, char **map, int rows ) {
char* tmp = string;
int num = 0;
while(*tmp)
{
int dig = charToDigit(*tmp, map, rows);
num = num*10 + dig;
tmp++;
}
return num;
}
Četvrta funkcija
Napisati funkciju char* readLine() koja čita jedan red sa standradnog ulaza. Prilikom čitanja zauzeti samo onoliko prostora koliko je neophodno za smeštanje svih karaktera jednog reda.
#include <stdlib.h>
#include <stdio.h>
char* readLine ( ) {
char *line = NULL;
int size = 0;
char c = getchar();
while(c != '\n')
{
line = realloc(line, (size+1)*sizeof(char));
line[size++] = c;
c = getchar();
}
line = realloc(line, (size+1)*sizeof(char));
line[size] = '\0';
return line;
}
Glavna funkcija
Korišćenjem prethodno realizovanih funkcija napisati glavni program koji prvo čita broj vrsta matrice preslikavanja, potom i same elemente matrice, a nakon toga tri reči, svaku u zasebnom redu, i na kraju ispisuje „DA“ ukoliko data jednakost važi, a „NE“ u suprotnom slučaju.
#include <stdlib.h>
#include <stdio.h>
int main()
{
int rows;
char **map = loadMap(&rows);
char *f, *s, *t;
f = readLine();
s = readLine();
t = readLine();
int n1 = stringToInt(f, map, rows);
int n2 = stringToInt(s, map, rows);
int n3 = stringToInt(t, map, rows);
free(f);
free(s);
free(t);
for(int i = 0; i < rows; i++)
free(map[i]);
free(map);
if(n3 == n1 + n2)
printf("DA");
else
printf("NE");
return 0;
}