karlangadas

Archivo maestro parcial lp1

May 15th, 2017
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.72 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <cstring>
  5. #define INC 5
  6. using namespace std;
  7. template<typename T>
  8. void incrementar_str(T **&lst,int numElem){
  9.     if(lst==NULL){
  10.         lst=new T*[INC+1];
  11.         for(int i=0;i<INC;i++) lst[i]=NULL;
  12.     }
  13.     else{
  14.         T **lstAux=new T *[numElem+INC+1];
  15.         for(int i=0;i<numElem;i++) lstAux[i]=lst[i];
  16.         for(int i=numElem;i<=numElem+INC;i++) lstAux[i]=NULL;
  17.         delete []lst;
  18.         lst=lstAux;
  19.     }
  20. }
  21. template<typename T>
  22. void incrementarnum(T *&lst,int numElem){
  23.     if(lst==NULL){
  24.         lst=new T[INC+1];
  25.         for(int i=0;i<INC+1;i++) lst[i]=-1;
  26.     }
  27.     else{
  28.         T *lstAux=new T[numElem+INC+1];
  29.         for(int i=0;i<numElem;i++) lstAux[i]=lst[i];
  30.         for(int i=numElem;i<numElem+INC+1;i++) lstAux[i]=-1;
  31.         delete []lst;
  32.         lst=lstAux;
  33.     }
  34. }
  35. template<typename T>
  36. void agregararrnum(T **&lst,T *elem){
  37.     if(lst==NULL){
  38.         incrementar_str(lst,0);
  39.         lst[0]=elem;      
  40.     }
  41.     else{
  42.         int numElem=0;
  43.         for(int i=0;lst[numElem]!=NULL;i++){
  44.             numElem++;
  45.         }
  46.         if(numElem%INC==0) {incrementar_str(lst,numElem);}
  47.         lst[numElem]=elem;
  48.     }  
  49. }
  50. template<typename T>
  51. void agregarOrdnum(T *lst,T elem,int &cant){
  52.     int numElem=0,idx=0;
  53.     for(int i=0;i<cant;i++){
  54.         if(lst[numElem]==elem) return;
  55.         if(lst[numElem]<elem) idx++;
  56.         numElem++;
  57.     }
  58.     for(int i=numElem;i>idx;i--)
  59.         lst[i]=lst[i-1];
  60.     lst[idx]=elem;
  61.     cant++;
  62. }
  63. template<typename T>
  64. void agregarnum(T *&lst,T elem){
  65.     if(lst==NULL){
  66.         incrementarnum(lst,0);
  67.         lst[0]=elem;      
  68.     }
  69.     else{
  70.         int numElem=0;
  71.         for(int i=0;lst[numElem]!=-1;i++){
  72.             numElem++;
  73.         }
  74.         if(numElem%INC==0) {incrementarnum(lst,numElem);}
  75.         lst[numElem]=elem;
  76.     }  
  77. }
  78. template<typename T>
  79. void memExacta_num(T *input,T *&output,int numElem){
  80.     output=new T[numElem+1];
  81.     for(int i=0;i<numElem;i++)
  82.         output[i]=input[i];
  83.     output[numElem]=-1;
  84. }
  85. void memExacta_str(char**input,char ** & output,int numElem){
  86.     output=new char*[numElem+1];
  87.     for(int i=0;i<numElem;i++){
  88.         int size=strlen(input[i])+1;
  89.         output[i]=new char[size];
  90.         strcpy(output[i],input[i]);
  91.     }
  92.     output[numElem]=NULL;
  93. }
  94. void split_Tokens(char* linea, char ** & palabras, int n){
  95.     int numPal = 0;
  96.     char *auxPal[100];
  97.     if(!isblank(linea[0])){
  98.         auxPal[numPal] = linea;
  99.         numPal++;
  100.     }
  101.     for(int i = 1; linea[i] != '\0'; i++){
  102.         if(!isblank(linea[i]) and (isblank(linea[i-1]) or (linea[i-1] == '\0')) ){
  103.             auxPal[numPal] = &linea[i];
  104.             numPal++;
  105.         }
  106.         if(isblank(linea[i]) and !isblank(linea[i-1]) )
  107.             linea[i] = '\0';
  108.         if(numPal == n) break;    
  109.     }
  110.     memExacta_str(auxPal,palabras,numPal);
  111. }
  112.  
  113. int agregarOrd_str(char**&lst,char *elem){      
  114.     if(lst==NULL){
  115.         incrementar_str(lst,0);
  116.         lst[0]=elem;
  117.     }
  118.     else{
  119.         int numElem=0,idx=0;
  120.         for(int i=0;lst[numElem];i++){
  121.             if(strcmp(lst[numElem],elem)==0) return 0;
  122.             if(strcmp(lst[numElem],elem)<0) idx++;
  123.             numElem++;
  124.         }
  125.         if(numElem%INC==0) incrementar_str(lst,numElem);
  126.         for(int i=numElem;i>idx;i--)
  127.             lst[i]=lst[i-1];
  128.         lst[idx]=elem;
  129.     }
  130.     return 1;
  131. }
  132. void a_mayus(char *linea){
  133.     for(int i=0;i<strlen(linea);i++)
  134.         if(linea[i]>='a' and linea[i]<='z') linea[i]+='A'-'a';
  135. }
  136. int tipodePal(char *word){
  137.     if(!isdigit(word[0])) return 1;
  138.     for(int i=0;i<strlen(word);i++)
  139.         if (word[i]=='.') return 3;
  140.     return 2;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment