Ir para conteúdo
Visualizar no app

Uma forma melhor de navegar. Saiba mais.

MM Fórum

Um app em tela cheia na sua Tela de Início com notificações push, avisos e mais.

Para instalar este app no iOS/iPadOS
  1. Toque no ícone de Compartilhamento no Safari
  2. Role o menu e toque em Adicionar à Tela de Início.
  3. Toque em Adicionar no canto superior direito.
Para instalar este app no Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Ajuda em Programação "C" ...

Featured Replies

Postado

Olá, boa tarde

Estou com um problema em um exercício (não sei como faz)...

Estou usando o Dev C++

Programa main.c

********************************************

CODE

#include <stdio.h>

#include <stdlib.h>

#include "ListaDinamicaOrdenada.h"

int main(){

testaLista();

system("PAUSE");

return 0;

}

******************************************

Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h

*****************************************

CODE

struct no {

int conteudo;

struct no *prox; // Ponteiro - Estrutura Recursiva

};

typedef struct no Lista;

void imprimeLista (Lista *ini);

void cria(Lista **ini) {

*ini = NULL;

}

int vazia(Lista *p) {

if (p == NULL)

return 0;

else

return 1;

}

Lista *resto(Lista *p) {

return p->prox;

}

int primeiro(Lista *p) {

int x = p->conteudo;

return x;

}

void insere (int x, Lista **p) {

Lista *L = *p;

Lista *nova;

nova = malloc (sizeof (Lista));

nova->conteudo = x;

// Se a lista estiver Vazia

if (vazia(L) == 0) {

nova->prox = NULL;

*p = nova;

// Se o item é menor ou igual ao primeiro

} else if (nova->conteudo <= L->conteudo) {

nova->prox = L;

*p = nova;

} else {

Lista *ant = L;

Lista *aux = ant->prox;

do {

//..

if (aux==NULL){

ant->prox=nova;

nova->prox=NULL;

}

//..

// Se o item é maior que o iesimo elemento

else if ((nova->conteudo <= aux->conteudo)) {

nova->prox = aux;

ant->prox = nova;

aux = NULL;

// Se o item e maior que todos elementos

} else if (aux->prox == NULL) {

aux->prox = nova;

nova->prox = NULL;

aux = NULL;

// Anda na lista

} else {

ant = aux;

aux = aux->prox;

}

} while (aux != NULL);

}

}

void removerX (int x, Lista **p) {

Lista *L = *p;

if (vazia(L) == 0) {

printf("\n Lista esta vazia!");

// se o elemento 'e menor que o primerio elemento ele não esta na lista

} else if (x < L->conteudo) {

printf("\n O elemento não esta na lista!");

// Se o elemento e igual ao primeiro ao elemento da lista

} else if (x == L->conteudo) {

Lista *morta;

morta = L;

L = morta->prox;

free (morta);

*p = L;

} else {

Lista *ant = L;

Lista *morta = L->prox;

while (morta != NULL) {

if (x == morta->conteudo) {

ant->prox = morta->prox;

morta = NULL;

} else {

ant = morta;

morta = morta->prox;

}

}

free(morta);

*p = L;

}

}

int pertence(int x, Lista *p) {

int a = 1;

Lista *L = p;

while (vazia(L) == 1) {

if (primeiro(L) == x) {

a = 0;

L = NULL;

} else {

L = resto(L);

}

}

return a;

}

int acessa(int ind, Lista *p) {

Lista *L = p;

while ((vazia(L) == 1) & (ind > 1)) {

L = resto(L);

ind--;

}

if (vazia(L) == 0 | ind < 1)

return -1;

else

return (int) primeiro(L);

}

void destroi(Lista **p) {

Lista *L = *p;

while (L != NULL) {

Lista *morta = L;

L = resto(L);

free(morta);

}

}

void imprimeLista (Lista *ini) {

printf("\n Lista: [");

Lista *p;

for (p = ini; p != NULL; p = resto(p))

printf ("%d -> ", primeiro(p));

//

printf("NULL]");

}

void testaLista() {

Lista *ini;

cria(&ini);

insere(300, &ini);

imprimeLista(ini);

insere(20, &ini);

imprimeLista(ini);

insere(10, &ini);

imprimeLista(ini);

insere(40, &ini);

imprimeLista(ini);

insere(4, &ini);

insere(5, &ini);

imprimeLista(ini);

insere(400, &ini);

imprimeLista(ini);

insere(560, &ini);

imprimeLista(ini);

insere(42, &ini);

imprimeLista(ini);

//Entrando com os elementos da consulta

int nr1, nr2;

printf ("\n \n Digite um numero: ");

scanf ("%d", &nr1);

printf ("\n Digite outro numero: ");

scanf ("%d", &nr2);

printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2);

//Verificando se o elemento pertence a lista

printf("\n O Elemento: %d ", nr1);

printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista

printf("\n O Elemento: %d ", nr2);

printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista

//Verificando o conteudo da posicao digitada

int na1;

printf ("\n\nDigite uma posicao na lista: ");

scanf ("%d", &na1);

printf ("\n\n\nVoce digitou os numeros: %d \n", na1);

printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista

//REMOVER

imprimeLista(ini);

removerX(400, &ini);

imprimeLista(ini);

removerX(560, &ini);

imprimeLista(ini);

removerX(4, &ini);

imprimeLista(ini);

removerX(5, &ini);

imprimeLista(ini);

destroi(&ini); //Função Destroi a lista

printf(" \n -- FIM -- \n");

}

***************************************************

Enunciado:

Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada.

1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista.

2) Função Soma(L): Soma os elementos de todos os nós.

3) Função Ultimo(L): Retorna o ultimo elemento da lista.

4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista.

5) Função iguais(A,B): Recebe duas listas(A e e verifica se elas são iguais.

6) Função Junta(A,B): Retorna a união dos elementos das listas A e B.

Muito Obrigado pela ajuda!!!!

  • Respostas 8
  • Visualizações 1.7k
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Postado

Eita desespero, ainda bem que eu ja passei por isso, odeio C! Objective-c é mais suportavel, mas so pelo resultado ! hehehehe

Postado
  • Autor

Nem fale......

Postado

Caraca!!!

Tem um botão para utilizar a tag code. Utilize. Quem sabe assim eu animo eu dar uma olhada...

Ah! Escreva onde está tendo o problema, tb.

Editado por franzSilva

Postado
  • Autor

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include "ListaDinamicaOrdenada.h"

int main(){
testaLista();
system("PAUSE");
return 0;
}

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include "ListaDinamicaOrdenada.h"

int main(){
testaLista();
system("PAUSE");
return 0;
}
******************************************
Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h

*****************************************
CODE
struct no {
int conteudo;
struct no *prox; // Ponteiro - Estrutura Recursiva
};

typedef struct no Lista;
void imprimeLista (Lista *ini);

void cria(Lista **ini) {
*ini = NULL;
}

int vazia(Lista *p) {
if (p == NULL)
return 0;
else
return 1;
}

Lista *resto(Lista *p) {
return p-&gt;prox;
}

int primeiro(Lista *p) {
int x = p-&gt;conteudo;
return x;
}

void insere (int x, Lista **p) {
Lista *L = *p;
Lista *nova;
nova = malloc (sizeof (Lista));
nova-&gt;conteudo = x;

// Se a lista estiver Vazia
if (vazia(L) == 0) {
nova-&gt;prox = NULL;
*p = nova;

// Se o item é menor ou igual ao primeiro
} else if (nova-&gt;conteudo &lt;= L-&gt;conteudo) {
nova-&gt;prox = L;
*p = nova;
} else {
Lista *ant = L;
Lista *aux = ant-&gt;prox;
do {
//..
if (aux==NULL){
ant-&gt;prox=nova;
nova-&gt;prox=NULL;
}
//..
// Se o item é maior que o iesimo elemento
else if ((nova-&gt;conteudo &lt;= aux-&gt;conteudo)) {
nova-&gt;prox = aux;
ant-&gt;prox = nova;
aux = NULL;

// Se o item e maior que todos elementos
} else if (aux-&gt;prox == NULL) {
aux-&gt;prox = nova;
nova-&gt;prox = NULL;
aux = NULL;

// Anda na lista
} else {
ant = aux;
aux = aux-&gt;prox;
}
} while (aux != NULL);
}
}
void removerX (int x, Lista **p) {
Lista *L = *p;
if (vazia(L) == 0) {
printf("\n Lista esta vazia!");
// se o elemento 'e menor que o primerio elemento ele não esta na lista
} else if (x &lt; L-&gt;conteudo) {
printf("\n O elemento não esta na lista!");
// Se o elemento e igual ao primeiro ao elemento da lista
} else if (x == L-&gt;conteudo) {
Lista *morta;
morta = L;
L = morta-&gt;prox;
free (morta);
*p = L;
} else {
Lista *ant = L;
Lista *morta = L-&gt;prox;
while (morta != NULL) {
if (x == morta-&gt;conteudo) {
ant-&gt;prox = morta-&gt;prox;
morta = NULL;
} else {
ant = morta;
morta = morta-&gt;prox;
}
}
free(morta);
*p = L;
}
}
int pertence(int x, Lista *p) {
int a = 1;
Lista *L = p;
while (vazia(L) == 1) {
if (primeiro(L) == x) {
a = 0;
L = NULL;
} else {
L = resto(L);
}
}
return a;
}
int acessa(int ind, Lista *p) {
Lista *L = p;
while ((vazia(L) == 1) &amp; (ind &gt; 1)) {
L = resto(L);
ind--;
}
if (vazia(L) == 0 | ind &lt; 1)
return -1;
else
return (int) primeiro(L);
}
void destroi(Lista **p) {
Lista *L = *p;
while (L != NULL) {
Lista *morta = L;
L = resto(L);
free(morta);
}
}
void imprimeLista (Lista *ini) {
printf("\n Lista: [");
Lista *p;
for (p = ini; p != NULL; p = resto(p))
printf ("%d -&gt; ", primeiro(p));
//
printf("NULL]");
}
void testaLista() {
Lista *ini;
cria(&amp;ini);
insere(300, &amp;ini);
imprimeLista(ini);
insere(20, &amp;ini);
imprimeLista(ini);
insere(10, &amp;ini);
imprimeLista(ini);
insere(40, &amp;ini);
imprimeLista(ini);
insere(4, &amp;ini);
insere(5, &amp;ini);
imprimeLista(ini);
insere(400, &amp;ini);
imprimeLista(ini);
insere(560, &amp;ini);
imprimeLista(ini);
insere(42, &amp;ini);
imprimeLista(ini);

//Entrando com os elementos da consulta
int nr1, nr2;
printf ("\n \n Digite um numero: ");
scanf ("%d", &amp;nr1);
printf ("\n Digite outro numero: ");
scanf ("%d", &amp;nr2);
printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2);

//Verificando se o elemento pertence a lista
printf("\n O Elemento: %d ", nr1);
printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista
printf("\n O Elemento: %d ", nr2);
printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista

//Verificando o conteudo da posicao digitada
int na1;
printf ("\n\nDigite uma posicao na lista: ");
scanf ("%d", &amp;na1);
printf ("\n\n\nVoce digitou os numeros: %d \n", na1);
printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista

//REMOVER
imprimeLista(ini);
removerX(400, &amp;ini);
imprimeLista(ini);
removerX(560, &amp;ini);
imprimeLista(ini);
removerX(4, &amp;ini);
imprimeLista(ini);
removerX(5, &amp;ini);
imprimeLista(ini);
destroi(&amp;ini); //Função Destroi a lista
printf(" \n -- FIM -- \n");
}

blz ... vlw

toda ajuda é bem vinda....

Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada.

1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista.

2) Função Soma(L): Soma os elementos de todos os nós.

3) Função Ultimo(L): Retorna o ultimo elemento da lista.

4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista.

5) Função iguais(A,B): Recebe duas listas(A e e verifica se elas são iguais.

6) Função Junta(A,B): Retorna a união dos elementos das listas A e B.

Postado

Ou seja, você não tem a mínima idéia por onde começar.

A noite dou uma olhada pra ti, e implemento uma das funções para você ver.

Postado

1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração.

2)O mesmo laço só que acumulando o valor dos elementos.

...

Enfim, quando tu conseguir fazer o laço que percorre a lista estará tudo resolvido.

No próprio código tem um exemplo: "for (p = ini; p != NULL; p = resto(p))"

Sinceramente, fazer isso com um "for" não é a forma mais elegante, faça com um "while".

Postado

bom, minha ideia de vc utilizar o tag code era para poder ver um código mais legível. Para ser mais preciso, identado.

acho que a galera aqui, tem pouco tempo livre, mas gosta de ajudar, então se puder identar o código ajuda bastante.

onde mesmo vc tem problema? não tem problema? não sabe por onde começar?

Bons estudos...

Postado
1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração.

2)O mesmo laço só que acumulando o valor dos elementos.

...

Eu ia sugerir a mesma coisa, percorrendo a lista desse jeito vc consegue resolver ate o item 4 sem problemas, tenta implementar e depois posta os resultados

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conta

Navegação

Buscar

Buscar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.