Advertisement
Kimossab

ED - 2014/07/18

Jun 9th, 2015
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.95 KB | None | 0 0
  1. /*
  2.         APENAS TESTEI A PARTE I POR QUESTOES ÓBVIAS...
  3.  
  4.         O RESTO ESTÁ COMO EU FARIA DURANTE O EXAME.
  5.  
  6.         MESMO QUE HAJA ERROS OU ELES IGNORAM OU DESCONTAM APENAS UMAS DECIMAS
  7.         HÁ ERROS QUE SÓ SE DÃO CONTA DURANTE TESTES.
  8.         NAO VOU ESTAR A CRIAR UM FICHEIRO NOVO PARA TESTAR AS FUNÇOES DAS LISTAS
  9.         NEM A CRIAR UMA ARVORE PARA TESTAR ISTO...
  10.  
  11.         TODAS AS SOLUÇÕES NAO SAO UNICAS. HÁ VARIAS FORMAS DE FAZER A MESMA TRETA
  12. */
  13.  
  14. #include <stdio.h>
  15. #include <ctype.h>
  16. #include <malloc.h>
  17. #include <string.h>
  18.  
  19. //PARTE I
  20. //1
  21. void escreveVectorInt(int *vector, int n)
  22. {
  23.     if(vector == NULL)
  24.         return;
  25.  
  26.     for(int i=0; i<n; i++)
  27.         printf("Indice %d = %d\n", i, vector[i]);
  28. }
  29.  
  30. //2 - Recursivo
  31. float SumRec(int n, int x, int i=1, int fact = 1)
  32. {
  33.     fact *= (x-1);
  34.     if(i == n)
  35.         return fact/i;
  36.     return fact/i + SumRec(n,x,i+1,fact);
  37. }
  38.  
  39. //2 - Iterativo
  40. float SumIt(int n, int x)
  41. {
  42.     int fact=1;
  43.     float sum = 0;
  44.  
  45.     for(int i=1; i<=n; i++)
  46.     {
  47.         fact *= (x-1);
  48.         sum+=fact/i;
  49.     }
  50.  
  51.     return sum;
  52. }
  53.  
  54. //3
  55. char *MinMaiu(char *src)
  56. {
  57.     int i=0;
  58.     bool mai = true;
  59.     char *t = (char*)malloc(sizeof(char) * strlen(src)+1);
  60.     while(src[i] != '\0')
  61.     {
  62.         if(src[i] < 'A' || (src[i] > 'Z' && src[i] < 'a') || src[i] > 'z')
  63.             t[i] = src[i];
  64.         else if(mai)
  65.         {
  66.             t[i] = toupper(src[i]);
  67.             mai = false;
  68.         }
  69.         else
  70.         {
  71.             t[i] = tolower(src[i]);
  72.             mai = true;
  73.         }
  74.         i++;
  75.     }
  76.     t[i] = '\0';
  77.     return t;
  78. }
  79. //3 - Sem tolower/toupper
  80. char *MinMaiuS(char *src)
  81. {
  82.     int i=0;
  83.     bool mai = true;
  84.     char *t = (char*)malloc(sizeof(char) * strlen(src)+1);
  85.  
  86.     while(src[i] != '\0')
  87.     {
  88.         if(mai && src[i] >= 'a' && src[i] <= 'z')
  89.         {
  90.             t[i] = src[i] + 'A'-'a';
  91.             mai = false;
  92.         }
  93.         else if(!mai && src[i] >= 'A' && src[i] <= 'Z')
  94.         {
  95.  
  96.             t[i] = src[i] + 'a'-'A';
  97.             mai = true;
  98.         }
  99.         else if(src[i] < 'A' || (src[i] > 'Z' && src[i] < 'a') || src[i] > 'z')
  100.             t[i] = src[i];
  101.         else
  102.         {
  103.             t[i] = src[i];
  104.             mai = !mai;
  105.         }
  106.         i++;
  107.     }
  108.     t[i] = '\0';
  109.     return t;
  110. }
  111.  
  112. //PARTE II - NAO TESTADA (Basicamente era isto que faria no teste...)
  113. typedef struct nozito
  114. {
  115.     Funcionario *Info;
  116.     struct nozito *Prox;
  117. }NO;
  118. typedef struct lista
  119. {
  120.     char Nome[100];
  121.     NO *Inicio;
  122. }Lista;
  123. //a
  124. typedef struct
  125. {
  126.     char Nome[100];
  127.     char cod[5];
  128.     char especialidade[150];
  129.     char morada[200];
  130.     int idade;
  131. }Funcionario;
  132.  
  133. Funcionario *CriarFunc(char *nome, char *codint, char *espec, char *mor, int idade)
  134. {
  135.     Funcionario *aux = (Funcionario *)malloc(sizeof(Funcionario));
  136.     strcpy(aux->Nome, nome);
  137.     strcpy(aux->cod, codint);
  138.     strcpy(aux->especialidade, espec);
  139.     strcpy(aux->morada, mor);
  140.     aux->idade = idade;
  141.     return aux;
  142. }
  143.  
  144. //b
  145. void LerFicheiroFunc(Lista *L, char *nficheiro)
  146. {
  147.     if(L == NULL)
  148.     {
  149.         L = (Lista *)malloc(sizeof(Lista));
  150.         strcpy(L->Nome, "Funcionários");
  151.         L->Inicio = NULL;
  152.     }
  153.     NO *no = L->Inicio;
  154.     NO *noaux = NULL;
  155.     Funcionario *func = NULL;
  156.     char nome[100];
  157.     char cod[5];
  158.     char esp[150];
  159.     char morada[200];
  160.     int idade;
  161.     FILE *f = fopen(nficheiro,"r");
  162.  
  163.     //Ha varias formas de fazer o seguinte...
  164.  
  165.     char buffer[500];
  166.     while(fgets(buffer,sizeof buffer, f))
  167.     {
  168.         sscanf(buffer, "%s%s%s%s%d",nome,cod,esp,morada,&idade);
  169.         func = CriarFunc(nome,cod,esp,morada,idade);
  170.         noaux = (NO *)malloc(sizeof(NO));
  171.         noaux->Prox = NULL;
  172.         noaux->Info = func;
  173.  
  174.         if(no == NULL)
  175.         {
  176.             L->Inicio = noaux;
  177.             no = L->Inicio;
  178.             continue;
  179.         }
  180.  
  181.         while(no->Prox != NULL)
  182.             no=no->Prox;
  183.  
  184.         no->Prox = noaux;
  185.         no = no->Prox;
  186.     }
  187.     fclose(f);
  188. }
  189.  
  190. //c
  191. int ContarMaioresIdade(Lista *L)
  192. {
  193.     NO *aux = L->Inicio;
  194.     int count = 0;
  195.     while(aux)
  196.     {
  197.         if(aux->Info->idade >= 18) // ou > 18 nao sei...
  198.             count++;
  199.         aux=aux->Prox;
  200.     }
  201.     return count;
  202. }
  203.  
  204. //d
  205. void Inverter(Lista *L)
  206. {
  207.     NO *aux = L->Inicio;
  208.     NO *aux2 = NULL;
  209.     NO *aux3;
  210.  
  211.     while(aux)
  212.     {
  213.         aux3 = aux->Prox;
  214.         aux->Prox = aux2;
  215.         aux2 = aux;
  216.         aux = aux3;
  217.     }
  218. }
  219.  
  220. //PARTE III
  221. //a
  222. typedef struct folha
  223. {
  224.     struct folha *esq;
  225.     struct folha *dir;
  226.     Funcionario *info;
  227. }FOLHA;
  228. typedef struct
  229. {
  230.     FOLHA *Topo;
  231. }ArvoreBin;
  232.  
  233. //b
  234. void ColFolLis(Lista *L, FOLHA *f)
  235. {
  236.     if(f->esq)
  237.         ColFolLis(L,f->esq);
  238.     if(f->dir)
  239.         ColFolLis(L,f->dir);
  240.     NO *aux = (NO *)malloc(sizeof(NO));
  241.     aux->Prox = NULL;
  242.     aux->Info = f->info;
  243.  
  244.     if(L == NULL)
  245.     {
  246.         L = (Lista *)malloc(sizeof(Lista));
  247.         L->Inicio = NULL;
  248.         strcpy(L->Nome,"Funcionários");
  249.     }
  250.  
  251.     if(L->Inicio == NULL)
  252.     {
  253.         L->Inicio = aux;
  254.         return;
  255.     }
  256.  
  257.     aux->Prox = L->Inicio;
  258.     L->Inicio = aux;
  259. }
  260. void ColocarFolhasLista(Lista *L, ArvoreBin *A)
  261. {
  262.     ColFolLis(L,A->Topo);
  263. }
  264.  
  265. //c
  266. void TrocarFolhas(FOLHA *f)
  267. {
  268.     if(!f)
  269.         return;
  270.  
  271.     TrocarFolhas(f->esq);
  272.     TrocarFolhas(f->dir);
  273.  
  274.     FOLHA *aux = f->esq;
  275.     f->esq = f->dir;
  276.     f->dir = aux;
  277. }
  278. void TrocarArvore(ArvoreBin *A)
  279. {
  280.     TrocarFolhas(A->Topo);
  281. }
  282.  
  283. void main()
  284. {
  285.     int vector[] = {1,2,4,8,16};
  286.     escreveVectorInt(vector,5);
  287.     printf("\n\nSumatorio:\nRecursivo: %f\nIterativo: %f",SumRec(5,10),SumIt(5,10));
  288.     printf("\nNova frase: %s\n", MinMaiuS("ola PESSOAL"));
  289. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement