• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kAIOSHIN

Operações com sequências de inteiros

15 mensagens neste tópico

Boa tarde. Estou aqui a fazer uns exercícios e gostava que me tirassem umas dúvidas. O exercicio pede para ler uma sequencia de inteiros e depois efectuar algumas operações com eles.

A primeira coisa que quero fazer é ler os inteiros. O código que escrevi e que não funciona é o que se segue.

A minha dúvida é: Como posso ler os inteiros e conseguir que eles fiquem sempre no mesmo "sítio" para poder trabalha-lo com as outras funções? Tenho essa função que lê os inteiros para o array, mas depois não sei como retorná-los, para posteriormente os mostrar e alterar...

Obrigado

#include <stdio.h> 
#include <ctype.h>
#define MAX 10
#define eoln {while(getchar() != '\n') {;}}

int le_seq(int numeros[MAX]){

int i;

printf("Introduza uma sequencia de no maximo %d numeros (Zero para terminar): \n",MAX);
for(i=0; i<MAX, i!=0; i++){
	scanf("%f",&numeros[i]);
}
return numeros;
}

char menu(char c){

do{
	puts("||++++++++++++++++++++++++++++++++++++++++++++++++++++++||");
	puts("||                                                      ||");
	puts("||  *** Sequencias de Inteiros: lista de operacoes ***  ||");
	puts("||                                                      ||");
	puts("||    A - Ler a sequencia                               ||");
	puts("||    B - Escrever a sequencia                          ||");
	puts("||    C - Calcular o maximo da sequencia                ||");
	puts("||    D - Calcular o minimo da sequencia                ||");
	puts("||    E - Determinar a subsequencia de numeros          ||");
	puts("||        acima da media                                ||");
	puts("||    F - Determinar a subsequencia de numeros          ||");
	puts("||        abaixo da media                               ||");
	puts("||    G - Calcular o minimo multiplo comum da sequencia ||");
	puts("||    H - Determinar a subsequencia dos numeros que     ||");
	puts("||        sao primos                                    ||");
	puts("||    I - Sair do Programa                              ||");
	puts("||                                                      ||");
	puts("||++++++++++++++++++++++++++++++++++++++++++++++++++++++||");

	printf("||Opcao: ");
	scanf("%c",&c); eoln;

	c = toupper(c);

	if ((c!='A')&&(c!='B')&&(c!='C')&&(c!='D')&&
	    (c!='E')&&(c!='F')&&(c!='G')&&(c!='H')&&
		(c!='I')){
		puts("Opcao INVALIDA! Tente novamente!");
	}	
}
while(c!='I');
return c;
}


int main(){

int numeros[MAX];
char opcao;

menu(opcao);
switch(opcao){
			case 'A': le_seq(numeros[MAX]); break;
		}
return(0);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, obrigado. Mas como posso passar o array à função?

switch(opcao){
                          case 'A': le_seq(numeros[MAX]); break;
}

isto dá erro...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se passares o array como argumento, não precisas de o devolver. vais ter é que o passar a todas as funções mas acho melhor do que usar variáveis globais.

EDIT: número é do tipo 'int' e estás a usar '%f' para os ler.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
switch(opcao){
                          case 'A': le_seq(numero); break;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, tens razao... Já estava a pensar em guardá-los como float quando estava a escrever.

No entanto, o erro que dá é:  invalid conversion from 'int' to 'int*'  naquela linha do case 'A'.

:P

EDIT: Sorry Saco, só vi agora... Penso que já dá...Vou tentar. Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa mais uma vez, mas apesar de ja ter tentado de algumas maneiras isto agora dá-me o seguinte erro:

permission denied

ld returned 1 exit status

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
' timestamp='1182204015' post='108289']

Peço desculpa mais uma vez, mas apesar de ja ter tentado de algumas maneiras isto agora dá-me o seguinte erro:

permission denied

ld returned 1 exit status

Obrigado

coloca aqui o código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui que isto compilasse, mas agora quando escolho a opção A, nada acontece, mostrando de novo o menu... Não entra sequer na função, pq não mostra a frase "introduza uma sequencia..."

#include <stdio.h>
#include <ctype.h>
#define MAX 10
#define eoln {while(getchar() != '\n') {;}}

int le_seq(int numeros[MAX]){

int i;

printf("Introduza uma sequencia de no maximo %d numeros (Zero para terminar): \n",MAX);
for(i=0; i<MAX, i!=0; i++){
	scanf("%d",&numeros[i]);
}
return (*numeros);
}

char menu(char c){

do{
	puts("||++++++++++++++++++++++++++++++++++++++++++++++++++++++||");
	puts("||                                                      ||");
	puts("||  *** Sequencias de Inteiros: lista de operacoes ***  ||");
	puts("||                                                      ||");
	puts("||    A - Ler a sequencia                               ||");
	puts("||    B - Escrever a sequencia                          ||");
	puts("||    C - Calcular o maximo da sequencia                ||");
	puts("||    D - Calcular o minimo da sequencia                ||");
	puts("||    E - Determinar a subsequencia de numeros          ||");
	puts("||        acima da media                                ||");
	puts("||    F - Determinar a subsequencia de numeros          ||");
	puts("||        abaixo da media                               ||");
	puts("||    G - Calcular o minimo multiplo comum da sequencia ||");
	puts("||    H - Determinar a subsequencia dos numeros que     ||");
	puts("||        sao primos                                    ||");
	puts("||    I - Sair do Programa                              ||");
	puts("||                                                      ||");
	puts("||++++++++++++++++++++++++++++++++++++++++++++++++++++++||");

	printf("||Opcao: ");
	scanf("%c",&c); eoln;

	c = toupper(c);

	if ((c!='A')&&(c!='B')&&(c!='C')&&(c!='D')&&
	    (c!='E')&&(c!='F')&&(c!='G')&&(c!='H')&&
		(c!='I')){
		puts("Opcao INVALIDA! Tente novamente!");
	}	
}
while(c!='I');
return c;
}


int main(){

int numeros[MAX];
char opcao;

menu(opcao);
switch(opcao){
			case 'A': le_seq(numeros);      break;
			/*case 'B': escreve_seq(numeros); break;
			case 'C': maximo(numeros);      break;*/
		}
return(0);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso porque tens um do...while na função menu, que não termina enquanto não escreveres um I. Portanto o que tu tens que fazer é tirar o ciclo do menu e meter na main qualquer coisa como:

do{

char opcao = menu();

switch(opcao)

....

}while(opcao != 'I');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podias experimentar um switch n ficava mal no codigo

digo eu

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podias experimentar um switch n ficava mal no codigo

digo eu

E não é isso que ele tem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Referia-me ali akele if k ele tem ali, axo k poderia modificar de forma a usar um if, digo posso estar errado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De facto podia não lá estar, bastava meter as opções todas possíveis no switch e depois

default:
puts("Opcao INVALIDA! Tente novamente!");
break;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora