Jump to content
peterpah

Estrutura de dados

Recommended Posts

peterpah

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Data
 {
   int Dia[500];
   int Mes[500];
  }DATA ;

typedef struct Hora
 {
   int hora[500];
   int min[500];
 }HORA ;

typedef struct carro
 {
   char matricula[500];
   int classe [100] ;
   int portico[100];
   DATA data;
   HORA hora;
 }veiculo;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void inserir (float porticos[20] [5])
{
  int i,j=0,cont=0;
  for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
 {
   printf("Insiria o preco do classe %i ",j+1);
   scanf("%f",&porticos[i][j]);
 }
   }
  }

void listar (float porticos[20] [5])
{
  int i,j,cont=0;
  for (i=0;i<4;i++)
   {
  cont++;
  printf("Protico %i \n",cont);
  for (j=0;j<5;j++)
   {
	 printf("O preco da %i classe e %f\n",j+1,porticos[i][j]);
   }
 }
 system ("Pause");
}

void procurar (float portico [20][5])
{
  int op,op2,i,j;
  printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
  scanf ("%i",&op);
  printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
  scanf ("%i",&op2);
  system ("ClS");
  i=op-1;
  j=op2-1;
  printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]);
  system ("Pause");
 }

void alterar (float porticos [20][5])
{
  int op,op2,i,j;
  printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
  scanf ("%i",&op);
  system ("ClS");
  i=op-1;
 for (j=0;j<5;j++)
  {
    printf("Alterar o preco do classe %i ",j+1);
    scanf("%f",&porticos[i][j]); 
   }
}

void inserircarro(veiculo p,int soma){
int cont;
printf("%i",soma);
cont=soma;
printf("Insira a matricula do carro %i\n ",cont+1);
scanf ("%s",&p.matricula[cont]);
printf("Insira o dia \n ");
scanf ("%i",&p.data.Dia[cont]);
printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
scanf ("%i",&p.data.Mes[cont]);
printf("Insira a Hora \n");
scanf ("%i",&p.hora.hora[cont]);
printf("Insira os Minutos \n");
scanf ("%i",&p.hora.min[cont]);
printf("Insira o Portico\n");
scanf("%i",&p.portico[cont]);
printf("Insira a Classe \n ");
scanf ("%i",&p.classe[cont]);
}

void gasto (float porticos [20][5],veiculo p,int soma)
{
int at=0,i,k,pt,port,l;
float gasto;
char carro[100];
printf("Insira o carro que quer ver os gasto \n");
scanf ("%s",&carro);
for (i=0;i<=soma;i++)
 {
   if (strcmp(carro,p.matricula)==0 ) {
   at=1;
   printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
   scanf("%i",&port);
   system ("ClS");
   for (i=0;i<=soma;i++){
  if (strcmp (carro,p.matricula)==0)
   { l=p.classe[i];
	 k= l-1;
	 pt=port-1;
        gasto=gasto+porticos[pt][k];
   }
 }
   printf("O gasto do carro é %i ",gasto);
  }
  else {
   printf("O carro nao existe");
  }
 }
}
void ganhoclasse(float porticos [20][5], veiculo p,int soma)
{
int pot,i,l,k,pt;
float ganho=0;
printf("%i",soma);
printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
scanf("%i",&pot);
for (i=0;i<soma;i++){
if (pot==p.portico[i])
{	 l=p.classe[i];
k= l-1;
pt=pot-1;
 ganho=ganho+porticos[pt][k];

}


}
printf("O Dinheiro do portico %i e %f ",pot,ganho);
system ("PAUSE");
}
void listarcarros (veiculo p,int soma)
{
int j;
for (j=0;j<soma;j++)
{
printf("%s",p.matricula[j]);
printf("%i",p.matricula[j]);
printf("o dia \n %i ",p.data.Dia[j]);
printf(" o mes \n %i",p.data.Mes[j]);
printf(" a Hora \n %i",p.hora.hora[j]);
printf(" os Minutos %i \n",p.hora.min[j]);
printf(" o Portico %i\n",p.portico[j]);
printf(" a Classe %i \n ",p.classe[j]);


}
system ("Pause");
}
int main(int argc, char *argv[]) {
 veiculo p;
int op,soma;
float porticos [20][5];
do
{
 system ("ClS");
printf(" Escolha a opccao!\n");
printf("1. Inserir os porticos no sistema.\n");
printf("2. Listar a informacao de todos os porticos;\n");
printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
printf("4. Alterar os precos de um determinado portico; \n");
printf("5. Inserir uma passagem de um veiculo num portico;\n");
printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
printf("0. Sair;\n");
printf("Op ->");
scanf("%i",&op);
switch (op){

case 1 :
	 system ("ClS");
inserir(porticos);
break;
case 2:
	 system ("ClS");
	 listar(porticos);
break;
case 3:
		 system ("ClS");
	 procurar(porticos);
break;
case 4:
		 system ("ClS");
	 alterar(porticos);
break;
case 5:
system ("ClS");

inserircarro(p,soma);
soma=soma+1;
break;
case 6:
system ("ClS");
gasto (porticos,p,soma);
break;

case 7:
ganhoclasse(porticos,p,soma);
break;
case 8:
listarcarros(p,soma);
break;
case 9:
break;

}


} while (op!=0);
return 0;
}

Eu meto a listar a estrutura de dados e nao aparece nada onde ta o problema?

Share this post


Link to post
Share on other sites
eatg75

Se queres que alguem te ajude idente o teu codigo se faz fazor!


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Share this post


Link to post
Share on other sites
NuGuN

Boas!

peterpah, devias realmente identar o teu código para que se perceba um bocado melhor. ;)

Agora ao que interessa, vi apenas a parte dos pórticos e parece-me que o teu problema está na forma como passas o argumento para a função inserir().

Da forma como a estás a passar, vais estar a alterar uma variável que apenas existe no escopo daquela função, e assim sendo, quando essa função termina, essa variável é apagada.

O melhor será utilizares ponteiros.

Cumps!

Share this post


Link to post
Share on other sites
eatg75

@NuGun nao existe nada de errada com a inserir() (a nao ser a especificao explicita do tamanho do array no primeiro nivel, nao e obrigatorio aqui apenas e obrigatorio para o segundo nivel, tambem a especificao dos duas dimensoes de um array multidimensional e apenas obrigatorio para variaveis quando estao a declaradas sem inicializacao). Quando a "forma" como ele esta passar os parametros nao existe problema nenhum pois o argumento e um ponteiro valido, um array e um pointeiro!... i.e. um ponteiro para o primeiro elemento do array (Pointers 101).

@peterpah vi algumas coisas que nao tas a fazer bem e comentei-as

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Data
{
 int Dia[500];
 int Mes[500];
}DATA ;
typedef struct Hora
{
 int hora[500];
 int min[500];
}HORA ;
typedef struct carro
{
 char matricula[500];
 int classe [100] ;
 int portico[100];
 DATA data;
 HORA hora;
}veiculo;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void inserir (float porticos[20] [5]) // 1 -> aqui nao precisas expecificar o tamanho do array no nivel 1, o 20 e facultativo,
{									 // mas o tamanho para o segundo nivel e obrigatorio e deves passar um array multidimensional
								  // que especificado aqui.
 int i,j=0,cont=0;				  
 for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
  {
    printf("Insiria o preco do classe %i ",j+1);
    scanf("%f",&porticos[i][j]); // 2 -> o carater "&" e opcional  porticos ja e um ponteiro, ja estas a ter acesso a referencia de porticose[i][j]
  }
 }
}
void listar (float porticos[20] [5])
{
 int i,j,cont=0;
 for (i=0;i<4;i++)
   {
  cont++;
  printf("Protico %i \n",cont);
  for (j=0;j<5;j++)
    {
	  printf("O preco da %i classe e %f\n",j+1,porticos[i][j]);
    }
   }
 system ("Pause");
}
void procurar (float portico [20][5])
{
 int op,op2,i,j;
 printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
 scanf ("%i",&op2);
 system ("ClS");
 i=op-1;
 j=op2-1;
 printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]);
 system ("Pause");
}
void alterar (float porticos [20][5])
{
 int op,op2,i,j;
 printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 system ("ClS");
 i=op-1;
 for (j=0;j<5;j++)
   {
  printf("Alterar o preco do classe %i ",j+1);
  scanf("%f",&porticos[i][j]); // mesma coisa que em 2
   }
}
void inserircarro(veiculo p,int soma){
 int cont;
 printf("%i",soma);
 cont=soma;
 printf("Insira a matricula do carro %i\n ",cont+1);
 scanf ("%s",&p.matricula[cont]); // p.matricula e um ponteiro logo "&" e facultativo
 printf("Insira o dia \n ");
 scanf ("%i",&p.data.Dia[cont]);
 printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
 scanf ("%i",&p.data.Mes[cont]);
 printf("Insira a Hora \n");
 scanf ("%i",&p.hora.hora[cont]);
 printf("Insira os Minutos \n");
 scanf ("%i",&p.hora.min[cont]);
 printf("Insira o Portico\n");
 scanf("%i",&p.portico[cont]);
 printf("Insira a Classe \n ");
 scanf ("%i",&p.classe[cont]);
}
void gasto (float porticos [20][5],veiculo p,int soma)
{
 int at=0,i,k,pt,port,l;
 float gasto;
 char carro[100];
 printf("Insira o carro que quer ver os gasto \n");
 scanf ("%s",&carro); // "&" opcional
 for (i=0;i<=soma;i++)
   {
  if (strcmp(carro,p.matricula)==0 ) {
    at=1;
    printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
    scanf("%i",&port);
    system ("ClS");
    for (i=0;i<=soma;i++){
	  if (strcmp (carro,p.matricula)==0)
	    { l=p.classe[i];
		  k= l-1;
		  pt=port-1;
		  gasto=gasto+porticos[pt][k];
	    }
    }
    printf("O gasto do carro é %i ",gasto); //  deves usar %f para o gasto {see man 3 printf}
  }
  else {
    printf("O carro nao existe");
  }
   }
}
void ganhoclasse(float porticos [20][5], veiculo p,int soma)
{
 int pot,i,l,k,pt;
 float ganho=0;
 printf("%i",soma);
 printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
 scanf("%i",&pot);
 for (i=0;i<soma;i++){
   if (pot==p.portico[i])
  {	    l=p.classe[i];
    k= l-1;
    pt=pot-1;
    ganho=ganho+porticos[pt][k];
  }

 }
 printf("O Dinheiro do portico %i e %f ",pot,ganho);
 system ("PAUSE");
}
void listarcarros (veiculo p,int soma)
{
 int j;
 for (j=0;j<soma;j++)
   {
  printf("%s",p.matricula[j]); // estas mandar o printf() escrever para STDOUT um string com um inteiro ? WTF? N
  printf("%i",p.matricula[j]); // ao queres antes escrever a matricula toda? podias faze-lo com '"%s", p.matriculas ' sem indexar o array
  printf("o dia \n %i ",p.data.Dia[j]);
  printf(" o mes \n %i",p.data.Mes[j]);
  printf(" a Hora \n %i",p.hora.hora[j]);
  printf(" os Minutos %i \n",p.hora.min[j]);
  printf(" o Portico %i\n",p.portico[j]);
  printf(" a Classe %i \n ",p.classe[j]);

   }
 system ("Pause");
}
int main(int argc, char *argv[]) {
 veiculo p;
 int op,soma;
 float porticos [20][5];
 do
   {
  system ("ClS");
  printf(" Escolha a opccao!\n");
  printf("1. Inserir os porticos no sistema.\n");
  printf("2. Listar a informacao de todos os porticos;\n");
  printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
  printf("4. Alterar os precos de um determinado portico; \n");
  printf("5. Inserir uma passagem de um veiculo num portico;\n");
  printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
  printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
  printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
  printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
  printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
  printf("0. Sair;\n");
  printf("Op ->");
  scanf("%i",&op);
  switch (op){
  case 1 :
    system ("ClS");
    inserir(porticos);
    break;
  case 2:
    system ("ClS");
    listar(porticos);
    break;
  case 3:
    system ("ClS");
    procurar(porticos);
    break;
  case 4:
    system ("ClS");
    alterar(porticos);
    break;
  case 5:
    system ("ClS");
    inserircarro(p,soma);
    soma=soma+1;
    break;
  case 6:
    system ("ClS");
    gasto (porticos,p,soma);
    break;
  case 7:
    ganhoclasse(porticos,p,soma);
    break;
  case 8:
    listarcarros(p,soma);
    break;
  case 9:
    break;
  }

   } while (op!=0);
 return 0;
}


Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Share this post


Link to post
Share on other sites
NuGuN

Tens razão... falha minha. Nesse caso sem testar o código não estou a ver a razão de não funcionar.

Cumps!

Share this post


Link to post
Share on other sites
HappyHippyHippo

o problema encontrasse (como sempre) no uso indiscriminado do scanf. bastou fazer a limpeza do buffer de leitura para por tudo a listar correctamente.

para não falar no uso da função system, algo que não deveria existir, só complica as coisas ... (se bem que uso no clear screen porque desconfio que gostas disso)

código alterado para resolver a tua situação:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Data {
 int Dia[500];
 int Mes[500];
} DATA ;

typedef struct Hora {
 int hora[500];
 int min[500];
}HORA ;

typedef struct carro {
 char matricula[500];
 int classe[100] ;
 int portico[100];
 DATA data;
 HORA hora;
} veiculo;

#define CLEAR_SCREEN system("clear")
#define CLEAR_INPUT while ( getchar() != '\n' );
#define PAUSE CLEAR_INPUT; getchar();

void inserir (float porticos[][5]) {
 int i,j=0,cont=0;

 for (i=0;i<4;i++){
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++) {
     printf("Insiria o preco do classe %i ",j+1);
     scanf("%f",&porticos[i][j]);
     CLEAR_INPUT;
   }
 }
}

void listar (float porticos[][5]) {
 int i,j,cont=0;

 for (i=0;i<4;i++) {
   cont++;
   printf("Protico %i \n",cont);
   for (j=0;j<5;j++)
     printf("O preco da %i classe e %f\n", j+1, porticos[i][j]);
 }
}

void procurar (float porticos[][5]) {
 int op,op2,i,j;

 printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 CLEAR_INPUT;
 printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> ");
 scanf ("%i",&op2);
 CLEAR_INPUT;
 CLEAR_SCREEN;
 i=op-1;
 j=op2-1;
 printf("O preco da classe %i do portico %i e %f\n",op2,op,porticos[i][j]);
}

void alterar (float porticos[][5]) {
 int op,i,j;

 printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> ");
 scanf ("%i",&op);
 CLEAR_INPUT;
 CLEAR_SCREEN;
 i=op-1;
 for (j=0;j<5;j++) {
   printf("Alterar o preco do classe %i ",j+1);
   scanf("%f",&porticos[i][j]); // mesma coisa que em 2
   CLEAR_INPUT;
 }
}

void inserircarro(veiculo p,int soma) {
 int cont;

 printf("%i",soma);
 cont=soma;
 printf("Insira a matricula do carro %i\n ",cont+1);
 scanf ("%s",&p.matricula[cont]);
 CLEAR_INPUT;
 printf("Insira o dia \n ");
 scanf ("%i",&p.data.Dia[cont]);
 CLEAR_INPUT;
 printf("Insira o mes ex('Janeiro corresponde ao 1')\n ");
 scanf ("%i",&p.data.Mes[cont]);
 CLEAR_INPUT;
 printf("Insira a Hora \n");
 scanf ("%i",&p.hora.hora[cont]);
 CLEAR_INPUT;
 printf("Insira os Minutos \n");
 scanf ("%i",&p.hora.min[cont]);
 CLEAR_INPUT;
 printf("Insira o Portico\n");
 scanf("%i",&p.portico[cont]);
 CLEAR_INPUT;
 printf("Insira a Classe \n ");
 scanf ("%i",&p.classe[cont]);
 CLEAR_INPUT;
}

void gasto (float porticos[][5],veiculo p,int soma) {
 int i,k,pt,port,l;
 float gasto;
 char carro[100];
 printf("Insira o carro que quer ver os gasto \n");
 scanf ("%s", carro);
 CLEAR_INPUT;
 for (i=0;i<=soma;i++) {
   if (strcmp(carro,p.matricula)==0 ) {
     printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
     scanf("%i",&port);
     CLEAR_INPUT;
     CLEAR_SCREEN;
     for (i=0;i<=soma;i++){
       if (strcmp (carro,p.matricula)==0) {
         l=p.classe[i];
         k= l-1;
         pt=port-1;
         gasto=gasto+porticos[pt][k];
       }
     }
     printf("O gasto do carro é %f ", gasto);
   } else {
     printf("O carro nao existe");
   }
 }
}

void ganhoclasse(float porticos[][5], veiculo p,int soma) {
 int pot,i,l,k,pt;
 float ganho=0;

 printf("%i",soma);
 printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->");
 scanf("%i",&pot);
 CLEAR_INPUT;
 for (i=0;i<soma;i++) {
   if (pot==p.portico[i]) {
     l=p.classe[i];
     k= l-1;
     pt=pot-1;
     ganho=ganho+porticos[pt][k];
   }
 }

 printf("O Dinheiro do portico %i e %f ",pot,ganho);
}

void listarcarros (veiculo p,int soma) {
 int j;
 for (j=0;j<soma;j++) {
   printf("%i",p.matricula[j]);
   printf("%i",p.matricula[j]);
   printf("o dia \n %i ",p.data.Dia[j]);
   printf(" o mes \n %i",p.data.Mes[j]);
   printf(" a Hora \n %i",p.hora.hora[j]);
   printf(" os Minutos %i \n",p.hora.min[j]);
   printf(" o Portico %i\n",p.portico[j]);
   printf(" a Classe %i \n ",p.classe[j]);
 }
}

int main(int argc, char *argv[]) {
 veiculo p;
 int op,soma;
 float porticos [20][5];

 do {
   CLEAR_SCREEN;
   printf(" Escolha a opccao!\n");
   printf("1. Inserir os porticos no sistema.\n");
   printf("2. Listar a informacao de todos os porticos;\n");
   printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n");
   printf("4. Alterar os precos de um determinado portico; \n");
   printf("5. Inserir uma passagem de um veiculo num portico;\n");
   printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n ");
   printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n");
   printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n");
   printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n");
   printf("10. Saber o número de veiculos que passa em media nos porticos;\n");
   printf("0. Sair;\n");
   printf("Op ->");
   scanf("%i",&op);
   switch (op) {
   case 1 :
     CLEAR_SCREEN;
     inserir(porticos);
     PAUSE;
     break;
   case 2:
     CLEAR_SCREEN;
     listar(porticos);
     PAUSE;
     break;
   case 3:
     CLEAR_SCREEN;
     procurar(porticos);
     PAUSE;
     break;
   case 4:
     CLEAR_SCREEN;
     alterar(porticos);
     PAUSE;
     break;
   case 5:
     CLEAR_SCREEN;
     inserircarro(p,soma);
     soma=soma+1;
     PAUSE;
     break;
   case 6:
     CLEAR_SCREEN;
     gasto (porticos, p, soma);
     PAUSE;
     break;
   case 7:
     CLEAR_SCREEN;
     ganhoclasse(porticos, p, soma);
     PAUSE;
     break;
   case 8:
     CLEAR_SCREEN;
     listarcarros(p,soma);
     PAUSE;
     break;
   case 9:
     break;
   }

 } while (op!=0);

 return 0;
}

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.