Cine ma poate ajuta in Pascal?

Despre PHP, MySQL, HTML, C++, VB, JAVA etc.

Moderator: Moderatori

Post Reply
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

Cine ma poate ajuta in Pascal?

Post by diAndrei »

Am de facut cateva probleme in Pascal, dar sunt cam // cu acest limbaj (cam cu toate defapt).

Multumesc
User avatar
euufilip
Posts: 169
Joined: Mon May 26, 2003 4:28 pm

Post by euufilip »

identifica-le si apoi carti si "google"
:) sa le auzim
euu
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

Post by diAndrei »

Prima:
P1. fiind data o tabla de sah, de dimensiune n * n, se cer toate solutiile de aranjare a n dame astfel incat sa nu se afle doua dame pe aceiasi linie, coloana sau diagonala (damele sa nu se atace reciproc).
User avatar
Dr. Voidberg
Moderator
Posts: 2718
Joined: Tue Dec 24, 2002 1:17 pm

Post by Dr. Voidberg »

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
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

Post by diAndrei »

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)
User avatar
Dr. Voidberg
Moderator
Posts: 2718
Joined: Tue Dec 24, 2002 1:17 pm

Post by Dr. Voidberg »

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
96 percent of Americans believe that Mr. T still pities the fool.
Radical dreamer
sorcersbk
Posts: 18
Joined: Tue Oct 14, 2003 2:52 pm

?

Post by sorcersbk »

PROBLEME mai grele nu ai?
Sorcersbk
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

Re: ?

Post by diAndrei »

sorcersbk wrote:PROBLEME mai grele nu ai?
Depinde de intrebare:
-daca e serioasa: NU
-daca e ironica: de ce? sunt prea simple? asta e tema :evilbat:
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

P1

Post by diAndrei »

P1

"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.
User avatar
Arpad
Posts: 74
Joined: Sun Nov 02, 2003 12:58 am

Post by Arpad »

Ciudate skill-uri de Pascal ai!!!
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.
In cazu de fata arimea tablei ii 8! daca vrei sa schimbi marimea tablei inlocuesti nr. 8!
User avatar
Arpad
Posts: 74
Joined: Sun Nov 02, 2003 12:58 am

Post by Arpad »

In legatura cu gresala ta: Nu stiu ce sa zic, ceea ce ai scris tu nu seamana a Pascal! Ai invatat C cumva si esti in faza in care traduci structurile din C in Pascal?
diAndrei
Posts: 149
Joined: Sat Dec 20, 2003 4:18 pm

Post by diAndrei »

error 15: file not found CRT.TPU

acu ce are?
User avatar
Black Shark
Moderator
Posts: 3096
Joined: Tue Nov 26, 2002 9:51 pm

Post by Black Shark »

diAndrei wrote:error 15: file not found CRT.TPU

acu ce are?
nu ai unitul CRT, in care ai diverse functii de control al display-ului
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.
User avatar
Daedalus
Posts: 3150
Joined: Thu Jun 20, 2002 3:00 am

Post by Daedalus »

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 ;)
Omul bun la toate
Aramis
Posts: 2
Joined: Sat Jan 10, 2004 12:36 pm

Post by Aramis »

Ma cam grabesc, dar incerc sa dau solutiile la macar 2 probleme. Daca vreti, mai scriu si pentru celelalte.
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.
Asta se rezolva tot prin backtraking. In general orice problema care iti cere sa generezi "toate" solutiile problemei se rezolva asa.
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.
User avatar
babivas
Posts: 25
Joined: Thu Mar 18, 2004 2:10 pm

pascal

Post by babivas »

Pe mine cine ma poate ajuta?
vreau o instructiune sau o functie de copiere a unui fisier de tip exe dintr-un folder in altul.
multumesc[/b]
User avatar
Black Shark
Moderator
Posts: 3096
Joined: Tue Nov 26, 2002 9:51 pm

Post by Black Shark »

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 :

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.
User avatar
babivas
Posts: 25
Joined: Thu Mar 18, 2004 2:10 pm

Post by babivas »

iti multumesc. Daca si merge iti multumesc inca odata
Post Reply