Documente Academic
Documente Profesional
Documente Cultură
Raport
la lucrarea de laborator nr.7-8
la Programarea Calculatoarelor
Tema: Prelucrarea caracterelor i irurilor caracteriale n C
Varianta nr.23
Chiinu 2016
Obiectivele temei:
1. Aprofundarea cunotinelor n limbajul i mediul TurboC i perfecionarea tehnicii de programare n
prelucrarea tipul caracter i irurilor de caractere n C.
2. nsuirea procedeelor referitoare la irurile caracteriale.
3. Analiza specificului de algoritmizare i programare a fragmentelor de texte prin comparaia soluiilor
stereotipe i celor eficiente de introducere, afiare i diverse manipulri asupra textelor: parcurgeri,
cutri, schimbri i rearanjri etc.
Subiectele temei i ordinea executrii:
Studierea principiilor prelucrrii (descrierii, declarrii, formrii, etc.) tipului caracter i irurilor
caracteriale n C.
Studierea metodelor i tehnicilor de baz de prelucrare a textelor ca iruri caracteriale, analiznd
exemplele din indicaii i de reflectat n raport cu comentariile de rigoare.
Elaborarea algoritmului i programului de soluionare a variantei respective (Anexa).
Depanarea programului i verificarea corectitudinii cu ajutorul testelor elaborate.
Note teoretice:
O variabil de tip caracter se declar prin specificatorul de tip char. Zona
alocat undei variabile de tip char este de un octet, putnd avea 256 de valori
distincte. Ea este sufucient de mare pentru a putea memora orice caracter al setului
de caractere implementate pe calculator.
Ordinul de mrime al variabilelor caracter este ntre -128 i 127. Caracterele
setului ASCII sunt toate pozitive, dar o constant caracter specificat printr-o
secven de evitare poate fi i negativ, de exemplu ,\377 are valoarea -1.
Constantele de tip caracter pot fi scrise n mai multe moduri:
1. Un caracter imprimabil ntre apostrofuri: *,3,a;
2. Un numr de la 0 la 255 precedat de caracterul #: #27 (codul
caracterului ESC), #65 (codul caracterului A); etc.
Un ir de caractere este o succesiune de zero sau mai multe caractere ale
setului de
caractere ASCII extins, scrise pe o singur linie n program i ncadrate ntre
apostrofuri, irul fr nici un caracter ntre apostrofuri se numete ir nul vid.
O constant caracter const dintr-un singur caracter scris ntre apostrofuri,
de exemplu ,x. Valoarea unei constant character este valoarea numeric a
caracterului, n setul de caractere al calculatorului. O constant simbolic este un
identificator cu valoare de constant. Valoarea constantei poate fi orice ir de
caractere introdus prin construcia #define nume_constant constanta_caracter. De
exemplu #define MAX 1000.
sau
ntrebri de autocontrol:
1. Un ir de caractere este o succesiune de zero sau mai multe caractere ale
setului de caractere ASCII extins, scrise pe o singur linie n program i
ncadrate ntre apostrofuri. irul fr nici un caracter ntre apostrofuri se
numete ir nul sau vid.
char s[NMAX],cv[NMAX],cuv[NMAX][25],*p,c;
int ncuv=0,l,i,j;
if (i<ncuv{
i++;
generare1(i);
}
}
void generare(int i){
strcpy(cv,cuv[i]);
l=strlen(cv);
c=cv[0];
for(j=0;j<l-1;j++)
cv[j]=cv[j+1];
cv[l-1]=c;
printf("%s ",cv);
if (i<ncuv){
i++;
generare(i);
}
}
void main() {
printf("Introduceti irul de caractere:\n");
gets(s);
// a)
printf("\n a) Deplasarea primei litere la sfarsitul cuvintelor:\n");
generare(0);
printf("\b.\n\n");
// b)
printf("b) Inlaturarea penultimei litere a cuvintelor:\n");
generare1(0);
printf("\b.\n\n");
// c)
printf("c) Inlaturarea literei din mijloc a cuvintelor de lungime impara:\n");
generare2(0);
printf("\b.\n\n");
getch();
}
5. Unde este eroarea?
char s[14];
strcpy(s, "Ce mai faci ?\n");
Greeala const n faptul c nu poate fi accesat new line ntr-un ir de
caractere.
char s[14];
scanf("%s", &s);
void main() {
char ch[100]={"Cel mai bun prieten"};
char sda[100];
firstword(ch, sda);
puts(sda);
}
Rezultatul execuiei:
Rezultatul execuiei:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#define LUNG 80
. #define NR 15
char tab_cuv[NR][LUNG];
int nr_cuv=0; /* numarul cuvintelor introduse */
void citire_cuv(void){
printf("*** Se introduc max %d cuvinte, term. cu CTRL/Z:\n",NR);
while(nr_cuv<NR && gets(tab_cuv[nr_cuv]))nr_cuv++;
/* la CTRL/Z gets returneaza NULL (= 0) */
/* citirea se poate face si cu scanf:
while(nr_cuv<NR && scanf("%s",tab_cuv[nr_cuv])!=EOF)nr_cuv++; */
/* daca terminarea se face cu un cuvant vid:
while(nr_cuv<NR && strcmp("",gets(tab_cuv[nr_cuv])))nr_cuv++; */
}
void constr_cuv(void){
char c,cuv[NR+1]; /* lungimea maxima este egala cu numarul maxim de cuvinte + 1
pentru terminator */
int i,j; /* i parcurge cuvintele din tab_cuv, j pozitiile din cuv */
for(i=j=0;i<nr_cuv;i++)
if(isalpha(c=tolower(tab_cuv[i][strlen(tab_cuv[i])-1])))
cuv[j++]=c;
cuv[j]='\0';
printf("*** Cuvantul construit:|%s|\n",cuv);
}
void cuv_max(void){
int i,lung_crt,lung_max=0;
char * p_max; /* pointerul spre cuvantul maxim */
/* se poate memora indicele cuvantului maxim: int i_max;
sau memora cuvantul maxim intr-un sir: char c_max[LUNG]; */
for(i=0;i<nr_cuv;i++)
if((lung_crt=strlen(tab_cuv[i]))>lung_max){
p_max=tab_cuv[i];
lung_max=lung_crt;
}
printf("*** Cuv de lungime maxima %d este:|%s|\n",lung_max,p_max);
}
void cuv_vocale(void){
int i;
puts("*** Cuvintele ce incep cu vocale:");
for(i=0;i<nr_cuv;i++)
switch(toupper(tab_cuv[i][0])){
case 'A': case'E': case 'I': case 'O': case 'U':puts(tab_cuv[i]);
} /* in loc de switch se putea folosi
char c; if(c=toupper(tab_cuv[i][0]),c=='A' ||
c=='E' || ...)puts(tab_cuv[i]); */
}
void main(void){
citire_cuv();
cuv_max();
constr_cuv();
cuv_vocale();
getch();
}
Rezultatul execuiei:
Start
int i,k,j,q,n,h
gets(s)
k=0
j=0
h=0
i=0; i<strlen(s);i++
Da
s[i]>='0' && s[i]<='9'
Nu
s1[k++]=s[i]
s1[k]='\0'
s[i]=='a' || s[i]=='u' || Da
s[i]=='e' || s[i]=='i' || s[i]
=='o'
Nu
s2[j++]=s[i]
s2[j]='\0'
Da
s[i]>='A' && s[i]<='Z'
Nu
s4[h++]=s[i]
s4[h]='\0'
A
A
strcpy(s3,s)
strrev(s3)
q=strcmp(s,s3)
"cifre: "
puts(s1)
"vocale: "
puts(s2)
Nu Da
q==0
puts(s4)
Sfirsit
Rezultatul execuiei:
Concluzie: