Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1: Cadena de Caracteres
Ha obtenido 0 punto(s) sobre 0 hasta ahora.
Cadenas ("Strings")
Definición
Pascal, como cualquier otro lenguaje, debe tener la capacidad de procesar frases como
"Presione ENTER para continuar", "Calculando...", "Proceso terminado", etc.
Una cadena de caracteres o string es una serie de caracteres cuya longitud (número de
caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo
de dato string que almacena información de texto. Este dato se puede almacenar en
constantes y en variables de cadena. Una variable de cadena está declarada para la palabra
string seguida de la longitud máxima de la cadena encerrada entre corchetes.
Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la
sección var o en type.
Var
Type
Var
Mensaje : Cadena80;
Nombre : Cadena40;
Es importante recordar que si se declara como Type inmediatamente después, dentro de las
variables, se debe declarar una variable que haga referencia al Type.
Una vez declaradas las variables de cadena se pueden realizar asignaciones o bien
operaciones de lectura / escritura en los programas.
Por ejemplo:
Program Ejemplo;
Var
Mensaje = string[40];
Begin
Writeln;
Readln
End.
Una cadena físicamente es una estructura de una secuencia de 0 hasta 255 caracteres de
longitud. Sin embargo, la ocupación en memoria de una cadena es un número de bytes igual
al de caracteres de la cadena más uno. Así la cadena:
`Programador´
tiene una longitud de 11 caracteres, entonces ocupará en memoria 12 bytes. Esto se debe a
que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada
en memoria.
Var
Sucede que, entonces, la longitud lógica de la variable será de 11 bytes pero la longitud
física será de 20 bytes pues así fue definida.
Asignación de cadenas
A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de
asignación o con una sentencia de lectura (read). Ambas situaciones se pueden describir con
la ecuación:
Destino fuente
Dependiendo del tamaño (longitud de la cadena) de las cadenas fuente y destino se pueden
presentar tres casos diferentes que analizaremos a partir de la siguiente declaración de
variables de cadena.
Var
Este caso no presenta problemas, pues cada posición de cad2 se rellena con un carácter.
Cad2 I N F O R M A T I C A
1 2 3 4 5 6 7 8 9 10
11
Cad3 := Cad2;
Resultará que Cad3 tiene 15 caracteres y sólo hay 11 caracteres en cad2. La cadena Cad3
seguirá teniendo una longitud máxima de 15 caracteres, pero sólo se almacenan en ella
ahora 11 caracteres y su longitud actual será de 11.
Cad3 I N F O R M A T I C A longitud actual = 11
Cad1 := Cad2;
En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se
puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en
Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Asignación
Es posible asignar una cadena a otra cadena, incluso aunque esta última sea de longitud
física más pequeña. En este caso, no se produce ningún error en tiempo de compilación ni
en tiempo de ejecución. Se producirá un truncamiento de los datos de la cadena mayor a la
longitud física máxima de la cadena más pequeña.
Ejemplo:
Var
Cad1 : string[15];
Begin
End.
Comparaciones
`0´ < `1´ `1´ < `2´ `8´ < `9´
`A´ < `B´ `C´ < `D´ `M´ > `B´
`a´ < `h´ `m´ > `b´ `p´ < `r´
Concatenación
Otra operación básica que se pueda realizar con cadenas es la concatenación. La operación
de concatenación. La concatenación es el proceso de combinar dos o más cadenas en una
sola cadena. Turbo Pascal proporciona dos métodos independientes para realizar la
concatenación.
Program union;
Var
Begin
Cad1 := `Programa´;
End.
Ejemplo:
- Función Insert: Inserta una subcadena en una cadena. La sintaxis es la siguiente:
Si una vez insertada la nueva cadena el tamaño total excede al límite de la variable, se
truncará la cadena hasta su longitud máxima.
- Función Pos (Posición): Esta función permite determinar si una cadena está contenida
en otra. En este caso, la función devuelve la posición donde comienza la cadena buscada en
la cadena fuente. Si la cadena no existe, se devuelve un resultado de 0. Utiliza la siguiente
sintaxis:
- Función Copy (Copiar): Esta función devuelve una cadena de caracteres (subcadena)
extraída de una cadena.
Ejemplo:
Como las cadenas son arrays, se puede acceder a sus elementos en forma individual.
Ejemplo:
Entonces:
Nombre[6] i
Nombre[10] a
Cadenas de Caracteres
Representación de caracteres
Códigos
UNICODE
o 16 bits (2 bytes) => 65.536 caracteres (aprox.34.000 utilizados)
Definición de cadena
Ejemplos
Errores
a: cadena [256]
vacia : cadena [0]
Almacenamiento en memoria
getChar
insChar
remChar
cantPal
addPal
InsPal
remPal
Operaciones primitivas
Asignación
Las constantes cadenas deben ir entre comillas, Si se asigna una cadena con longitud mayor
a otra con longitud menor, lo habitual es que el compilador simplemente trunque la cadena
mayor para ajustarla al tamaño máximo de la cadena menor.
Acceso
Para acceder a cada carácter de la cadena se usa la misma notación que con los arrays
Para modificar un carácter dentro de la cadena también se usa la notación de los arrays
nombre[i] ← ‘a’
nombre[5] ← ‘o’ {nombre quedaría como ‘Alejo’}
A diferencia de lo que ocurre con los arrays, las cadenas son accesibles globalmente por su
nombre
sin necesidad de acceder elemento a elemento (es decir, no es necesario acceder carácter a
carácter)
nombre ← ‘María
Lectura y Escritura
LEER(nombre)
ESCRIBIR(nombre)
LEER(nombre[i])
ESCRIBIR(nombre[i])
Concatenación de cadenas
Restricciones
o Si la posición a partir de la cual se desea extraer la subcadena es mayor que
la longitud de la cadena original, el resultado será la cadena vacía.
o El número de caracteres a extraer debe ser un número entero positivo mayor
que cero; en caso contrario debe devolverse la cadena vacía.
o En el caso de que el número de caracteres a extraer superen el tamaño de la
cadena original, entonces se procederá al truncamiento de la cadena
extraída.
Ejemplo U3 - Cadenas
Creando Clase Conjunto usando Vectores
Cantidad
Elementos
Constructor
setElem
getElem
setDim
getDim
Pertenece
Agregar
Remover
1.3. Implementacion:
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Dialogs;
const
MAX_ELE=1200;
type
{ Conjunto }
Conjunto=Class
private
elem:array[1..MAX_ELE]of char;
dim:integer;
public
constructor Conjunto();
procedure setElem(pos:integer;ele:char);
function getElem(pos:integer):char;
procedure setDim(n:integer);
function getDim():integer;
function pertenece(ele:char):boolean;
procedure agregar(ele:char);
procedure remover(ele:char);
end;
implementation
{ Conjunto }
constructor Conjunto.Conjunto();
var
i:integer;
begin
dim:=0;
for i:=1 to MAX_ELE do
elem[i]:=char(0);
end;
end.
program t3e1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, uconjunto
{ you can add units after this };
var
c:conjunto;
i:integer;
begin
c:=conjunto.Conjunto();
c.agregar('a');
c.agregar('b');
c.agregar('c');
c.agregar('d');
c.agregar('a');
write('Los Elementos Son : ');
for i:=1 to c.getDim() do // a,b,c,d
write(c.getElem(i),', ');
writeln;
if(c.pertenece('c'))then
begin
Writeln('Eliminando : c');
c.remover('c');
end;
if(NOT c.pertenece('x'))then
begin
Writeln('No Pertenece : x');
end;
write('Los Elementos Son : ');
for i:=1 to c.getDim() do // a,b,d
write(c.getElem(i),', ');
writeln;
end.
Realice una Aplicación que me permita Administrar una Clase llamada Cadena , que
realice las siguientes operaciones: (Con Interfaces Gráficas)
Operaciones:
getDim
setChar
getChar
addChar
remChar
Video
Para desarrollar en Java Utilizaremos (Android Studio) :
Nombre Activity: fcadena
1.- En el Formulario :
* Layout / Formulario (FCadena.xml)
<TextView
android:id="@+id/L1"
android:layout_x="0dp"
android:layout_y="0dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Cadena de Caracteres"
android:textSize="22sp"
android:textStyle="bold" />
<TextView
android:id="@+id/L2"
android:layout_x="0dp"
android:layout_y="30dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="{ }"
android:textSize="22sp"
android:textStyle="bold" />
<EditText
android:id="@+id/ele"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="70dp"
android:ems="60"
android:inputType="text"
android:hint="Caracter..."/>
<EditText
android:id="@+id/pos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="110dp"
android:ems="2"
android:inputType="number"
android:hint="Posicion..."/>
<Button
android:id="@+id/B1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="150dp"
android:text="Crear"
android:onClick="eCrear" />
<Button
android:id="@+id/B2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="190dp"
android:text="Adicionar Caracter"
android:onClick="eAddChar" />
<Button
android:id="@+id/B3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="230dp"
android:text="Fijar Caracter"
android:onClick="eSetChar" />
<Button
android:id="@+id/B4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="270dp"
android:text="Obtener Caracter"
android:onClick="eGetChar" />
<Button
android:id="@+id/B5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="310dp"
android:text="Remover Caracter"
android:onClick="eRemChar" />
<Button
android:id="@+id/B6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_x="0dp"
android:layout_y="340dp"
android:text="Salir"
android:onClick="eSalir" />
</AbsoluteLayout>
2.- Ahora creamos la Clase Cadena, ademas de la Clase Conjunto:
* Clase Conjunto(Conjunto.java)
* Eventos(fcadena.java)
public class Fcadena extends Activity {
EditText ele,pos;
TextView L2;
Cadena C;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppCompat
setContentView(R.layout.fcadena);
ele = (EditText)findViewById(R.id.ele);
pos = (EditText)findViewById(R.id.pos);
L2 = (TextView)findViewById(R.id.L2);
}
public void eCrear(View view){
C = new Cadena();
actualizarCad();
ShowMessage("Objeto Creado...");
}
public void eAddChar(View view){
C.addChar(ele.getText().charAt(0));
actualizarCad();
ShowMessage("Adicion Caracter...");
}
public void eSetChar(View view){
int p=Integer.parseInt(pos.getText().toString());
char e=ele.getText().charAt(0);
C.setChar(p,e);
actualizarCad();
ShowMessage("Fijar Caracter...");
}
public void eGetChar(View view){
int p=Integer.parseInt(pos.getText().toString());
char car=C.getChar(p);
ele.setText(car);
actualizarCad();
ShowMessage("Obtener Caracter...");
}
public void eRemChar(View view){
int p=Integer.parseInt(pos.getText().toString());
C.remChar(p);
actualizarCad();
ShowMessage("Eliminar Caracter...");
}
public void ShowMessage(String msg){
Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
}
public void actualizarCad(){
L2.setText("{ ");
for (int i = 1; i <=C.getDim() ; i++)
L2.append(C.getChar(i)+" ");
L2.append(" }");
}