Fonaments de gestió de fitxers, estructures i gestió dinàmica de memòria
Salta a la navegació
Salta a la cerca
Contingut
- 1 Cadenes de caràcters
- 2 Pas d'arguments pel terminal
- 3 Fitxers
- 4 Estructures a C
- 5 Diccionaris a Python
- 6 Unions a C
- 7 Enumeració a C
- 8 Introducció a les classes a Python
- 9 Assignació dinàmica de memòria a C
Cadenes de caràcters
Gestió de cadenes a Python
"""
gestioCadenes.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
szB = szA[:3] # Retorna els tres primer caràcters
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[3:] # Retorna a partir del tercer caràcter
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[4:9] # Retorna a partir del quart caràcter els cinc caràcters següents
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[:-3] # Retorna tots els caràcters excepte els tres últims
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[-8:] # Retorna els darrers 8 caràcters
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
Comptar caràcters a Python
"""
compta.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
Comptar caràcters a C
/*
compta.c
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[]="Una frase amb paraules";
printf("szA: \"%s\" té %d caràcters\n",szA,strlen(szA));
return 0;
}
Copiar cadenes a Python
"""
copia01.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
szB = szA # A Python es poden copiar cadenes amb un =. Cosa que no és possible en C
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
Copiar cadenes a C
/*
copia01.c
Còpia de cadenes
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[]="Una frase amb paraules",szB[99];
printf("szA: \"%s\" té %d caràcters\n",szA,strlen(szA));
strcpy(szB,szA);// Això no ho puc fer en C: szB = szA;
printf("szB: \"%s\" té %d caràcters\n",szB,strlen(szB));
return 0;
}
/*
copia02.c
Còpia d'uns quants caràcters
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[]="Una frase amb paraules",szB[99];
printf("szA: \"%s\" té %d caràcters\n",szA,strlen(szA));
// strcpy(szB,szA);// szB = szA;
printf("szB: \"%s\" te %d caràcters\n",szB,strlen(strncpy(szB,szA,5)));
return 0;
}
/*
copia03.c
Còpia a partir de certa posició
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[]="Una frase amb paraules",szB[99];
printf("szA: \"%s\" té %d caràcters\n",szA,strlen(szA));
strcpy(szB,&szA[0]);// strcpy(szB,szA);
printf("szB: \"%s\" te %d caràcters\n",&szB[14],strlen(&szB[14]));
strcpy(szB,&szA[4]);
printf("szB: \"%s\" te %d caràcters\n",szB,strlen(szB));
return 0;
}
Concatenació de cadenes a Python
"""
concatenacio.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
szB = " i aquí continua"
szA = szA + szB # El mateix que szA += szB . El signe + concatena en Python
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
Concatenació de cadenes a C
/*
concatenacio.c
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[99]="Una frase amb paraules",szB[] = " i aqui continua";
printf("szA: \"%s\" té %d caràcters\n",szA,(int)strlen(szA));
// strcat(szA,szB); // Concatena szB després de szA
printf("szA: \"%s\" té %d caràcters\n",szA,(int)strlen(strcat(szA,szB)));
return 0;
}
Comparació de cadenes a C
/*
comparacioCadenes.c
*/
#include <stdio.h>
#include <string.h>
int main(){
char szA[99]="frase",szB[] = "frase",szC[] = "Una altra frase";
if (!strcmp(szA,szB)){ // si strcmp() retorna 0 són cadenes iguals
printf("\"%s\" és igual a \"%s\"\n",szA,szB);
}else{
printf("\"%s\" no és igual a \"%s\"\n",szA,szB);
}
strcpy(szA,szC);
if (!strcmp(szA,szB)){
printf("\"%s\" és igual a \"%s\"\n",szA,szB);
}else{
printf("\"%s\" no és igual a \"%s\"\n",szA,szB);
}
return 0;
}
Mètodes de cadenes a Python
Pas d'arguments pel terminal
Pas d'arguments pel terminal a C
// argc01.c
#include <stdio.h>
int main(int argc,char*argv[]){
if (argc == 2){
printf("L'argument es: \"%s\"\n",argv[1]);
}else{
printf("No hi ha un argument \n");
}
return 0;
}
Pas d'arguments pel terminal a Python
# arg01.py
import sys
if len(sys.argv) == 2:
print("L'argument es: \"%s\""%(sys.argv[1]))
sys.exit(0) # Equivalent a return 0 en C
else:
print("No hi ha un argument")
sys.exit(1) # Equivalent a return 1 en C
Fitxers
Saber si un arxiu existeix a C
// fitxerExisteix.c
#include <stdio.h>
#include <string.h>
#define N 99
int main(int argc,char*argv[]){
FILE *f;
char szA[N];
if (argc == 2){
strcpy(szA,argv[1]);
}else{
printf("Nom del fitxer: ");
scanf("%s", szA);
}
if(f = fopen(szA,"r")){
printf("%s existeix \n", szA);
fclose(f);
}else{
printf("%s no existeix \n", szA);
}
return 0;
}
Saber si un arxiu existeix a Python
Python File Open a w3schools.com
# fitxerExisteix.py
import sys
nomFitxer = ""
if len(sys.argv) == 2:
nomFitxer = sys.argv[1]
else:
nomFitxer = input("Nom del fitxer: ")
try:
f = open(nomFitxer)
print("L'arxiu %s existeix"%nomFitxer)
f.close()
except:
print("L'arxiu %s no existeix"%nomFitxer)
Lectura i escriptura d'arxius a C
putc() i getc()
// m8p01.c - Creació, escriptura i lectura d'un arxiu - // http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m8/d97m8p1.htm #include <stdio.h> #include <stdlib.h> int main(){ FILE *f; char car; //procés d'escriptura system("clear"); if((f=fopen("arxiu.txt","w"))==NULL){ printf("Error al intentar obrir l'arxiu\n"); return -1; } printf("Introduïu un text (Premeu return per acabar): "); while ((car=getchar())!='\n') putc(car,f); fclose(f); //procés de lectura printf("Lectura de l'arxiu\n"); if((f=fopen("arxiu.txt","r"))==NULL){ printf("Error a l'intentar obrir l'arxiu\n"); return 1; } while((car=getc(f))!=EOF) putchar(car); putchar('\n'); fclose(f); return 0; }
fread()
// fitxerLlegintTotAlhora.c
#include <stdio.h>
#include <string.h>
#define N 99
int main(int argc, char* argv[]){
FILE *f;
char szFitxer[N], ch, szContingut[999];
if (argc == 2){
strcpy(szFitxer, argv[1]);
} else{
printf("Nom fitxer: ");
scanf("%s", szFitxer);
}
f = fopen(szFitxer, "r");
if(f){ //si f es NULL (0) vol dir que el arxiu no s'ha pogut obrir
printf("L'arxiu %s existeix\n", szFitxer);
printf("El contingut de l'arxiu és: \n");
fread(szContingut, 1, 999, f);
printf("%s", szContingut);
fclose(f);
} else{
printf("L'arxiu %s no existeix\n", szFitxer);
}
return 0;
}
fputs() i fgets()
// m8p02.cc - Lectura i escriptura amb fgets() i fputs() - // http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m8/d97m8p2.htm #include <stdio.h> #include <string.h> int main(){ FILE *apuntador; char cadena[80]; if (( apuntador = fopen("fitxers.txt","w"))==NULL){ puts("\nNo puc crear l'arxiu fitxers.txt"); return 1; }else{ printf("Introduïu text de vàries línies.\n"); printf("Una línia en blanc per acabar.\n"); while (strlen(fgets(cadena,80,stdin))!=1){ // stdin és l'arxiu de l'entrada (teclat al terminal) fputs(cadena,apuntador); // fputs("\n",apuntador); } fclose(apuntador); } // lectura if (( apuntador = fopen("fitxers.txt","r"))==NULL){ puts("\nNo puc llegir l'arxiu: fitxers.txt"); return 1; }else{ while (fgets(cadena,80,apuntador) != NULL) // Lectura línia a línia printf("%s",cadena); fclose(apuntador); } return 0; }
fprintf() i fscanf()
// m8p03.c - Lectura i escriptura amb fprintf() i fscanf() - // http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m8/d97m8p3.htm #include <stdio.h> int main(){ FILE *f; int codi; char nom[20]; char cognom[20]; float nota; f = fopen("prova.txt","w"); printf("\n Introduïu les dades."); printf("\n Escriviu 0 al codi per finalitzar\n"); if (f!=NULL){ do{ printf("\nIntroduïu el codi: "); scanf(" %d",&codi); if(codi==0) break; printf("Introduïu el nom: "); scanf(" %s",nom); printf("Introduïu el cognom: "); scanf(" %s", cognom); printf("Introduïu la nota: "); scanf(" %f",¬a); fprintf(f, "%d %s %s %f\n",codi, nom, cognom, nota); }while (1); fclose(f); } /* lectura */ printf("\n\n************** Lectura ************* \n\n"); if ( (f = fopen("prova.txt","r")) != NULL ){ while (fscanf(f, "%d %s %s %f",&codi, nom,cognom, ¬a) != EOF){ printf("%d %s %s %f\n",codi, nom, cognom, nota); } fclose(f); } return 0; }
Lectura i escriptura d'arxius a Python
Python File Open a w3schools.com
Python File Write a w3schools.com
Python Delete File a w3schools.com
Llegir arxius línia a línia
# fitxerLlegintLiniaPerlinia.py
import sys
if len(sys.argv) == 2:
nomFitxer = sys.argv[1]
else:
nomFitxer = input("Nom arxiu: ")
try:
f = open(nomFitxer)
print("%s existeix"%nomFitxer)
print("El contingut de l'arxiu és: ")
nL = 1
while True:
szLinia = f.readline()
if szLinia == "":
break
print("%d) %s"%(nL, szLinia),end = "")
nL += 1
f.close()
except:
print("%s no existeix"%nomFitxer)
Afegint contingut a un arxiu
f = open("demofile2.txt", "a")
f.write("Afegint contingut!\n")
f.close()
# obrint i llegint l'arxiu després d'afegir contingut
f = open("demofile2.txt", "r")
print(f.read())
Sobreescrivint contingut a un arxiu
f = open("demofile3.txt", "w")
f.write("Ups! He esborrat el contingut!")
f.close()
# obrint i llegint l'arxiu després de sobreescriure'l
f = open("demofile3.txt", "r")
print(f.read())
Estructures a C
/*
st03.c
*/
#include <stdio.h>
struct treballador{
char nom[50];
char cognom1[30];
char cognom2[30];
int edat;
};
void vPresentaTreballador(struct treballador stT, const char *szQui){
printf("%s: %s %s %s te %d anys\n",szQui,stT.nom,stT.cognom1,stT.cognom2,stT.edat);
}
void vAugmentaUnAny(struct treballador *pStT){
(*pStT).edat += 1;
}
void vAugmentaUnAny2(struct treballador *pStT){
//(*pStT).edat += 1;
pStT->edat += 1;
}
int main(){
struct treballador *pT,enginyer, administratiu = {"Eric","Alvarez","Cuerva",18}, auxiliar;
vPresentaTreballador(administratiu,"Administratiu");
pT = &administratiu;
vPresentaTreballador(*pT,"Apuntador a administratiu");
vAugmentaUnAny(pT); //Pas per referència de l'estructura
vPresentaTreballador(*pT,"1) Apuntador a administratiu amb un any incrementat");
vAugmentaUnAny2(pT); //Pas per referència de l'estructura
vPresentaTreballador(*pT,"2) Apuntador a administratiu amb un any incrementat");
return 0;
}
Diccionaris a Python
"""
diccionari.py
"""
alumne = {
"nom": "Eric",
"cognom1": "Alvarez",
"cognom2": "Cuerva",
"edat": 18
}
print(alumne)
alumne["edat"] += 1
print(alumne)
Unions a C
Comparativa entre estructures i unions al d97
/* unions.c http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m7/d97m7p7.htm */ #include <stdio.h> struct notes { int mat, fis, inf,qui, fil ; }; union alumne { struct notes N; int nota[5]; }; int main(){ int ct; union alumne joan; joan.N.mat=10; joan.N.fis=9; joan.N.inf=7; joan.N.qui=9; joan.N.fil=10; printf("\nmat\tfis\tinf\tqui\tfil\n"); for(ct=0;ct<5;ct++){ printf("%d\t",joan.nota[ct]); } return 0; }
Enumeració a C
/*
enum01.c
*/
#include <stdio.h>
enum dia {dilluns, dimarts, dimecres = 7, dijous, divendres, dissabte, diumenge};
int main(){
enum dia avui;
avui = divendres;
if (avui == divendres){
printf("És divendres\n");
}else{
printf("No és divendres\n");
}
printf("avui: %d\n",(int)avui);
avui = diumenge;
if (avui == divendres){
printf("És divendres\n");
}else{
printf("No és divendres\n");
}
return 0;
}
Introducció a les classes a Python
Classes de Python al w3schools
Creació d'una classe
# classe00.py class LaMevaClasse: x = 5 print(LaMevaClasse)
Creació d'un objecte
# classe01.py class LaMevaClasse: x = 5 p1 = LaMevaClasse() print(p1.x)
Mètode __init__()
# classe02.py
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
print(p1.name)
print(p1.age)
Mètode __str__()
# classe03.py
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "%s(%s)"%(self.name,self.age)
p1 = Person("John", 36)
print(p1)
Mètodes personalitzats
# classe04.py
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Hello my name is " + self.name)
p1 = Person("John", 36)
p1.myfunc()
Assignació dinàmica de memòria a C
a = (double*)calloc(n*n, sizeof(double)); a = (double*)malloc(n*n*sizeof(double)); free(a);
a = new double[n*n]; delete(a);
a = (int*)malloc(sizeof(int)); a = (int*)realloc(a,(n+2)*sizeof(int));