C/C++

M

Mr.InF3ction

Гостин
Епа задачава при секое извршување дава ист резултат така да можеш слободно да ставиш ова :
PHP:
#include<stdio.h>
int main()
{
int i=1000;
int prva,vtora,treta,cetvrta;
int suma=0;
    {
        while(i<=9999)
 
        {
            prva=i/1000;//Prvata e najznacajna cifra, kako ide natamu imaa sve pomala vaznost
            vtora=(i/100)%10;
            treta=(i/10)%10;
            cetvrta=(i%10);
 
                if(prva==vtora+treta+cetvrta)
                {
                    printf("%d  ", i);
                    suma=suma+i;
                    if(i != 9900)
                        printf(" + ");
                     else
                        break;
             
                }
 
                i++;
 
        }
 
    }
    printf(" = %d\n\n", suma);
    return 0;
 
}
И ќе работи ок.
Иначе со заградите имаше мала грешка си ставил ако условот е исполнет само да го печати бројот..а во сумата уствари додаваат сите бројки од 1000 до 9999
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
Ај да прашам некој овие што се понапредниве.Дали кај двојни поврзани листи можам некако еден покажувач да врзам за последниот јазаол ? ми треба за да проверам палиндром ?
 
M

Mr.InF3ction

Гостин
Ace-Snake
Можеш и мораш така да го решиш проблемот.
2 покажувачи, едното на почеток покажува, другото на крај. Да предпоставиме дека функцијата прима покажувач кон првиот елемент од самата листа...со покажувачот за претходникот идеш до крајот на листата. пр Ако функцијата прима покажувач P како почеток на листа. ти правиш еден нов покажувач што ќе покажува на P->back или P->llink..:)
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
 
M

Mr.InF3ction

Гостин
Работиш со двојна поврзана листа или едбистрано поврзана листа?
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
while по принцип се користи за да стигнеш до некој определен елемент, а иначе реализацијата треба да ти биде како што ти кажа Mr.InF3ction, со два покажувачи.
--- надополнето: 29 октомври 2012 во 20:40 ---
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
Постни ја цела класа да ја видиме, па ќе видиме. Иначе пробај со v->link->link !=NULL на тоа место.
 
T

TheThinker

Гостин
Епа задачава при секое извршување дава ист резултат така да можеш слободно да ставиш ова :
PHP:
#include<stdio.h>
int main()
{
int i=1000;
int prva,vtora,treta,cetvrta;
int suma=0;
    {
        while(i<=9999)
 
        {
            prva=i/1000;//Prvata e najznacajna cifra, kako ide natamu imaa sve pomala vaznost
            vtora=(i/100)%10;
            treta=(i/10)%10;
            cetvrta=(i%10);
 
                if(prva==vtora+treta+cetvrta)
                {
                    printf("%d  ", i);
                    suma=suma+i;
                    if(i != 9900)
                        printf(" + ");
                    else
                        break;
           
                }
 
                i++;
 
        }
 
    }
    printf(" = %d\n\n", suma);
    return 0;
 
}
И ќе работи ок.
Иначе со заградите имаше мала грешка си ставил ако условот е исполнет само да го печати бројот..а во сумата уствари додаваат сите бројки од 1000 до 9999

Се супер тоа, само што си ја ми ја средил задачата кога знаеш дека последниот број што ти го вади е 9900. Што ако не знаеш кој е , како ќе се постави условот тогаш?
 
Член од
16 април 2012
Мислења
333
Поени од реакции
217
Да се напише програма во која се читаат знаци од тастатура сè додека не се прочита
знакот ‘?’. Програмата треба да ги отпечати на екран знакот кој е внесен најмногу
пати последователно како и бројот на последователни внесувања. Ако повеќе знаци
имаат ист број на последователни внесувања да се отпечати последниот внесен знак
со најмногу повторувања.
Пример:
Влез:
ova-Treba da Elesnaaaaa_zAaaadddddacca?
Излез:
d 5



Некој има решение на задачава од лански колоквиум на ФИНКИ, ама со функција getchar()?
 

POS-51

Infinity Driver
Член од
11 ноември 2008
Мислења
1.411
Поени од реакции
445
Ајде програмеришта

Од четири цели броеви кои се читаат од СВ да се отпечати бројот со максимална вредност. Задачата да се реши со помош на if наредбата.

Да се напише програма која од непознат број на цели броеви кои се вчитуваат од СВ ќе го отпечати последно внесениот трицифрен парен број.

Од СВ се вчитуваат n цели броеви и еден број m во опсегот од 0 до 9. Да се напише програма, која од n-те броеви внесени од тастатура ќе го исфрли бројот m и ќе испечати колку вкупно пати тој е исфрлен.
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
PHP:
#include<stdio.h>
#include<malloc.h>
typedef struct element{
int info;
struct element *llink, *rlink;
}node;
 
node * novaDvojna()
{
node *v = (node *)malloc(sizeof(node));
v -> llink = v;
v -> rlink = v;
return v;
}
 
void dodadi(node **pok_v, int broj){
node *temp;
temp=(node *)malloc(sizeof(node));
temp->info=broj;
temp -> llink = (*pok_v) -> llink;
temp -> rlink = *pok_v;
(*pok_v) -> llink -> rlink = temp;
(*pok_v) -> llink = temp;
}
 
int isItPalindrome(node *v,int n)
{
node *p,*q;
int b,brojac=0,i;
p=v;
q=v;
b=n/2;
while(q->rlink->rlink!=NULL)
{
q=q->rlink;
}
for(i=0;i<b;i++)
{
if(p->info==q->info)
{
p=p->rlink;
q=q->llink;
brojac++;
}
}
if(brojac==b)
return 1;
else return -1;
}
 
 
int main(){
node *lista=NULL, *l1=NULL, *l2=NULL;
int i,n,info;
 
lista=novaDvojna();
 
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf ("%d", &info);
dodadi(&lista,info);
}
 
int rez = isItPalindrome(lista,n) ;
printf("\n%d",rez);
 
return 0;
}
////////
еве ја цела и ми заглавува во тоа while незнам зошто неможам баш да сватам зошто а другото мислам дека е океу.Таму каде што е болд
 
M

Mr.InF3ction

Гостин
TheThinker

Код:
#include<stdio.h>
int main()
{
int i=1000;
int prva,vtora,treta,cetvrta;
int flag = 0;
int suma=1;
    {
        while(i<=9999)
 
        {
 
            prva=i/1000;//Prvata e najznacajna cifra, kako ide natamu imaa sve pomala vaznost
            vtora=(i/100)%10;
            treta=(i/10)%10;
            cetvrta=(i%10);
 
                if(prva==vtora+treta+cetvrta)
                {
                    if(flag)
                        printf(" + ");
                    suma=suma+i;
 
                    flag = 1;
 
                    printf("%d ", i);
                }
            i++;
        }
 
    }
    printf(" = %d\n\n", suma);
    return 0;
 
}
Епа тогаш ќе направиш како горе кодот. Целта е кога и да се исполни условот прво печатиш "+" после бројот...и така секогаш ќе имаш + nekojBroj = suma.
Но проблемот е што на почеток ќе ти печати вака + broj + broj + broj = suma.
И затоа ставаш еден flag што на почеток ќе биде false а после секогаш ќе биде true и финтава кога таа променлвиа е true печати "+" ..што значи печати "+" секогаш освен при прва итерација на циклусот..:)
--- надополнето: 29 октомври 2012 во 21:32 ---
Ace-Snake

Кога работиш со двојна поврзана листа не постои NULL. Бидејќи листата е кружна.
Така да треба да направиш еден покажувач што ќе покажува на првиот елемент од листата ( водич ), и ќе пуштиш еден циклус да итерира се додека не дојде на истото место...тогаш знаеш дека си ја изминал цела листа.. while (lista != vodic ) ..
Ама добро за задачата немаш потреба од такви работи просто решение :
PHP:
int isItPalindrome(node *v,int n)
{
    node *kraj = v->llink; // pokazuva na krajot
    v = v->rlink;  // ides na sledniot element bidejki prviot e vodic i info poleto e random glupost
    while( v != kraj){ // inaku ova ne znaci deka ka ja iterira do kraj,,tuku ednata pocnuva od levno, drugata od desno..i ke vrti se dodeka ne dojdat na sredina vo ist poziacija 
        if(v->info != kraj->info)
            return -1;
        v = v->rlink;
        kraj = kraj->llink;
    }
    return 1;
 
}
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
фала многу.Инаку мислев дека секоја двојно поврзана листа не е кружна,и дека левиот и десниот линк од последните јазли покажуваат кон NULL.
 
Член од
7 јануари 2008
Мислења
5.366
Поени од реакции
804
Ајде програмеришта

Од четири цели броеви кои се читаат од СВ да се отпечати бројот со максимална вредност. Задачата да се реши со помош на if наредбата.

Да се напише програма која од непознат број на цели броеви кои се вчитуваат од СВ ќе го отпечати последно внесениот трицифрен парен број.

Од СВ се вчитуваат n цели броеви и еден број m во опсегот од 0 до 9. Да се напише програма, која од n-те броеви внесени од тастатура ќе го исфрли бројот m и ќе испечати колку вкупно пати тој е исфрлен.

За првата можеш да користиш најразлични алгоритми за сортирање (bubble sort, quick sort..) но бидејќи ти се бара со if-else наредби, мислам дека вака би било едно решение:


PHP:
#include <stdio.h>
#include <stdlib.h>
#define MAX_INTS 4
 
int main()
{
int min = INT_MAX;
int max = INT_MIN;
int a[MAX_INTS];
int i;
 
for (i = 0; i < MAX_INTS; i++)
{
printf( "Vnesi broj %d od %d : ", (i + 1), MAX_INTS);
scanf( "%d", &a );
 
if ( a < min) min = a;
if ( a > max) max = a;
}
 
printf("%d Najmal e \n", min);
printf("%d Najgolem e \n", max);
 
return 0;
}
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.160
Поени од реакции
5.938
фала многу.Инаку мислев дека секоја двојно поврзана листа не е кружна,и дека левиот и десниот линк од последните јазли покажуваат кон NULL.
По дефиниција листите не се кружни. Често во задачи се бара ти да ги направиш да бидат кружни така да кодот од Mr. Infection ќе ти користи за понатаму. Али по дефолт првиот покажувач иде на првиот елемент, а вториот иде на последниот елемент кој ќе го најдеш така што ќе ја изминеш цела листа со for циклус (ова е глупото кај листи). И тоа е тоа.

EDIT: заборавив да кажам дека тоа со јазлите е така како што и самиот пиша.
 

Kajgana Shop

На врв Bottom