Pascal/Turbo Pascal - Ayuda,ejercicio para aprender Pascal

 
Vista:
sin imagen de perfil

Ayuda,ejercicio para aprender Pascal

Publicado por yo (1 intervención) el 05/04/2014 19:07:00
Hola me podríais ayudar a resolver este ejercicio, he buscado tanto por internet que cada vez estoy mas liada, estoy aprendiendo Pascal y se me hace muy difícil, todo es nuevo para mi. Gracias de ante mano.

hacer un programa más completo, que clasifique las llamadas en nacionales, provinciales y locales (N, P, L) y realizar los cálculos anteriores para cada tipo de llamadas.

El resultado debe ser parecido a:

Símbolo de MS - DOS

Duracion de la llamada (0 para terminar): 10
Tipo de llamada (N/P/L) N
Duracion de la llamada (0 para terminar): 20
Tipo de llamada (N/P/L) P
Duracion de la llamada (0 para terminar): 30
Tipo de llamada (N/P/L) L
Duracion de la llamada (0 para terminar): 40
Tipo de llamada (N/P/L) l
Duracion de la llamada (0 para terminar): 0
>> Nacional
> Llamadas: 1 Duracion: 10.0 > Media: 10.0
>> Provincial
> Llamadas: 1 Duracion: 20.0 > Media: 20.0
>> Local
> Llamadas: 2 Duracion: 70.0 > Media: 35.0
>> Total
> Numero de llamadas: 4
> Duracion total: 100.0
> Duracion media: 25.0


y mi programa es este, que he modificado tantas veces, que ya estoy liadísima con todo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Program perfil_llamadas;
 
var
   duracion:integer;
   duracionN,duracionP,duracionL:integer;
   respuesta:char;
   llamadasN,llamadasP,llamadasL:integer;
   duracion_total:integer;
   duracionTN,duracionTP,duracionTL:integer;
   Tllamadas,TllamadasN,TllamadasP,TllamadasL:integer;
   Tmedia:real;
   mediaN,mediaP,mediaL:real;
   TmediaN,TmediaP,TmediaL:real;
 
 
(*-- Programa Principal -- *)
begin
 
 
	duracionTN:=0;
	duracionTP:=0;
	duracionTL:=0;
    duracion_total:=0;
    Tllamadas:=0;
	llamadasN:=0;
	TllamadasP:=0;
	TllamadasL:=0;
	TllamadasN:=0;
    llamadasN:=0;
	llamadasP:=0;
	llamadasL:=0;
	TmediaN:=0;
	TmediaP:=0;
	TmediaL:=0;
 
 
	writeln('Duracion de la llamada (0 para terminar):  ',duracion);
	readln(duracion);
    write('Tipo de llamada (N/P/L)  ',respuesta);
    readln(respuesta);
 
     while(duracion>0)do
          begin
                     writeln('Duracion de la llamada (0 para terminar):  ',duracion);
            readln(duracion);
                write('Tipo de llamada (N/P/L)  ',respuesta);
                    readln(respuesta);
 
 
 
        if(respuesta='N')then
           begin
            duracionN:=duracionN+duracion;
             llamadasN:=llamadasN+1;
             duracionTN:=duracionN+duracionTN;
             TllamadasN:=llamadasN+TllamadasN;
             mediaN:=duracionN/llamadasN;
             TmediaN:=mediaN+TmediaN;
             readln;
            end;
 
       if(respuesta='P')then
           begin
             duracionP:=duracionP+duracion;
             llamadasP:=llamadasP+1;
             duracionTP:=duracionP+duracionTP;
             TllamadasP:=llamadasP+TllamadasP;
             mediaP:=duracionP/llamadasP;
             TmediaP:=mediaP+TmediaP;
             readln;
           end;
 
       if(respuesta='L')then
                   begin
         duracionL:=duracionL+duracion;
          llamadasL:=llamadasL+1;
          duracionTL:=duracionL+duracionTL;
          TllamadasL:=llamadasL+TllamadasL;
                      mediaL:=duracionL/llamadasL;
          TmediaL:=mediaL+TmediaL;
          readln;
                    end;
      end;
 
    Tllamadas:=(TllamadasN+TllamadasP+TllamadasL);
    duracion_total:=duracion_total+duracion;
            Tmedia:=duracion_total/Tllamadas;
 
       if(duracion=0)then
           begin
             write(' >> Nacional');
                write('> Llamadas: ',TllamadasN,'Duracion: ',duracionTN,'> Media: ',TmediaN:0:2);
                readln;
             write('>> Provincial');
                 write('> Llamadas: ',TllamadasP,'Duracion: ',duracionTP,'> Media: ',TmediaP:0:2);
         readln;
                write('>> Local');
                write('> Llamadas: ',TllamadasL,'Duracion: ',duracionTL,'> Media: ',TmediaL:0:2);
                readln;
        writeln('>> Total');
             write('> Numero de llamadas:  ',Tllamadas);
             readln(Tllamadas);
       write('> Duracion total: ',duracion_total);
             readln(duracion_total);
             write('> Duracion media: ',Tmedia:0:2);
             readln(Tmedia);
            end;
 
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda,ejercicio para aprender Pascal

Publicado por ramon (2158 intervenciones) el 07/04/2014 00:25:08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{Mira a ver si esto te sirve}
 
 program llamadas;
  uses
      crt;
   var
      nllamad : integer;
     tduraccin, tduraccip, tduraccil : real;
     tmedian, tmediap, tmedial   : real;
     nacionales, provinciales, locales : integer;
     durac : real;
 
 
    procedure entradas;
    var
       tec : char;
    begin
    durac := 1;
    while durac <> 0 do
    begin
       clrscr;
       writeln('  Entre Datos [0] Termina');
       writeln;
       write('  Entre Tiempo Llamada  : ');
       readln(durac);
       if durac <> 0 then
       begin
       write('  Entre Llamada [N/P/L] : ');
       repeat
          tec := upcase(readkey);
       until tec in['N','P','L'];
    case tec of
 'N' : Begin
          nacionales := nacionales + 1;
          tduraccin := tduraccin + durac;
       end;
 'P' : Begin
          provinciales := provinciales + 1;
          tduraccip := tduraccip + durac;
       end;
 'L' : Begin
          locales := locales + 1;
          tduraccil := tduraccil + durac;
       end;
      end;
     end;
    end;
  end;
 
  procedure presenta_calculos;
  begin
     clrscr;
     writeln('**** Resumen De Llamadas ****');
     writeln;
     writeln('  Numero Llamadas Nacionales    = ',nacionales);
     writeln('  Tiempos Llamadas Nacionales   = ',tduraccin:0:2);
     writeln;
     writeln('  Numero Llamadas Provinciales  = ',provinciales);
     writeln('  Tiempos Llamadas Provinciales = ',tduraccip:0:2);
     writeln;
     writeln('  Numero Llamadas Locales       = ',locales);
     writeln('  Tiempos Llamadas Locales      = ',tduraccil:0:2);
     writeln;
     writeln('  Numero De Llamadas            = ',
                nacionales + provinciales + locales);
     writeln('  Duraccion Total               = ',
                          tduraccin + tduraccip + tduraccil:0:2);
     writeln('  Duracion Media                = ',
                 (tduraccin + tduraccip + tduraccil) / 3:0:2);
     writeln;
     writeln(' <<< Pulse Una Tecla >>>');
     readkey;
   end;
 
   begin
       entradas;
       presenta_calculos;
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 35
Ha disminuido 1 puesto en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Ayuda,ejercicio para aprender Pascal

Publicado por Enrique Martin (15 intervenciones) el 05/02/2019 22:12:33
Otra posible solución al problema planteado, entre todos vamos aprendiendo cositas, lo mejor es que tomen ideas y sean vosotros mismos los que desarrollen sus propias soluciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
Program llamadaWhileNPL;
 
var
 dullama:			integer; (*Variable para todas las llamadas*)
 
 dumediallama:	    real; (*variable para calcular la duracion media*)
 dumediallamaL:		real;
 dumediallamaP:		real;
 dumediallamaN:		real;
 
 dutotallama:		real; (*variable para calcular la duracion total*)
 dutotallamaL:		real;
 dutotallamaP:		real;
 dutotallamaN:		real;
 
 numerollama:		integer; (*contador para el numero de llamadas*)
 numerollamaL:      integer;
 numerollamaP:      integer;
 numerollamaN:      integer;
 
 opcion:            char; (*variable para determinar el caracter local,
                                   nacional o provincial de cada llamada*)
 
begin
(*Ponemos a cero los contadores y la media*)
 dumediallama:=  0;
 dumediallamaL:= 0;
 dumediallamaP:= 0;
 dumediallamaN:= 0;
 
 dutotallama:=  0;
 dutotallamaL:= 0;
 dutotallamaP:= 0;
 dutotallamaN:= 0;
 
 numerollama:=  0;
 numerollamaL:= 0;
 numerollamaP:= 0;
 numerollamaN:= 0;
 
 writeln;
 writeln('              -### Bienvenido/a al registro de llamadas ###-');
 writeln(); (*Inciamos pidiendo la duracion de la llamada*)
 write('Introduzca la duracion de la llamada (0 si desea finalizar):  ');
 readln (dullama);
 writeln;
 (*Primera condicion, si la duracion de la llamada es cero termina
   el programa*)
 if (dullama = 0) and (numerollama=0)then
   begin
    writeln;
    write('El numero de llamadas es: ',numerollama,'.');
    write (' No hay resultados que mostrar');
    readln;
   end;
 
 (*Iniciamos el bucle while-do para repetir una serie de acciones
   si se cumple la condicion de que duracion de la llamada sea mayor a cero*)
 
 while (dullama > 0) do
    begin
    (*Declaramos el contador y el acumulador general*)
     dutotallama := dutotallama + dullama;
     numerollama := numerollama + 1;
 
     (*Ahora preguntamos que tipo de llamada es la realizada para
       iniciar las acciones que nos pide el ejercicio*)
     writeln ('Que tipo de llamada es: ');
     writeln ('> Local: L');
     writeln ('> Provincial: P');
     writeln ('> Nacional: N');
     writeln;
     write ('Pulse L, P o N:   ');
     readln( opcion);
     writeln;
 
     (*Con la condicional multiple case-of evaluamos la variable opcion
       y realizamos las acciones necesarios para obtener los datos que
       nos piden desde el ejercicio*)
 
     case (opcion) of
          'L','l':  begin(*Llamadas locales*)
                     numerollamaL := numerollamaL + 1;
                    (*Usamos la variable dullama para calcular duracion total*)
                    (*Utilizamos igualmente contador y acumulador especificos
                      de las llamadas locales, provinciales y nacional*)
                     dutotallamaL:= dutotallamaL + dullama;
                     dumediallamaL:= dutotallamaL/numerollamaL;
                    end;
          'P','p':  begin(*Llamadas provinciales*)
                     numerollamaP:= numerollamaP + 1;
                     dutotallamaP:= dutotallamaP + dullama;
                     dumediallamaP:= dutotallamaP/numerollamaP;
                    end;
          'N','n':  begin
                     numerollamaN:= numerollamaN + 1;
                     dutotallamaN:= dutotallamaN + dullama;
                     dumediallamaN:= dutotallamaN/numerollamaN;
                    end;
      end;
     (*Primero emplee la formula de varios if-then anidados pues me
       resulto mas sencillo, posteriormente realicé la misma accion mediante
       selectiva multiple, os dejo las dos opciones, la del if esta inhabilitada*)
 
    (* if(opcion = 'l') or (opcion ='L') then
       {begin usamos la variable dullama para calcular duracion total}
        numerollamaL := numerollamaL + 1;
        dutotallamaL:= dutotallamaL + dullama;
        dumediallamaL:= dutotallamaL/numerollamaL;
       end
     else
     if (opcion = 'p') or (opcion = 'P') then
       begin
        numerollamaP:= numerollamaP + 1;
        dutotallamaP:= dutotallamaP + dullama;
        dumediallamaP:= dutotallamaP/numerollamaP;
       end
     else
     if (opcion = 'n') or (opcion = 'N') then
       begin
        numerollamaN:= numerollamaN + 1;
        dutotallamaN:= dutotallamaN + dullama;
        dumediallamaN:= dutotallamaN/numerollamaN;
       end; *)
 
      write ('Introduzca la duracion de la llamada (0 si desea finalizar):  ');
      readln (dullama);
      writeln;
      (*Al introducir el cero termina el bucle*)
 end;
 
 (*Evaluamos la variable dullama para mostrar los resultados*)
 if (dullama = 0) then
   begin
    writeln ('No hay mas resultados que mostrar');
    writeln;
 
    writeln ('>>>Local');
    writeln; (*declaramos la division para hacer la media*)
    dumediallamaL:= dutotallamaL/numerollamaL;
    (*Mostramos los contadores y acumuladores de cada tipo de llamada*)
    write('>llamadas: ', numerollamaL);
    write('  duracion: ', dutotallamaL:3:2);
    writeln('  Media: ', dumediallamaL:3:2);
    writeln;
 
    writeln ('>>>Provincial');
    writeln;
    dumediallamaP:= dutotallamaP/numerollamaP;
    write('>llamadas: ', numerollamaP);
    write('  duracion: ', dutotallamaP:3:2);
    writeln('  Media: ', dumediallamaP:3:2);
    writeln;
 
    writeln ('>>>Nacional');
    writeln;
    dumediallamaN:= dutotallamaN/numerollamaN;
    write('>llamadas: ', numerollamaN);
    write('  duracion: ', dutotallamaN:3:2);
    writeln( '  Media: ', dumediallamaN:3:2);
    writeln;
 
    writeln ('> Numero de llamadas: ', numerollama);
    writeln;
    writeln ('> Duracion total: ', dutotallama :3:2);
    writeln;
    dumediallama:= dutotallama/numerollama;
    writeln ('> Media total: ', dumediallama:3:2);
    readln;
        end;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar