Mudanças entre as edições de "PRG2-2015-2b"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 82: Linha 82:
 
   string metodo;
 
   string metodo;
 
   string path;
 
   string path;
 +
  string http;
 
   int status;
 
   int status;
 
   long bytes;
 
   long bytes;
 
   string agente;
 
   string agente;
 
};
 
};
   int dia, ano, hora, minuto, segundo, codigo;
+
   int dia, ano, hora, minuto, segundo, status;
   char ip[20], data[35], traco[2], colchete[1], barra[1], aspas[1], metodo[9], paths[250], usuario [45], agente[40];
+
  int long bytes;
 +
   char ip[20], data[35], metodo[9], paths[250], usuario [45], agente[40], http[200];
 
   int datadia, dataano;
 
   int datadia, dataano;
 
+
 
int main(int argc, char *argv[]) {
 
int main(int argc, char *argv[]) {
 
   // testa se o nome do arquivo foi passado pela linha de comando
 
   // testa se o nome do arquivo foi passado pela linha de comando
Linha 97: Linha 99:
 
   }
 
   }
 
   Registro Regist;
 
   Registro Regist;
 +
  Lista<Registro> Encadeada;
 +
 
 
   
 
   
 
 
 
   // Cria o objeto ifstream, o que implica abrir o arquivo
 
   // Cria o objeto ifstream, o que implica abrir o arquivo
 
   ifstream arq(argv[1]);
 
   ifstream arq(argv[1]);
Linha 111: Linha 114:
 
while (not arq.eof()) {
 
while (not arq.eof()) {
 
     string linha;
 
     string linha;
   
+
 
     getline(arq, linha);
 
     getline(arq, linha);
 
+
sscanf( linha.c_str(), "%s %s %s %c %s %d %c %c %s %s %s ", ip, traco, usuario, colchete, data, &codigo, barra, aspas, metodo, paths, agente);
+
//sscanf( linha.c_str(), "%s %s %s %c %s %d %c %c %s %s %s ", ip, traco, usuario, colchete, data, &codigo, barra, aspas, metodo, paths, agente);
 
+
sscanf(linha.c_str(), "%s %*c %s [%s %*d] \"%s %s %[^\"]\" %d %ld %*s \"%[^\"]\"", ip, usuario, data, metodo, paths, http, &status, &bytes, agente);
 
string datacompleta= data;   
 
string datacompleta= data;   
 
string dia = datacompleta.substr(0,datacompleta.find('/'));
 
string dia = datacompleta.substr(0,datacompleta.find('/'));
 
+
 
datadia= atoi(dia.c_str());
 
datadia= atoi(dia.c_str());
 
datacompleta.erase(0,3);
 
datacompleta.erase(0,3);
 
+
 
string datames = datacompleta.substr(0,3);
 
string datames = datacompleta.substr(0,3);
 
datacompleta.erase(0,4);
 
datacompleta.erase(0,4);
 
+
 
string anos = datacompleta.substr(0,4);
 
string anos = datacompleta.substr(0,4);
 
datacompleta.erase(0,5);
 
datacompleta.erase(0,5);
Linha 132: Linha 135:
 
Regist.usuario= usuario;
 
Regist.usuario= usuario;
 
Regist.metodo = metodo;
 
Regist.metodo = metodo;
Regist.status = codigo;
+
Regist.status = status;
 +
Regist.bytes = bytes;
 
Regist.path= paths;
 
Regist.path= paths;
 +
Regist.http= http;
 
Regist.agente=agente;
 
Regist.agente=agente;
 
Regist.data.dia=datadia;
 
Regist.data.dia=datadia;
 
Regist.data.mes=datames;
 
Regist.data.mes=datames;
 
Regist.data.ano=dataano;
 
Regist.data.ano=dataano;
 
+
    cout << ": " <<Regist.ip<< endl;
+
Encadeada.adiciona(Regist);
    cout << ": " << Regist.usuario<< endl;
+
 
    cout << ": " << Regist.metodo<< endl;
 
    cout << ": " << Regist.status<< endl;
 
    cout << ": " << Regist.path<< endl;
 
    cout << ": " << Regist.agente<< endl;
 
    cout << ": " << Regist.data.dia<< endl;
 
    cout << ": " << Regist.data.mes<< endl;
 
    cout << ": " << Regist.data.ano<< endl;
 
 
   }
 
   }
 
   arq.close();
 
   arq.close();
 
+
 
 +
  cout<< "Comprimento: "<< Encadeada.comprimento()<<endl;
 +
  for (int pos=0;pos<Encadeada.comprimento();pos++)
 +
  {
 +
      cout<< "IP: "<< Encadeada.obtem(pos).ip<<endl;
 +
      cout<< "Usuario: "<< Encadeada.obtem(pos).usuario<<endl;
 +
      cout<< "Metodo: "<< Encadeada.obtem(pos).metodo<<endl;
 +
      cout<< "Status: "<< Encadeada.obtem(pos).status<<endl;
 +
      cout<< "Bytes: "<< Encadeada.obtem(pos).bytes<<endl;
 +
      cout<< "Path: "<< Encadeada.obtem(pos).path<<endl;
 +
      cout<< "Http: "<< Encadeada.obtem(pos).http<<endl;
 +
      cout<< "Agente: "<< Encadeada.obtem(pos).agente<<endl;
 +
      cout<< "Dia: "<< Encadeada.obtem(pos).data.dia<<endl;
 +
      cout<< "Mes: "<< Encadeada.obtem(pos).data.mes<<endl;
 +
      cout<< "Ano: "<< Encadeada.obtem(pos).data.ano<<endl;
 +
      cout<< "  "<<endl;
 +
  }
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 22h15min de 1 de dezembro de 2015

Programação 2: Diário de aula 2015-2 da turma B

Página da turma do Prof. Marcelo Sobral

Professor: Francisco de Assis
Encontros: 4a feira/13:30, 5a feira/13:30
Atendimento paralelo: 4a de 10:00 às 11:00

Plano de Ensino

19/11: Projeto 3

25/11: Prova 1

A avaliação 1 será uma prova prática individual em laboratório, envolvendo questões sobre filas e pilhas, além de possíveis referências aos projetos 1 e 2.. Cada estudante deve trazer sua implementação de fila e pilha. Durante a prova podem-se consultar a wiki e o manual online do Linux. A prova consistirá de pelo menos quatro questões, valendo 10 pontos cada uma. Sua avaliação será feita da seguinte forma:

   < 10 pontos: os projetos 1 e 2 serão avaliados com D.
   entre 10 e 19 pontos: os conceitos dos projetos 1 e 2 serão reduzidos em um nível.
   entre 20 e 25 pontos: os conceitos dos projetos 1 e 2 serão mantidos.
   acima de 25 pontos: os conceitos dos projetos 1 e 2 serão elevados em um nível. 

OBS: uma questão será considerada correta somente se compilar, for implementada exatamente como solicitado e fornecer um resultado correto.

Prova 1 2015-2

Prova 2015-1

26/11: Projeto 3: Quebra de Linhas de Logs

Uso do sscanf no C++:

/* sscanf exemplo */
#include <stdio.h>

int main ()
{
  char sentence []="Ana tem 23 anos";
  char str [20];
  int i;

  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);
  
  return 0;
}

Saída: Ana -> 23

Resolução da Quebra de Logs:

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "Lista.h"
 
using namespace std;
 struct DataHorario {
  int dia;
  string mes;
  int ano;
  int hora;
  int minuto;
  int segundo;
};
 
struct Registro {
  string ip;
  string usuario;
  DataHorario data;
  string metodo;
  string path;
  string http;
  int status;
  long bytes;
  string agente;
};
   int dia, ano, hora, minuto, segundo, status;
   int long bytes;
   char ip[20], data[35], metodo[9], paths[250], usuario [45], agente[40], http[200];
   int datadia, dataano;
 
int main(int argc, char *argv[]) {
  // testa se o nome do arquivo foi passado pela linha de comando
  if (argc < 2) {
    cout << "Uso: " << argv[0] << " nome_arquivo" << endl;
    return 0;
  }
  Registro Regist;
  Lista<Registro> Encadeada;
  
 
  // Cria o objeto ifstream, o que implica abrir o arquivo
  ifstream arq(argv[1]);
 
  // Verifica se o arquivo foi aberto, ou se houve algum erro
  if (not arq.is_open()) {
    cout << "Erro: não conseguiu abrir o arquivo (ele existe ?)" << endl;
    return 0;
  }
 
  // Lê todas as linhas do arquivo
while (not arq.eof()) {
    string linha;
 
    getline(arq, linha);
 
//sscanf( linha.c_str(), "%s %s %s %c %s %d %c %c %s %s %s ", ip, traco, usuario, colchete, data, &codigo, barra, aspas, metodo, paths, agente);
 sscanf(linha.c_str(), "%s %*c %s [%s %*d] \"%s %s %[^\"]\" %d %ld %*s \"%[^\"]\"", ip, usuario, data, metodo, paths, http, &status, &bytes, agente);
string datacompleta= data;   
string dia = datacompleta.substr(0,datacompleta.find('/'));
 
datadia= atoi(dia.c_str());
datacompleta.erase(0,3);
 
string datames = datacompleta.substr(0,3);
datacompleta.erase(0,4);
 
string anos = datacompleta.substr(0,4);
datacompleta.erase(0,5);
dataano= atoi(anos.c_str());
 
Regist.ip = ip;
Regist.usuario= usuario;
Regist.metodo = metodo;
Regist.status = status;
Regist.bytes = bytes;
Regist.path= paths;
Regist.http= http;
Regist.agente=agente;
Regist.data.dia=datadia;
Regist.data.mes=datames;
Regist.data.ano=dataano;
 
Encadeada.adiciona(Regist);
  
  }
  arq.close();
  
  cout<< "Comprimento: "<< Encadeada.comprimento()<<endl;
  for (int pos=0;pos<Encadeada.comprimento();pos++)
  {
      cout<< "IP: "<< Encadeada.obtem(pos).ip<<endl;
      cout<< "Usuario: "<< Encadeada.obtem(pos).usuario<<endl;
      cout<< "Metodo: "<< Encadeada.obtem(pos).metodo<<endl;
      cout<< "Status: "<< Encadeada.obtem(pos).status<<endl;
      cout<< "Bytes: "<< Encadeada.obtem(pos).bytes<<endl;
      cout<< "Path: "<< Encadeada.obtem(pos).path<<endl;
      cout<< "Http: "<< Encadeada.obtem(pos).http<<endl;
      cout<< "Agente: "<< Encadeada.obtem(pos).agente<<endl;
      cout<< "Dia: "<< Encadeada.obtem(pos).data.dia<<endl;
      cout<< "Mes: "<< Encadeada.obtem(pos).data.mes<<endl;
      cout<< "Ano: "<< Encadeada.obtem(pos).data.ano<<endl;
      cout<< "  "<<endl;
  }
}