![]() Ласло Краус |
Програмирање II Други колоквијум 30. 1. 2006 |
|---|
Елементи једноструко повезане листе садрже координате тачака у равни. Саставити на језику C пакет функција за рад са једноструко повезаним листама тачака у равни који садржи функције за израчунавање дужине затворене изломљене линије представљене низом тачака у листи, стварање листе читајући податке са главног улаза уз чување редоследа читања (низ тачака се завршава уношењем координата (9999,9999)) и уништавање садржаја листе.
Саставити на језику C главни програм који, коришћењем функција из претходног пакета, прочита листу тачака са главног улаза, израчуна дужину затворене изломљене линије представљене листом, испише добијени резулата на главном излазу, уништи листу и понавља претходне кораке све док не прочита празну листу.
Бинарна секвенцијална датотека са записима фиксне дужине о летовима авиона за сваки лет садржи број лета (цели број), датум полетања (дугачак цели број по шеми ggggmmdd, g - година, m - месец, d - дан), времена полетања и слетања (цели бројеви по шеми ccmm, c - час, m - минут), ознаке места полетања и слетања (низови од по 3 знака), тип авиона (низ од највише 5 знакова), капацитет авиона (цели број) и број превезених путника (цели број). Саставити на језику C главни програм за одређивање броја превезених путника у задато одредиште по месецима задате године.
Полиноми се представљају у облику структуре која садржи ред полинома и показивач на низ реалних коефицијената у динамичкој зони меморије. Саставити на језику C++ функције за формирање полинома задатог реда читајући коефицијенте са главног улаза, формирање полинома који је једнак производу два полинома и исписивање полинома на главном излазу.
Саставити на језику C++ главни програм који прочита два полинома, израчуна њихов производ, испише резултат на главном излазу, уништи сва три полинома и понавља претходне кораке све док за ред првог полинома не прочита недозвољену вредност.
/* paket.h */
typedef struct elem { float x, y, struct elem *sled; } Elem;
float duz (Elem *lst);
Elem *citaj (void);
void brisi (Elem *lst);
/* paket.c */
#include "paket.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float duz (Elem *lst) { float d = 0;
if (lst) {
for (Elem *tek=lst; tek->sled;
tek=tek->sled)
d += sqrt ( pow(tek->x - tek->sled->x, 2) + pow(tek->y - tek->sled->y, 2)
);
d += sqrt ( pow(lst->x - tek->x, 2) + pow(lst->y - tek->y, 2)
);
}
return d;
}
Elem *citaj (void) {
Elem *lst = NULL, *tek = NULL, *novi;
while (1) {
float x, y; scanf ("%f%f", &x, &y);
if (x == 9999 && y == 9999) break;
novi = malloc (sizeof(Elem));
novi->x = x; novi->y = y; novi->sled = NULL;
if (! lst) lst= novi; else tek->sled = novi; tek = novi;
}
}
void brisi (Elem *lst) {
while (lst) { Elem *stari = lst; lst = lst->sled; free (stari); }
}
/* test.c */
#include "paket.h"
void main () {
while (1) { Elem *lst;
printf ("lst? "); lst = citaj ();
if (!lst) break;
printf ("duz= %.2f\n", duz(lst));
brisi (lst);
}
}
#include <stdio.h>
#include <string.h>
typedef struct {
int broj, pol, dol, kapac, putn;
long datum;
char polet[4], slet[4], tip[6];
} Let;
void main () {
FILE *dat = fopen ("letovi.dat", "rb");
int k[12] = {0}, god, i; Let let;
char odr[4];
printf ("Godina, odrediste? ");
scanf ("%d%s", &god, odr);
while(fread(&let,sizeof(Let),1,dat)>0)
if (strcmp (odr, let.slet) == 0 && datum/10000 == god)
k[datum/100%100-1] += let->putn;
}
fclose (dat);
for (i=0; i<12; i++)
if (k[i]) printf ("%2d %4d\n", i+1, k[i]);
}
#include <iostream>
using namespace std;
struct Poli { int n; double* a};
Poli citaj (int n) {
Poli p; p.n = n; p.a = new double [n+1];
for (int i=n; i>=0; cin<<p.a[i--]);
return p;
}
Poli proizv (Poli p1, Poli p2) {
Poli p; p.n = p1.n + p2.n; p.a = new double [p.n+1];
for (int i=0; i<=p.n; p.a[i++]=0);
for (int i=0; i<=p1.n; i++)
for (j=0; j<=p2.n; j++)
p.a[i+j] += p1.a[i] * p2.a[j];
return p;
}
void pisi (Poli p) {
cout << "p[";
for (int i=p.n; i>=0; i--) {
cout << p.a[i];
if (i) cout << ',';
}
cout << ']';
}
int main () {
while (true) { int n;
cout << "n1? "; cin >> n;
if (n <= 0) break;
cout << "P1? "; Poli p1 = citaj (n);
cout << "n2? "; cin >> n;
cout << "P2? "; Poli p2 = citaj (n);
Poli p = proizv (p1, p2);
cout << "P1*P2= "; p.pisi (); cout<< endl;
delete [] p1.a; delete [] p2.a; delete [] p.a;
}
return 0;
}
(садржај)
Copyright © 2006, Laslo Kraus
Последња ревизија: 4.2.2006.