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 35: Linha 35:
 
= 26/11: Projeto 3: Quebra de Linhas de Logs =
 
= 26/11: Projeto 3: Quebra de Linhas de Logs =
  
= Uso do sscanf no C++:
+
Uso do sscanf no C++:
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
/* sscanf exemplo */
 
/* sscanf exemplo */
Linha 55: Linha 55:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Resolução da Quebra de Logs:
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>

Edição das 08h36min de 26 de novembro 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;
  int status;
  long bytes;
  string agente;
};
   int dia, ano, hora, minuto, segundo, codigo;
   char ip[20], data[35], traco[2], colchete[1], barra[1], aspas[1], metodo[9], paths[250], usuario [45], agente[40];
   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;
 
  
  // 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);

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 = codigo;
Regist.path= paths;
Regist.agente=agente;
Regist.data.dia=datadia;
Regist.data.mes=datames;
Regist.data.ano=dataano;

    cout << ": " <<Regist.ip<< endl;
    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();

}