Cine ma poate ajuta in Pascal?
Moderator: Moderatori
Cine ma poate ajuta in Pascal?
Am de facut cateva probleme in Pascal, dar sunt cam // cu acest limbaj (cam cu toate defapt).
Multumesc
Multumesc
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
Asta e problema clasica de backtracking si e data ca exemplu in "n" carti de tehnici de programare, mai ales in manualele de la liceu.
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer
P2. Un comis voiajor trebuie sa viziteze un numar de n orase. initial acesta se afla intr-unul din ele, notat cu 1. comis voiajorul doreste sa nu treaca de doua ori prin acelasi oras, si la intoarcere sa revina in orasul 1. cunoscand legaturile existente intre oras, se cere sa se tipareasca toate drumurile posibile pe care le poate efectua comisvoiajorul.
P3. pe malul unei ape se gasesc c canubali si m misionari. ei urmeaza sa treaca apa, avand la dispozitie o barca cu doua locuri. se stie ca, daca atat pe un mal cat si pe celalalt , avem mai multi canibali decat misionari , misionarii sunt mancati de canibali. se cere sa se scrie un program care sa furnizeze toate variantele de trecere a apei , in care misionarii sa nu fie mancati.
P3. sa se scrie in program care pozitioneaza pe o tabla de sah 8 regine , in asa fel incat nici una sa nu poata sa o ameninte sau sa o ia pe cealalta. aceiasi problema pentru n*n. (c9)
P4. cautarea unei valori date intr-un sir de numere, ordonate crescator, de dimensiune n. (c11)
P5. sa se realizeze un program care sa permita trecerea unui numar natural dintr-o baza naturala in alta baza naturala. (c12)
P6. sa se calculeze media geometrica a elementelor strict pozitive dintr-un vector de dimensiune n, data. (c10)
P3. pe malul unei ape se gasesc c canubali si m misionari. ei urmeaza sa treaca apa, avand la dispozitie o barca cu doua locuri. se stie ca, daca atat pe un mal cat si pe celalalt , avem mai multi canibali decat misionari , misionarii sunt mancati de canibali. se cere sa se scrie un program care sa furnizeze toate variantele de trecere a apei , in care misionarii sa nu fie mancati.
P3. sa se scrie in program care pozitioneaza pe o tabla de sah 8 regine , in asa fel incat nici una sa nu poata sa o ameninte sau sa o ia pe cealalta. aceiasi problema pentru n*n. (c9)
P4. cautarea unei valori date intr-un sir de numere, ordonate crescator, de dimensiune n. (c11)
P5. sa se realizeze un program care sa permita trecerea unui numar natural dintr-o baza naturala in alta baza naturala. (c12)
P6. sa se calculeze media geometrica a elementelor strict pozitive dintr-un vector de dimensiune n, data. (c10)
- Dr. Voidberg
- Moderator
- Posts: 2718
- Joined: Tue Dec 24, 2002 1:17 pm
La prima vedere:
p2 o faci cu grafuri
p3 banuiesc ca se poate face prin backtracking
p3 (cea cu reginele) cu backtracking, exact ca cea cu damele
p4 e cautarea binara
p5 si p6 sunt simple, la p5 trebuie sa stii algoritmul de trecere intr-o baza in alta, la p6 parcurgi vectorul
p2 o faci cu grafuri
p3 banuiesc ca se poate face prin backtracking
p3 (cea cu reginele) cu backtracking, exact ca cea cu damele
p4 e cautarea binara
p5 si p6 sunt simple, la p5 trebuie sa stii algoritmul de trecere intr-o baza in alta, la p6 parcurgi vectorul
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
Radical dreamer
P1
P1
"Error 113: Error in statement" DE CEEEEEE??????/
"Error 113: Error in statement" DE CEEEEEE??????/
Code: Select all
program problemadamelor;
const max=10;
begin
[b]type vector = array[1..max] of Integer;[/b]
var NrSol: Integer;
begin
Inc(NrSol);
WriteLn('Solutia nr. ',NrSol);
for i := 1 to n do
WirteLn('Dama de pe coloana ',i,' e pe linia ',x[i]);
WriteLn; ReadLn
end;
function potcontinua(x: vector; k: integer): Boolean;
var atac: Boolean; i: Integer;
begin
atac:= false; i := 1;
while (1 < k) and (not atac) do
if (x[i] = x[k]) or (abs(x[i]-x[k]) = k-i) then
atac := True
else i := i+1;
potcontinua := not atac
end;
procedure Dame(n: integer; var x: vector);
var k: Integer; cont: Boolean;
begin
k := 1; x[k] := 0;
while k > 0 do
begin
cont := False;
while (x[k] < n) and ( not cont) do
begin
x[k] := x[k] + 1;
if potcontinua(x,k) then cont := true
end;
if not cont then k := k - 1
else
if k = n then Scrie(n,x) else begin k := k + 1;
x[k] := 0 end
end
end;
var asezaredame: vector; nrdame: integer;
begin
ClrScr; WriteLn(' Problema damelor '); WriteLn;
WriteLn; NrSol:=0; NrDame := 5; Dame(NrDame, AsezareDame)
end.
Ciudate skill-uri de Pascal ai!!!
Incearca asa:
In cazu de fata arimea tablei ii 8! daca vrei sa schimbi marimea tablei inlocuesti nr. 8!
Incearca asa:
Code: Select all
uses crt;
type sir=array[1..8] of integer;
var i,j,n:integer;
v:boolean;
r:sir;
begin
clrscr;
i:=1;
r[1]:=0;n:=0;
repeat
while r[i]<8 do begin
r[i]:=r[i]+1;v:=true;
for j:=1to i-1 do
if (r[i]=r[j]) or(i-j=abs(r[i]-r[j])) then v:=false;
if v then
if i=8 then begin
n:=n+1;
writeln(' Solutia ',n:3);
for i:=1 to 8 do begin
for j:=1 to 8 do
if j=r[i] then write('R ')
else write('. ');
writeln;
end;
readln;
i:=7;
end
else begin
i:=i+1;
r[i]:=0;
end;
end;
i:=i-1;
clrscr;
until i=0;
readln;
readln;
end.
- Black Shark
- Moderator
- Posts: 3096
- Joined: Tue Nov 26, 2002 9:51 pm
nu ai unitul CRT, in care ai diverse functii de control al display-uluidiAndrei wrote:error 15: file not found CRT.TPU
acu ce are?
elimina "clrscr;" (procedura clear screen)din cod, sau fa rost de acest unit si pune-l in directorul in care tine compilatorul tau unit-urile
observatie : codul postat de tine e foarte prost scris cum a spus si arpad, de asemenea vad ca nu stii sa te ghidezi dupa erorile compilatorului, ar fi foarte bine sa iei pascalul de la baza, din punct de vedere "filozofic", stii cum se zice, u gotta crawl before you can run

1 out of 3 people who start smoking will eventually die. The other two apparently become immortal.
Si pe mine ma streseaza problemele de backtracking de la liceu si trebuie sa fac cumva sa'mi placa metoda asta. Pentru inceput e bine de stiut varianta pentru permutari, ca in rest nu se schimba decat anumite chestii. Incerc sa invat acum o varianta recursiva (fata de cea iterativa si imputita).
Daca vreti o problema serioasa (pentru mine cel putin) cu care ma lupt eu acuma luati d'aici:
Folosind liste circulare sa se retina coordonatele varfurilor unui poligon convex. Apoi sa se calculeze perimetrul si aria poligonului.
Sa fac cateva sublinieri, in caz ca nu cititi bine problema: in primul rand aveti grija mare ca poligonul sa iasa convex. Deci dupa fiecare citire de la tastatura a unui nou varf (coordonatele acestuia) trebuie verificat daca impreuna cu noul varf, vechiul poligon formeaza un altul convex si nu concav. Verificarea asta e necesara pt ca altfel nu raspundem la cerinta. Astept o solutie la problema
Daca vreti o problema serioasa (pentru mine cel putin) cu care ma lupt eu acuma luati d'aici:
Folosind liste circulare sa se retina coordonatele varfurilor unui poligon convex. Apoi sa se calculeze perimetrul si aria poligonului.
Sa fac cateva sublinieri, in caz ca nu cititi bine problema: in primul rand aveti grija mare ca poligonul sa iasa convex. Deci dupa fiecare citire de la tastatura a unui nou varf (coordonatele acestuia) trebuie verificat daca impreuna cu noul varf, vechiul poligon formeaza un altul convex si nu concav. Verificarea asta e necesara pt ca altfel nu raspundem la cerinta. Astept o solutie la problema

Omul bun la toate
Ma cam grabesc, dar incerc sa dau solutiile la macar 2 probleme. Daca vreti, mai scriu si pentru celelalte.
In particular, aceasta problema trebuia rezolvata tot prin BK chiar daca iti cerea "solutia optima". Daca nu ma insel e un exemplu clasic de problema NP-completa (nu accepta decat rezolvare in timp exponential). NU se rezolva cu grafuri.
Asta se rezolva tot prin backtraking. In general orice problema care iti cere sa generezi "toate" solutiile problemei se rezolva asa.diAndrei wrote:P2. Un comis voiajor trebuie sa viziteze un numar de n orase. initial acesta se afla intr-unul din ele, notat cu 1. comis voiajorul doreste sa nu treaca de doua ori prin acelasi oras, si la intoarcere sa revina in orasul 1. cunoscand legaturile existente intre oras, se cere sa se tipareasca toate drumurile posibile pe care le poate efectua comisvoiajorul.
In particular, aceasta problema trebuia rezolvata tot prin BK chiar daca iti cerea "solutia optima". Daca nu ma insel e un exemplu clasic de problema NP-completa (nu accepta decat rezolvare in timp exponential). NU se rezolva cu grafuri.
diAndrei wrote: P4. cautarea unei valori date intr-un sir de numere, ordonate crescator, de dimensiune n. (c11) [\quote]
Cel mai bun algoritm cunoscut mie in cazul asta e cel de cautare binara:
Presupunem ca V e vectorul cu elemnte si X valoarea cautata. Faci o functie (f) cu doi parametrii: extrema stanga (S) si extrema dreapta (G).
f(S,G)= f(S,(S+G)/2), daca V[(S+G)/2]>X
f((S+G)/2,G), daca V[(S+G)/2]<X
V[(S+G)/2] ,daca V[(S+G)/2]=X
(functie recursiva)
Sper ca n-am gresit...trebuie sa plec. La revedere!
The Devil is the perfect gentleman.
- Black Shark
- Moderator
- Posts: 3096
- Joined: Tue Nov 26, 2002 9:51 pm
poti face asta cu o comanda DOS, cum executi comenzi DOS din pascal ? poti afla aici
---
edit, era o mica aberatie in codul de acolo, nu stiu cum de...
varianta corecta asa ar fi :
---
edit, era o mica aberatie in codul de acolo, nu stiu cum de...
varianta corecta asa ar fi :
Code: Select all
{$M $4000,0,0 }
uses Dos;
var
Command: string;
begin
Write('Enter command to execute: ');
ReadLn(Command);
Command := '/C' + Command;
SwapVectors;
Exec(GetEnv('COMSPEC'),Command);
SwapVectors;
if DosError <> 0 then
WriteLn('Dos error #', DosError);
readln;
end.
1 out of 3 people who start smoking will eventually die. The other two apparently become immortal.