PASCAL - Zadaci, resenja, problemi, izazovi...

Zdravo jas sum od Makedonija i ako mozete da mi pomognete da ja resam ovaa zadaca
vo Pascal:
DIALUP

Вовед:
Анастасија е загрижена за висината на телефонската сметка заради времето изминато на Интернет. Една минута сурфање преку dialup во период меѓу 7:00 и 19:00 чини 10 денари, а во периодот помеѓу 19:00 и 7:00 чини 5 денари (цената е иста за сите денови во неделата). (првата минута од 19:00 e евтина минута)
Почетокот и крајот на поврзувањето на интернет секогаш се заокружува на минути (не секунди), а едно поврзување максимум трае 60 минути.
Ограничувања:
Време на извршување е 1 секунда.
Влез:
Во првата линија на датотеката DIALUP.IN се наоѓа цел број N, 1 ≤ N ≤ 100, кој претставува број на поврзувања.
Во секоја од наредните N линии опишана е по едно поврзување во следниот формат:
HH:MM DD
каде HH:MM означува час и минути во колку е воспоставена врската, а DD означува времетраење на врската во минути (максимум 60). Помеѓу MM и DD има едно празно место
Доколку часовите и минутите се едноцифрени броеви, истите се запишани со 0 однапред.
Времето се бележи меѓу 00:00 и 23:59.
Излез:
Во излезната датотека DAILUP.OUT запишете ја вкупната сумата потрошена за сурфање за сите N поврзувања.
Пример:

DIALUP.IN DIALUP.OUT
2
11:02 11
15:30 01 120
Najgolem problem mi pretstavuva zemaneto na podatocite od datotekata
 
e sve mi jasno sem ove zadnje recenice...

problem ti je da ucitas podatke?
is your problem to read data from file?

ucitaj ih ovako
Kod:
type
  sat=record
          sati:byte;
          minuta:byte;
      end;
  vreme=record
          od:sat;
          trajanje:integer;
        end;

var
  brojpovezivanja, i:integer;
  niz:array[1..100] of vreme;
  str:string;
  f:text;
begin
  assign(file,'dialup.in'); reset(file);
  readln(file, brojpovezivanja);
  for i:=1 to brojpovezivanja do
  begin
    readln(f, str, niz[i].trajanje);

    niz[i].od.sat:=val(copy(str,1,pos('.',str-1)); delete(str,1,pos('.',str));
    niz[i].od.minuta:=val(str);
  end;
  
  close(f);  

  {* dalje ide racunanje duzine*}

  assign(f, 'dialup.out'); rewrite(f);
  write(f, rezultat);
  close(f);
end.

Ovako bih ja uradio ucitavanje podataka.
Posto se koriste slogovi podacima pristupam ovako

sat - niz.od.sati
minut - niz.od.minuta
proteklo vreme - niz.minuta

E sad, ostatak resavaj sam. Nije interesantno ako ti sve kazemo...
 
Cao ljudi, jel bi mi neko mogao zadati neke lakse zadatke ili mi bar reci gde bih mogao da ih nadjem na internetu. Ja se inace ne takmicim iz informatike vec smo ove godine poceli da radimo paskal koji me je veoma zainteresovao. Problem je u tome sto ja o paskalu ne znam puno.

evo jedan program koji sam napravio posle 2 casa informatike(molio bih da mi ne prigovarate za kod ili to sto je radjeno na tezi nacin ili bilo sta od toga jer sam ja taj program radio ne znajuci skoro nista o paskalu. btw to mi je prvi program(ne racunajuci programe koje nam je zadavao profesor tipa koja je povrsina trougla itd.))

a resio sam i ovaj sa kalendarom ali mislim da je moglo mnogo lakse(samo je problem sto ne znam kako jer, kao sto sam rekao znam malo o paskalu)

jel mi moze neko reci kako da promenim boju delu teksta u paskalu
 

Prilozi

opusteno.
u kom jeziku?

ako imas funkciju locate, pos ili tako nesto koja na x,y poziciji ispise tekst, onda radis ovako

for (i=1; i<=24; i++)
{
locate (i,i);
printf('*');
}

ako nemas, onda moras da ispisujes razmake odredjen broj puta, ovako nekako:

for (i=1; i<=24; i++)
{
for ()j=1; j<=i; j++) printf(' ');
printf('*\n');
}

e sad, prilagodi ovo jeziku koji koristis i to je to. mislim da je drugo resenje ono sto ti treba
 
U pascalu!

Problem sto mene muci je taj sto da bi nacrtao tu dijagonalu moram da zadam koordinate pocetne tacke i koordinate krajnje tacke, i sto ta dijagonala ne mora da bude pod uglom od 45 stepeni, tj ne mora svaka tacka te duzi da ima iste x i y koordinate

Ovako mi izgleda program koji crta horizontalnu ili vertikalnu duz:

program ispislin ;
uses
crt ;

var
x1 : integer ; { x koordinata 1 tacke }
y1 : integer ; { y koordinata 1 tacke }

x2 : integer ; { x koordinata 2 tacke }
y2 : integer ; { y koordinata 2 tacke }

pom : integer ;
begin

{ unos koordinata tacaka }
write ('Unesite x1:');
readln (x1) ;

write ('Unesite y1:');
readln (y1) ;

write ('Unesite x2:');
readln (x2) ;

write ('Unesite y2:');
readln (y2) ;

{ brisanje ekrana }
clrscr ;

{ ispis linije }
if y1 = y2 then { horizontalna linija }
begin
if (x1 < x2) then
begin
for pom := x1 to x2 do
begin
gotoxy (pom, y1) ;
write ('*') ;
end ;
end
else
begin
for pom := x1 downto x2 do
begin
gotoxy (pom, y1) ;
write ('*') ;
end ;
end ;
end
else
begin
if (x1 = x2) then
begin
if (y1 < y2) then
begin
for pom := y1 to y2 do
begin
gotoxy (x1, pom) ;
write ('*') ;
end ;
end
else
begin
for pom := y1 downto y2 do
begin
gotoxy (x1, pom) ;
write ('*') ;
end ;
end ;


end
else
begin
write ('Nije ni horizontalna ni vertikalna linija...') ;
end ;
end ;


gotoxy (1, 25) ;
write ('Pritisnite taster <ENTER> za nastavak ...') ;
readln ;
end .
 
loto sam pisao posle nedelju dana poznavanja paskala, a pre toga moje znanje o kompjuterima se svodilo na: upali, counter strike(ili nesto drugo), ugasi


sto se tice kalendara, on je pisan citljivo, a za njega ne trebaju komentari(za loto bi trebali ali nisam znao da cu da pokazujem nekom nego sam samo napravio da mi keva ne bi bacala pare na pravi loto)







jel mi moze neko reci kako da obojim neki tekst u paskalu???
a kako da program ucita iz nekog fajla ili ispise podatke u neki fajl?
 
za bojenje sam zaboravio kako ide, ali nije nista posebno

ucitavanje iz fajla i upis u fajl...evo ti kod programa koji cfajlt a.txt prepisuje u b.txt (ekstenzija nije bitna, posmatra ga ako tekst - niz znakova)

program prepisivac;
var
a,b:text; { deklaracija fajl promenljivih }
c:char; { znak koji se trenutno cita/upisuje }
begin
assign(a,'a.txt'); reset(a); { poveze a za fajlom i otvori fajl za citanje }
assign(b,'b.txt'); rewrite(b); { poveze b sa fajlom i otvori fajl za upis }

while not(eof(a)) do { dok nije kraj fajla a (eof - end of file) }
begin
readln(a,c); { ucita iz fajla a znak c }
writeln(b,c); { upise u fajl b znak c }
end;

close(a); { zatvori fajl a }
close(b); { zatvori fajl b }
end.

Kako to sve radi:

Fajl otvaras tako sto napravis promenljivu tipa text ili file of tip (prost ili slozen).
Tu promenljivu zatim povezes sa fizickim fajlom ( assign(fajlpromenljiva, 'putanjadofajla') )
Na kraju odredis sta sa tim fajlom hoces da radis:

reset - otvori fajl za citanje
rewrite - otvori prazan fajl za upisivanje (ako fajl vec postoji bice prepisan)
append - otvori fajl za dopisivanje na kraju

U fajl upisujes i citas pomocu read,readln i write,writeln, tako sto u zagradi prvo navedes fajl promenljivu pa onda ono sto se upisuje - writeln(a, c); writeln(f, 'tekst'); readln(f, broj);

Kad zavrsis rad sa fajlom obavezno moras da zatvoris fajl - close (fajl promenljiva);. Ako to propustis obicno se pojavi greska pri izlazu iz programa.

Sve u svemu - nista posebno.

Koristi text tip. Za pocetak ti je najlaksi da shvatis kako to sve ide.
U text fajlu mozes da upisujes i citas sve tipove (char, integer, ..., boolean).
Npr ako imas fajl oblika
123 442 48
1 1 2
mozes da brojeve citas na primer ovako
readln(f, a,b,c);
readln(f, d,e,f);
Prilikom upisa - writeln(f,a,b,c); bice upisani sa jednim razmakom izmedju svakog broja.

Eto. Nista posebno. Valjda je jasno?
 
probao sam i nesto ne funkcionise, kaze file not found?

sta da napisem posle assign(x,?

jel to moze drugacije nekako da se ucitava i ispisuje?

znaci niko ne zna kako da obojim tekst?

a jel mi moze neko pomoci oko array-a treba da mi bude array[1..500,1..500] a komp kaze da je to kao previse brojeva pa me zanima jel postoji drugaciji tip podataka tako da mogu da napravim array[1..500,1..500]?

evo i dva programa koje sam napravio(ponavljam moze lakse ali ja ne znam dovoljno o paskalu da bi to uradio na laksi nacin), to je bilo na takmicenju prosle godine, ali kod oba zadatka mi se u jednom test primeru pojavljuje neka greska. takodje mi kod programa vlada izvrsavanje traje preko 1 sekund za veci broj stranaka(recimo poslednja 2-3 test primera) ali je to verovatno zato sto sam ja radio na tezi nacin. I naravno u oba slucaja se podaci unose rucno jer nisam uspeo da ukapiram kako da se iscitavaju iz fajla.
 

Prilozi


Back
Top