MC326 1s07


 



 Grupos/notas

C/C++ Reference

Página pessoal

Página do Prof. Neucimar

Resumo funções

TP1

TP2

TP3

TP4

(12/02/2008)

Se você é aluno de MC326, turmas A ou B, 1s 2008, não se baseie muito nas informações desta página. Principalmente nos Trabalhos Práticos, que serão alterados para este semestre.

Fora isso, a teoria e os "conselhos", continuam valendo. Não será fácil, mas também não deve ser difícil, depende mais de vocês do que de mim ou dos TPs.

Maiores detalhes na página abaixo:

(04/02/2008)

MC326 1s08 

(06/12/2007)

BIXOS EM MATRÍCULA:

No 1º semestre de 2008 eu serei novamente PED de MC326, para as turmas A e B. O curso NÃO será exatamente o mesmo. Já discuti algumas mudanças com o Prof. Neucimar, visando diminuir um pouco a carga de trabalho da disciplina, que não é pouco. Não será coxa, mas a idéia é que vocês (e eu!) sofram menos com os trabalhos.

Sintam-se a vontade pra me mandar um e-mail se precisarem:

fabio.dias@gmail.com 

Fábio 

(15/07/2007)

~ 90% de aprovação:

 clique para aumentar

(09/07/2007)

EXAMES: TERÇA 14h, mesma sala

Notas atualizadas

 

(04/07/2007)

FINAL DO SEMESTRE

Pessoas:

Amanhã é o ÚLTIMO DIA para apresentações/entrevistas. Caso você já tenha sido entrevistado, mande o código por mail AINDA ESTA SEMANA. (Faça um pacote pequeno, pois vou estar na discada).

Importante:

  • Esteja preparado para o exame (seu tp4 pode não funcionar - e oficialmente, vocês estão de exame, mas podem se safar entregando o tp4)
  • Quem não fizer entrevista poderá ficar de exame (ou ter um desconto grande de nota).
  • CONFIRAM AS NOTAS NA PLANILHA.

APARECAM LÁ. EU POSSO JUNTAR GRUPOS NA ENTREVISTA

(entrevistas de 1/2 hora)

(03/07/2007 - 12:47)

ATENÇÃO

O critério foi confirmado = (3*TP4+2*TP3+TP2+TP1+P)/8, MAS, caso alguém tenha menos do que 2em algum TP, estará de exame com a nota da prova OU a média dos TPs, o que for menor. (Seguindo os preceitos da ementa divulgada no inicio do curso).

 

(02/07/2007)

Quem já apresentou o TP4, me envie o código.

O critério ainda não foi definido, mas, seguindo o conceito do anterior, caso alguém não entregue algum tp, FICARÁ de exame. Só falta acertar detalhes a respeito. Espero ter notícias disso amanha.

(24/06/2007)

SÓ TEM HORÁRIOS LIVRES TERÇA FEIRA (25) .

 

(24/06/07)

Grupo: 

  • 35

Vocês não marcaram a entrevista ainda! Estamos ficando sem horários. Desse jeito vocês vão ficar sem nota do TP4.

 

(20/06/2007)

Finalmente acabei todas as re-re-recorreções do TP2 (2, não 3).

Confiram a nota e o grupo de cada um de vocês. Se estiver em branco, tudo bem. Só me avisem se estiver ERRADO.

correcao.txt -  Grupos/notas

 

(18/06/2007)

ENTREVISTAS DO DIA 02/07 CANCELADAS

(18/06/2007) - ~ 2 semanas p/ prazo final TP4 (02/07)

40 grupos * 2 horas por grupo = 80 horas => 40h/semana.

Como esta quantidade de horas por semana é impraticável, sugiro 2 coisas:

  • ESTUDEM: Quanto mais rápido vocês responderem as perguntas, mais rápido acaba. Máximo 1 hora por grupo!
  • Marquem a entrevista: Caso não haja mais horário para apresentação, como poderei atribuir a nota? Evitem isso MARCANDO ANTECIPADAMENTE A ENTREVISTA. Sejam responsáveis.

(14/06/2007)

  •  Não vai mais ter P2
  •  Apresentação TP4 até 02/07 
  •  Entrevista inclui hash
  • Critérios pra nota final : discutir com o Prof. Neucimar na terça...

(10/06/2007)

A apresentação do TP4 será uma demonstração do programa. Pensem em mim como o comprador do programa, vocês terão que me convencer que o programa funciona conforme o especificado e que vocês sabem o que estão fazendo.

A execução do programa é imprescindível, mas outros recursos podem ser usados também, como apresentações, código, etc etc.

Vocês tem que saber o que apresentar SEM que eu tenha que perguntar. O texto(relatório) não é mais necessário.

(27/05/2007)


http://www.seanster.com/BplusTree/BplusTree.html

Ou a "prata da casa"

http://www.ic.unicamp.br/~rezende/Astral.htm

(22/05/2007)

Usem minha google agenda ali do lado para marcar horários de entrevista comigo. "The clock is ticking".

 (22/05/2007)

Correção TP2: NOTAS

Correção

Legenda:

? => ME PROCURE O QUANTO ANTES (vários ?? mais ainda)

X.XX | ASDF

Nota descontada por 'ASDF'

X.XX |

ASDF1

ASDF2

ASDF3

Idem

(15/05/2007)

Deadline TP3 adiado mais uma vez: Quinta meio dia. Ultimo prazo.

E o formato de entrega do tp4 será diferente.

(13/05/2007)

Deadline TP3: Terça feira, meio dia. Após isso, nota*0.7; 

(11/05/2007)

TODOS OS TPs DEVEM SER CASE INSENSITIVE . Ou seja, se houverem, por exemplo, as músicas Voices e VOICES no seu TP, ele viola chave primária!!!!

(09/05/2007)

Resubmissões do TP3 até domingo.


(06/05/2007-22:37)

Mais algumas horinhas. Segunda 12h, também conhecido como meio-dia. 12:01 = nota*0.7;

(03/05/2007)

Quem entregar o TP após domingo (00:01 de segunda, por exemplo), terá a nota multiplicada por 0.7.

(03/05/2007)

Eu quero que CADA um dos alunos me envie um mail contendo:

RA, Nome Completo e o número dos grupos que participou em cada TP.

(02/05/2007)

TP3 para domingo.

(27/ 04/2007)

Não tem segredo nas alterações!

(22/04/2007)

http://valgrind.org/gallery/linux_mag.html

(17/04/2007)

A implementação de sugestão musical através daquelas consultas encadeadas a indice secundario (as musicas mais compradas pelos usuarios que compraram esta musica) valerá 2 pontos extras.(para o tp3 somente)

(16/04/2007)

Dica: Não "misturem" arquivos. Criem um arquivo para cada indice, não precisa "espremer" várias estruturas num arquivo só para economizar. Isso só dá trabalho e pode ser extremamente danoso para futuros tps.

(14/04/2007)

Esclarecimentos:

  • A ÚNICA estrutura que contém apontador para arquivo são os indices primários.

  • Os indices secundários sempre referenciam o indice primario

  • A relacao de compra de musicas (comprasXX.dat) deve armazenar PK, naso apontadores para arquivo

(13/04/2007)

  • Antes de implementarem "idéias mirabolantes" a respeito de performance, pensem que esta matéria chama "Estrutura de arquivos" . Caso ainda ache viável, ME PERGUNTE.

  • Estou corrigindo os TP2. Aprox.40 mins, só pra ler o texto e olhar o código (ainda falta execução). Vai demorar.

Caso seu TP2 CARREGUE O BANCO INTEIRO NA RAM, me mande um mail pra ONTEM.

(12/04/2007)

Na quinta-feira dia 26, teremos somente uma das salas para a aula.

Alterações no enunciado TP3
  1. Os indices secundários são implementados através de 2 estruturas (pg 247 do livro texto). Uma delas (da esq. na figura) contém a chave secundária e o apontador para a segunda estrutura (da direita), que contém a PK e um apontador para a próxima. A primeira estrutura fica em RAM, a segunda OBRIGATORIAMENTE EM DISCO. (Isso também impede uso das listas ligadas).
  2. Ao excluir registros, podemos não atualizar o indice secundário. Caso a PK não seja encontrada no primário, o registro não existe.

(11/04/2007)

(03/04/2007)

ZEREM APONTADORES

Ao declarar um apontador, SEMPRE atribuam NULL (0). Assim, se vc tentar acessar uma memória não alocada, ele SEMPRE vai dar segfault.

Se vc não fizer isso, o apontador pode conter um lixo qquer de memória, que pode não vai dar SEGFAULT, caso o lixo aponte para um trecho de memória que é do seu programa.

(03/04/2007)

TP3

Não se assustem. Não tem nada impossível no lab. Na aula de terça eu vou explicar ele e os detalhes necessários. Entrega p/ 03/05/2007. (Isso mesmo, 1 mês).

(03/04/2007)

TP2 para o próximo domingo. DE NOVO!

p/ 08/04/2007

(30/03/2007)

Devido a mais total falta de tempo minha, não posso remover as músicas duplicadas do banco, mas vou colocar aqui um script em phyton feito pelo Gustavo Scalet que faz isso:

otimizaCatalogo.py

Dúvidas falem com ele.

(27/03/2007)

TP2 para o próximo domingo.

Um pouco de motivação:

"If you have a target in your life, a real target, doesn´t matter if you are very poor or rich people, if you work hard and believe in God, you can get the success, success in the life."

"I know that it is impossible to win always. I just hope that defeat doesn't come this weekend."

"On a given day, a given circumstance, you think you have a limit. And you then go for this limit and you touch this limit, and you think, 'Okay, this is the limit'. And so you touch this limit, something happens and you suddenly can go a little bit further. With your mind power, your determination, your instinct, and the experience as well, you can fly very high."

http://en.wikipedia.org/wiki/Ayrton_Senna

(26/03/2007)

Ponteiros e alocação dinâmica:

Prof. Falcão - pdf1/ Prof. Falcão - pdf2

Haverá uma "entrevista" com grupos sorteados a respeito do TP2. "Essa parte não fui eu que fiz então eu não sei" não é uma resposta aceitável.

(25/03/2007)

bsearch

(23/03/2007)

  • QSORT: Ao contrário do que eu disse antes, o qsort vai funcionar mesmo pra tamanhos de registro variáveis. Porque a memória das strings que vc vai alocar dinamicamente fica em outro lugar da memória, o ponteiro tem tamanho constante.
  • gdb: Vocês tem medo do gdb? Ou não usaram em MC?02? Eu lembro de ter dado uma palestra pra vocês justamente por isso. Usem. Pra ajudar:

apresentacoes.zip

Lembrando também do comando 'up' que sobe na pilha do escopo de execução

  • Comentários: Não deixem como última coisa comentar o código. Senão vocês mesmo se confundem, e me confundem ao pedir ajuda. Ou seja, EU NÃO VOU OLHAR CÓDIGO SEM COMENTÁRIO.
  • P: alteracao no banco de usuario e so mudar a permissao? NÃO, é mudar qualquer campo.

(22/03/2007)

AVISO IMPORTANTE

Quero que todos vocês, TODOS, me enviem um mail assim que qualquer das seguintes partes do projeto de vocês funcionar:

  • Consulta por nome da música (aka indice primário do banco musica).
  • Consulta do byte de permissão do usuário (aka: indice primario do banco usuario).
  • Operações de alteração/exclusão (em qquer base).

Resumindo, me mantenham informados do desenvolvimento, COMO SE EU ESTIVESSE NO GRUPO de vocês. Não mandem código.

Título do mail: "MC326 Grupo XX"

(22/03/2007)

  • Usuário root é somente mais um usuário. Não tem permissões especiais e não deve ser registrado diretamente no código.
  • Não usem lista ligada para os indices em memória. Não dá pra fazer busca binária em lista.
  • Não se preocupem em não mostrar a senha sendo digitada.

(20/03/2007)

Banco de usuários

Detalhe importante: O nome root não tem nenhum significado ao programa. Permissão =='0' => só consulta, =='1', alteração. Simples assim.

Exemplo de como fazer a leitura do banco de usuários.

#include <stdio.h>
int main(int argc, char *argv[])
{
char nome[20]; //somente exemplo NAO USEM ESTES TAMANHOS!
char senha[50];
char permissao;
char a;
FILE *f=fopen("teste.txt","r");
if (f!=NULL)
{
fscanf(f,"%[A-Za-z0-9.]s",nome);
fscanf(f,"%c",&a);
fscanf(f,"%c%s\n",&permissao,senha);
printf("Nome : %s\nSenha : |%s| \npermissao %c\n",nome,senha,permissao);
printf("%d\n\n",a);
fclose(f);
}
return 0;
}

(20/03/2007)

Alto nível: fseek

Para as pessoas que eu sugeri o uso de funções de baixo nível, me desculpem. Eu me confundi com o man, que não relaciona as funções do jeito que eu pensava. Quem quiser usar alto nível, procure pela função fseek. Faz exatamente a mesma coisa que a lseek, mas usando um FILE*. Se serve de consolo, eu tive que alterar meu código por causa do meu engano também. :-(

(19/03/2007)

Todos os registros: catalogo00.zip.

(18/03/2007)

Algumas notas revistas. Lembrando que, para o TP2 o prazo não é extensível, e não haverão re-submissões para "consertos".

Falando em TP2:

1. Posso especificar um tamanho máximo de caracteres para usuário e senha?

R. Não.

2. no item 2 o que está englobado por 'gerenciamento (alteração) de usuários'? mudança de senha e de byte de permissão?

R. Inclusão/exclusão/alteração e consulta.

3. no item 4 não tem inclusão. Só o Byte 1 pode incluir?

R. Exatamente.

(16/03/2007)

Acabei de liberar a planilha de notas do TP1. Grupo 6 e 34 aguardam recorreção, e grupo 24, por favor me procure a partir de segunda feira.

Pra quem pediu: Makefile (by prof. Islene, MC202 2s 2002!)

(15/03/2007)

A aula de hoje começará na Sala 316, depois iremos ao laboratório.

Na sala eu falarei sobre os resultados TP1 e disponibilizarei oficialmente o TP2.

(14/03/2007 - 11:03)

TP2

Será apresentado oficialmente na quinta. A propósito, chegarei no horário, mas continuo disponível até quando precisarem de mim.

Obs.: O TP2 é uma continuação do TP1. Tudo que vocês fizeram no TP1 continua válido no TP2, definição de base, funcionalidades, tudo. Estamos "montando", um projeto só, uma parte por vez, através de cada trabalho.

(13/03/2007) - Meu linux nao tem acentos!

Os acentos do TP1 serao desconsiderados. Pretendo acabar a correcao dos tps ate amanha e podemos discutir a correcao na quinta. Quando eu pretendo tambem fazer alguns comentarios gerais e depois conversar individualmente, pra nivelar os grupos para o TP2, que deve ser liberado logo.

Talvez eu me atrase um pouco, uns 10 ou 15 minutos, mas estarei disponivel ate a hora que alguem precisar de mim, ou seja, ate umas 18h. :)

(11/03/2007)

By Caio:

função maravilhosa __fpurge(stdin) isso mesmo dois underscore antes de fpurge, ela limpa o buffer do teclado (no linux é certeza que funciona), ou seja qualquer resquícios de entrada indesejada que ultrapassa o tamanho de caracter que você quer será eliminada incluse o \n.

By me: Use o fpurge, sem os underscores. Faz a mesma coisa, de acordo com o manual. #include <stdio.h>

(08/03/2007)

-RELATÓRIO: Por favor, não mandem odt, doc, etc. O relatório é simples, simplesmente um txt!

-problema com o [^\n]: by Otavio Pontes:

Quando usava o comando: scanf("%[^\n]s",string); ele sobrava um '\n'
no buffer e ocorria um erro na próxima leitura. Para resolver isso
substitui pelo comando scanf(" %[^\n]s",string);, ou seja, adicionei
um espaço anted do %[^\n]s. Com isso o problema foi solucionado.
Fui eu e o Plínio Sandes que descobrimos isso.
- Acentuação: o foco do laboratório não é como o linux codifica acentos. Priorizem as outras atividades.
-Grupos: Vou colocar agora os grupos que me enviaram durante a aula. Vou disponibilizar também uma planilha, onde pretendo colocar as coisas a respeito da materia, de cada aluno (notas, etc). Mas aviso já que a ultima palavra é do prof. Neucimar.

(07/03/2007)

(!Susy)

Lembrem-se: Não usamos a susy, são seres humanos que irão testar/usar o programa. Usem bom senso na interface, e documentem as escolhas que fizerem no texto que estará anexo.

O formato do banco é bem específico, e DEVERÁ SER SEGUIDO À RISCA. Depois, juntaremos os bancos de todo mundo, para disponibilizar uma base de dados minimamente razoável, sem dar muito trabalho pra ninguém.

Mas pra isso, todas precisam estar no padrão. Percebam que não usamos terminador, delimitador nem nada, somente os tamanhos dos campos fixos. Se tiverem mais dúvidas, mandem mail e/ou me procurem na aula amanhã, que não será virtual.

(07/03/2007 - 11:28)

TP1

  • Ambiente oficial para testes: LINUX
  • Ausência de identação e comentários desconta nota.
  • Obviamente, colas são proibidas e serão SEVERAMENTE punidas.
  • A base de dados entregue deve ter, no mínimo, 50 registros coerentes (reais). Cada grupo deverá ter uma, e os registros se encaixam no critério do plágio também. Recomendo que se organizem e separem generos/autores pra cada grupo, pra evitar confusão.

(05/03/2007)

Quem quiser ir adiantando o serviço e me enviar o nome e e-mail dos componentes das duplas, eu agradeço.

(03/03/2007)

Exemplo de identação/comentário:

Como o entendimento posterior do código escrito é essencial, para todo programador, e principalmente em 326, vou colocar um pequeno exemplo de como EU faço isso. Não precisam seguir à risca, mas tenham bom senso.

Clique para aumentar

(Eu coloquei como imagem para não ter problemas de visualização)

(03/03/2007)

Novo arquivo!

Resumo das funções de manipulação de arquivos, sempre disponível no menu lateral. Algumas observações a respeito:

  • Lembrem-se que o operador = também retorna valor, vocês verão isso novamente num dos exemplos.
  • c=getchar(); é exatamente igual a scanf("%c",&c);.
  • scanf("%[^\n]s",string); lê uma string do teclado, mas somente para a captura quando encontrar um \n, e não espaço, tab, etc. Útil pra entrada de nomes. O man do linux para scanf explica melhor este tipo de opção.
  • Em um dos exemplos, usa-se algo como *++argv. argv é um vetor de strings. Um vetor é um apontador, portanto esta sintaxe é equivalente a argv[++indice].

(01/03/2007)

Pessoas,

Quando eu precisar disponibilizar alguma coisa pra vocês, vou utilizar esta página. Pra começar, 3 conselhos:

  • Escolha bem seu grupo. Vocês terão bastante trabalho, e carregar os "outros nas costas", além de errado, será MUITO difícil.
  • Comentem o código. Sempre. Sempre. Sempre. Os TPs são bem maiores que os labs de MC?02.
  • Sempre começem a fazer muito antes da data de entrega. Sempre pensem no programa antes de começarem a escrever o código.

May the force be with you.

F