Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program ListaC_Cortizas_Couyet;
- Type
- Fecha = record
- dia : integer;
- mes : integer;
- ano : integer;
- end;
- Ventas = record
- nFact : integer;
- cod : integer; {Ordenada por éste criterio}
- cant : integer;
- FechaVenta : Fecha;
- end;
- ListaV = ^nodoV;
- nodoV = record
- datos : Ventas;
- sig : ListaV;
- end;
- Sucursal = record
- nombre : string [60];
- codigo : integer;
- Listado : ListaV;
- end;
- ListaS = ^nodoS;
- nodoS = record
- dato:Sucursal;
- sig:ListaS;
- end;
- Arbol = ^nodoA;
- nodoA = record
- indice: integer; {será el codigo, dado que pide estar ordenada por este criterio}
- datoA: integer; {Serán las unidades vendidas}
- izq: Arbol;
- der:Arbol;
- end;
- Var
- X:integer;
- A : Arbol;
- L : ListaS;
- NuevaS : Sucursal;
- NuevaV: Ventas;
- Procedure ArmoListado (var Lista : ListaV; NuevaV : Ventas); {Crea Nodo de la venta y lo añade a la lista de ventas de forma ordenada}
- Var
- nue:ListaV; act, ant : ListaV;
- Begin
- new (nue);
- nue^.datos := NuevaV;
- ant := Lista;
- act := Lista;
- If(Lista = nil) then begin
- nue^.sig := nil; {solo para el primer caso entra en este if}
- Lista := nue;
- end
- else begin
- While (act <> nil) or (NuevaV.cod > act^.datos.cod) do begin
- ant := act;
- act:= act^.sig;
- end;
- ant^.sig := nue;
- nue^.sig := act;
- end;
- end;
- Procedure AgregoAListaS (L:ListaS; NuevaS: Sucursal);
- Var
- nue : ListaS;
- Begin
- new (nue);
- nue^.dato := NuevaS;
- nue^.sig := L;
- L := nue
- end;
- Procedure CreoLista (var L : ListaS; NuevaS : Sucursal; NuevaV : Ventas); {Lee los valores y los agrega a la lista}
- Begin
- Writeln ('Ingrese Nombre Sucursal, en caso de contrario ingrese ZZZ');
- Readln(NuevaS.nombre);
- Writeln (' ');
- While ( NuevaS.nombre <> 'ZZZ') do begin
- NuevaS.Listado := nil;
- Writeln('Ingrese Codigo de sucursal');
- Readln( NuevaS.codigo);
- Writeln (' ');
- Writeln('Ingrese Codigo de Venta, en caso contrario ingrese 0');
- Readln(NuevaV.cod);
- Writeln (' ');
- While (NuevaV.cod <> 0 ) do begin
- Writeln('Ingrese Numero de Factura');
- Readln(NuevaV.nFact);
- Writeln (' ');
- Writeln('Ingrese cantidad vendida');
- Readln(NuevaV.cant);
- Writeln (' ');
- Writeln('Ingrese Fecha de Venta');
- Writeln('Dia :(1-30)');
- Readln(NuevaV.fechaVenta.dia);
- Writeln ( ' ' );
- While ( NuevaV.fechaVenta.dia < 1) or (NuevaV.fechaVenta.dia > 30) do begin
- Writeln( 'Fecha incorrecta, ingrese nuevamente un dia (1 a 30)');
- Readln(NuevaV.fechaVenta.dia);
- Writeln (' ');
- end;
- Writeln('Mes:(1-12)');
- Readln(NuevaV.fechaVenta.mes);
- Writeln (' ');
- While (NuevaV.fechaVenta.mes < 1) or (NuevaV.fechaVenta.mes > 12) do begin
- Writeln ( ' Fecha incorrecta, ingrese nuevamente un mes (1 a 12)');
- Readln ( NuevaV.fechaVenta.mes);
- Writeln (' ');
- end;
- Writeln('Año: (1900-2015)');
- Readln(NuevaV.fechaVenta.ano);
- Writeln (' ');
- While (NuevaV.fechaVenta.ano < 1900) or (NuevaV.fechaVenta.ano > 2015) do begin
- Writeln ('Fecha incorrecta, ingrese nuevamente un año (1900 a 2015)');
- Readln (NuevaV.fechaVenta.ano);
- Writeln (' ');
- end;
- ArmoListado(NuevaS.Listado, NuevaV);
- Writeln('Ingrese Codigo de Venta, en caso contrario ingrese 0');
- Readln(NuevaV.cod);
- Writeln (' ');
- end;
- AgregoAListaS (L, NuevaS);
- Writeln('Ingrese Nombre Sucursal, en caso contrario ingrese ZZZ');
- Readln(NuevaS.nombre);
- Writeln (' ');
- end;
- end;
- Procedure AgregoArbol (var A:arbol; aux:ListaV);
- Begin
- If (A=nil) then begin
- New(A);
- A^.indice :=aux^.datos.cod;
- A^.datoA := aux^.datos.cant;
- A^.izq := nil;
- A^.der := nil;
- end
- else
- If ( aux^.datos.cod < A^.indice ) then AgregoArbol (A^.izq, aux)
- else
- If(aux^.datos.cod > A^.indice ) then AgregoArbol (A^.der, aux)
- else
- A^.datoA := A^.datoA + aux^.datos.cant; {En el caso de que sea el mismo producto, se suman las cantidades}
- end;
- Procedure ArmoArbol (var A:Arbol; L:ListaS);
- Var
- aux: ListaV;
- Begin
- While (L <> nil) do begin
- aux := L^.dato.Listado;
- While (aux <> nil) do begin
- AgregoArbol(A, aux);
- aux := aux^.sig;
- end;
- L := L^.sig;
- end;
- end;
- Procedure LeoArbol (A:Arbol);
- Begin
- If (A <> nil) then begin
- LeoArbol(A^.izq);
- Writeln ('codigo : ', A^.indice);
- Writeln ('cantidad : ', A^.datoA);
- LeoArbol (A^.der);
- end;
- end;
- Begin
- L :=nil;
- CreoLista(L, NuevaS, NuevaV);
- ArmoArbol(A, L);
- LeoArbol (A);
- Readln(X);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement