Fonaments de gestió de fitxers, estructures i gestió dinàmica de memòria

De binefa.com
Salta a la navegació Salta a la cerca

Cadenes de caràcters

Gestió de cadenes en Python

"""
gestioCadenes.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))
szB = szA[:3] # Agafa els tres primer caràcters
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[3:] # Agafa a partir del tercer caràcter
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[4:9] # Agafa 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] # Agafa tots els caràcters excepte els tres últims
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))
szB = szA[-8:] # Agafa els darrers 8 caràcters
print ("szB: \"%s\" té %d caràcters"%(szB,len(szB)))

Comptar caràcters en Python

"""
compta.py
"""
szA = "Una frase amb paraules"
print ("szA: \"%s\" té %d caràcters"%(szA,len(szA)))

Comptar caràcters en C

/*
compta.c
*/
#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,(int)strlen(szA));

   return 0;
}

Copiar cadenes en 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 en 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,(int)strlen(szA));
   strcpy(szB,szA);// szB = szA;
   printf("szB: \"%s\" té %d caràcters\n",szB,(int)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,(int)strlen(szA));
   // strcpy(szB,szA);// szB = szA;
   printf("szB: \"%s\" te %d caràcters\n",szB,(int)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,(int)strlen(szA));
   strcpy(szB,&szA[0]);// strcpy(szB,szA);
   printf("szB: \"%s\" te %d caràcters\n",&szB[14],(int)strlen(&szB[14]));
   strcpy(szB,&szA[4]);
   printf("szB: \"%s\" te %d caràcters\n",szB,(int)strlen(szB));

   return 0;
}

Concatenació de cadenes en 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 en 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 en 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;
}

Pas d'arguments pel terminal

Pas d'arguments pel terminal en 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 en Python

# arg01.py
import sys

if len(sys.argv) == 2:
   print("L'argument es: \"%s\""%(sys.argv[1]))
else:
   print("No hi ha un argument")

Fitxers

Saber si un arxiu existeix en 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 en Python

# 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)

Llegir arxius línia a línia en C

// fitxerLlegintLiniaPerlinia.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;
}

Llegir arxius línia a línia en Python

# 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: ")
   szContingut = f.read()
   nL = 1
   szLinia = ""
   for c in szContingut:
       #print("%d) %s"%(nL, linia))
       #nL+=1
       if c != "\n":
           szLinia += c
       else:
           print("%d) %s"%(nL, szLinia))
           nL+=1
           szLinia = ""
   f.close()
except:
   print("%s no existeix"%nomFitxer)

Estructures en 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 en Python

Diccionaris al w3schools

"""
diccionari.py
"""
alumne = {
 "nom": "Eric",
 "cognom1": "Alvarez",
 "cognom2": "Cuerva",
 "edat": 18
}

print(alumne)
alumne["edat"] += 1 
print(alumne)

Unions

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ó

/*
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 en Python

Classes de Python al w3schools

Creació d'una classe

# classe00.py
class LaMevaClasse:
 x = 5

print(LaMevaClasse)

Creació d'un objecte

  1. 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()