C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Епа задачава при секое извршување дава ист резултат така да можеш слободно да ставиш ова :
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
 
Ај да прашам некој овие што се понапредниве.Дали кај двојни поврзани листи можам некако еден покажувач да врзам за последниот јазаол ? ми треба за да проверам палиндром ?
 
Ace-Snake
Можеш и мораш така да го решиш проблемот.
2 покажувачи, едното на почеток покажува, другото на крај. Да предпоставиме дека функцијата прима покажувач кон првиот елемент од самата листа...со покажувачот за претходникот идеш до крајот на листата. пр Ако функцијата прима покажувач P како почеток на листа. ти правиш еден нов покажувач што ќе покажува на P->back или P->llink..:)
 
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
 
Работиш со двојна поврзана листа или едбистрано поврзана листа?
 
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
while по принцип се користи за да стигнеш до некој определен елемент, а иначе реализацијата треба да ти биде како што ти кажа Mr.InF3ction, со два покажувачи.
--- надополнето: 29 октомври 2012 во 20:40 ---
Е сеа знам да си поставам покажувач кон првиот,ама за последниот направив while(se dodeka v->link !=null) и тука ми заглавува.
За ова помош ако може ?
Постни ја цела класа да ја видиме, па ќе видиме. Иначе пробај со v->link->link !=NULL на тоа место.
 
Епа задачава при секое извршување дава ист резултат така да можеш слободно да ставиш ова :
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. Што ако не знаеш кој е , како ќе се постави условот тогаш?
 
Да се напише програма во која се читаат знаци од тастатура сè додека не се прочита
знакот ‘?’. Програмата треба да ги отпечати на екран знакот кој е внесен најмногу
пати последователно како и бројот на последователни внесувања. Ако повеќе знаци
имаат ист број на последователни внесувања да се отпечати последниот внесен знак
со најмногу повторувања.
Пример:
Влез:
ova-Treba da Elesnaaaaa_zAaaadddddacca?
Излез:
d 5



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

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

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

Од СВ се вчитуваат n цели броеви и еден број m во опсегот од 0 до 9. Да се напише програма, која од n-те броеви внесени од тастатура ќе го исфрли бројот m и ќе испечати колку вкупно пати тој е исфрлен.
 
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 незнам зошто неможам баш да сватам зошто а другото мислам дека е океу.Таму каде што е болд
 
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;
 
}
 
фала многу.Инаку мислев дека секоја двојно поврзана листа не е кружна,и дека левиот и десниот линк од последните јазли покажуваат кон NULL.
 
Ајде програмеришта

Од четири цели броеви кои се читаат од СВ да се отпечати бројот со максимална вредност. Задачата да се реши со помош на 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;
}
 
фала многу.Инаку мислев дека секоја двојно поврзана листа не е кружна,и дека левиот и десниот линк од последните јазли покажуваат кон NULL.
По дефиниција листите не се кружни. Често во задачи се бара ти да ги направиш да бидат кружни така да кодот од Mr. Infection ќе ти користи за понатаму. Али по дефолт првиот покажувач иде на првиот елемент, а вториот иде на последниот елемент кој ќе го најдеш така што ќе ја изминеш цела листа со for циклус (ова е глупото кај листи). И тоа е тоа.

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

Kajgana Shop

Back
На врв Bottom