Кажи за која задача, некои ги имам решавано и еве го кодот ако ти го затреба. Ако му текне на некој поедноставно решение нека го постирапо грешка го ставив тука постот ама сепак фала за решението , дан имаш и некои други решенија на задачи ?
#include <stdio.h>
void print(int a, int b)
{
int i=1;
while (i <= a)
{
printf(" ");
i++;
}
i = 1;
while (i <= b)
{
printf("*");
i++;
}
}
int main(void)
{
int row, n, space, asterix, mid, newline;
scanf("%d", &n);
space = n - 1;
asterix = 1;
mid = 0;
newline = 0;
row = 0;
while (row < (2*n-1))
{
if (newline)
printf("\n");
print(space, asterix);
if (!mid)
{
space--;
asterix += 2;
row++;
if (asterix == (2*n-1))
mid = 1;
}
else
{
space++;
asterix -= 2;
row++;
}
newline = 1;
}
}
Незнам колку ќе е по-едноставна, но е решена на малку по друг начин. Полето се разгледува како матрица(но никаде не се дефинира матрица) врз чии индекси, во зависност каде се наоѓаат, ако се извршат некои проверки се добива резултат дали се наоѓаат во границите на дијамантот или надвор од него и се печати ѕвезда или празно место. Два вложени фор циклуса, малку математика и неколку проверки ја прават целата работаАко му текне на некој поедноставно решение нека го постира
Да се напише програма со која се печати дијамант од ѕвездички (*). . .
void Print_Diamond(int n)
{
for(int i = 0; i < 2*n-1; i++)
{
for(int j = 0; j < 2*n - 1; j++)
{
if( i <= n-1 && j >= n-1 && (j - i <= n - 1) )
printf("*");
else if( i <= n-1 && j < n-1 && (i + j >= n - 1) )
printf("*");
else if( i > n-1 && j < n - 1 && (i - j <= n - 1) )
printf("*");
else if( i > n-1 && j >= n-1 && (i + j <= 3*(n-1)) )
printf("*");
else
printf(" ");
}
printf("\n");
}
}
За претходната задача pemperle никаде не дефиира матрица, а не можеш да ја компајлираш затоа што не се дефинирани променливи и фали библиотека и внесување на променливи, моето решение може и без функција да се направи, само вака беше попрегледно и затоа е со функција. Еве ти трето решение само со фор циклусиOvaa zadaca bi trebelo da se resi samo so if else i ciklusi , bez funkcii i matrici , zosto go nemame uceno toa a ovaa zadaca e na lab. vezbi pod tema ciklusi.
pemperle go ima resenieto mislam ama zosto ne mi funkcionira koga ke napravam copy paste na kodot mi javuva greska vo 3 red.
Treba da se dopolni kodot so nesto ili jas gresam nekade ?
--- надополнето: 21 октомври 2012 во 13:38 ---
Исто така следните 3 задачи се под категоријата циклуси,
Ако некој може да ги реши без функции и матрици или да даде концепт тоа би било супер.
Пробав да ги решам но циклусиве се накако потешки за мене.
Нормално е тоа или ми треба време и искуство?
Задачи:
1. Да се напише програма која го наоѓа најголемиот заеднички делител (НЗД) на два броја. Броевите се читаат од тастатура.
Пр. a = 100, b = 584 NZD(a,b) = 4
2. Да се напише програма која ќе ги отпечати сите прости броеви од даден опсег (почетокот и крајот на опсегот се внесуваат од тастатура) кои се составени само од непарни цифри. На крајот да се испечати бројот на прости броеви кои го задоволуваат условот (за еден број велиме дека е прост доколку има точно два (различни) делители (1 и самиот тој број)).
3. Да се напише програма со која се вчитуваат N броеви од тастатура. За секој од броевите се печатат бројот на трансформации после кои оригиналниот број станува едноцифрен, како и новодобиениот трансформиран број. Со секоја трансформација на оригиналниот број, тој се заменува со збирот на неговите цифри.
Пр. 712 -> 10 -> 1
Broj na transformacii: 3, tranformiran broj: 1.
#include <stdio.h>
int main() {
int num1 , num2, tmp, i, nzd=1;
scanf("%d %d", &num1, &num2);
if(num1 < num2) {tmp = num1; num1 = num2; num2 = tmp;}
for(i=1; i<= num2; i++) {
if((num1 % i == 0) && (num2 % i == 0)) nzd = i;
}
printf("%d", nzd);
return 0;
}
#include <stdio.h>
int main() {
int start ,end, tmp, i, prost=0, pecati=0, j, cifra;
scanf("%d %d", &start, &end);
for(i=start; i<= end; i++)
{
prost = 1; pecati = 1; tmp=i;
for(j=2; j <= i/2; j++)
{
if(i % j == 0) { /*printf("%d ne e prost\n", i); */ prost = 0; break;}
}
if(prost != 0)
{
/*printf("%d se testira za cifri\n", i); */
while(tmp>0)
{
cifra = tmp % 10;
tmp /= 10;
if(cifra % 2 == 0) { /* printf("%d e prost no ne treba da se pecati\n", i); */ pecati = 0; break; }
}
if(pecati != 0) printf("%d\n", i);
}
}
return 0;
}
#include <stdio.h>
int main() {
int num, tran = 1, tmp, sum = 0;
scanf("%d", &num);
while (num >= 10)
{
tmp = num;
sum = 0;
while(tmp > 0)
{
sum = sum + (tmp % 10);
tmp /= 10;
}
num = sum;
tran++;
}
printf("Posle %d transformacii brojot e %d", tran, num);
return 0;
}
Незнам точно како си ја пуштил. Еве пробај вака со целиот код:O
pemperle go ima resenieto mislam ama zosto ne mi funkcionira koga ke napravam copy paste na kodot mi javuva greska vo 3 red.
#include <stdio.h>
int main(void)
{
int n, i, j;
printf("Razmer: ");
scanf("%d",&n);
for(i = 0; i < 2*n-1; i++)
{
for(j = 0; j < 2*n - 1; j++)
{
if( i <= n-1 && j >= n-1 && (j - i <= n - 1) )
printf("*");
else if( i <= n-1 && j < n-1 && (i + j >= n - 1) )
printf("*");
else if( i > n-1 && j < n - 1 && (i - j <= n - 1) )
printf("*");
else if( i > n-1 && j >= n-1 && (i + j <= 3*(n-1)) )
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n\n");
}
Оваа задача вака напишана во codeblocks ми јавува warning дека има "too many arguments to format", и кога ќе ја извршам не ми го печати резултатот.Прва задача:
Код:#include <stdio.h> int main() { int num1 , num2, tmp, i, nzd=1; scanf("%d %d", &num1, &num2); if(num1 < num2) {tmp = num1; num1 = num2; num2 = tmp;} for(i=1; i<= num2; i++) { if((num1 % i == 0) && (num2 % i == 0)) nzd = i; } printf("%d", nzd); return 0; }
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d %d", &a,&b);
while(1)
{
c=a%b;
if(c==0)
return b;
a=b;
b=c;
}
}
Имаш грешка во твојот код, маин функција треба да враќа 0 или ништо да не враќа. Инаку мојот код функцинира во компајлер, а и твојот кога ке се поправи функцинира.Измена: проверив на онлајн компајлер немам никаков проблем. Некоја идеја како да го решам ова со codeblocks. Како default компајлер ми е ставен GNU GCC compiler.Код:#include <stdio.h> int main() { int a,b,c; scanf("%d %d", &a,&b); while(1) { c=a%b; if(c==0) break; a=b; b=c; } printf("NZD: %d", b); }
Ке ти пројде на некои примери, а некои ке ти падне, бидејќи никаде не е наведено трицифрен број, не е целосно тоа решение. Треба да размислуваш глобално како да ги опфатиш сите броеви, а не само трицифрени. Ја имам и таа решено, ке ја ставам ако заглавиш ама пробај прво сам да ја решиш. Еве ти идејаДали за оваа задача :
Да се напише програма која од тастатура ќе прочита еден природен број n, и на екран ќе го испечати најмалиот „среќен“ број кој што e поголем од n. За еден природен број велиме дека е „среќен“ ако тој содржи само „среќни“ цифри (цифрите 7 и 9).
Пример: Влез: 789 Излез: 797
Ова е правилно решение или ако треба подобро(поправилно) да се реши нека каже некој поискусен.
Исто така. како би се решила задачава за броеви од 10 до 1 000 000 на пример без да ги бaраш кои се цифрите од внесениот број.
Јас ја решив за 3-цифрени само а во задачава не е наведено тоа . ако не е само за 3-цифрени тогаш не знам како би ја решил.Имате некоја идеја?
Нешто да не имаш згрешено во условот, како да ми се гледаат многу променливи што се преклопуваат и плус алгоритамот за корен јас го знам малку по различно. Ќе ти го напишам кодот за првата, како што мислам дека треба, па ако треба, измени го.Некој решение на следниве задачи, Благодарам
#include <iostream>
using namespace std;
double loop(double guess, double x)
{
if(abs(guess * guess - x) < 0.001)
return guess;
else
return loop( ( guess + x/guess)/2, x);
}
double root(double n)
{
return loop(1, n);
}
int main(void)
{
double n;
cin >> n;
cout << "Reshenje " << root(n) << endl;
}
Благодарам, само што со abs јавуваше грешка па на тоа место ставив fabs и работи.Нешто да не имаш згрешено во условот, како да ми се гледаат многу променливи што се преклопуваат и плус алгоритамот за корен јас го знам малку по различно. Ќе ти го напишам кодот за првата, како што мислам дека треба, па ако треба, измени го.
Ако треба коефициентот на точност да се внесе од тастатура, ќе треба да го зададеш како параметар и во двете функции, и тоа ќе ти е бројот што ќе стои на местото на 0.001 во условот во функцијата loop. А за почетната вредност на b, (тука го напишав guess за прегледност), по добро да почнеш со некоја константа (алгоритамот ќе работи со секој позитивен број) за да се знае дека вредноста нема никаква врска со променливите или влез од тастатура.Код:#include <iostream> using namespace std; double loop(double guess, double x) { if(abs(guess * guess - x) < 0.001) return guess; else return loop( ( guess + x/guess)/2, x); } double root(double n) { return loop(1, n); } int main(void) { double n; cin >> n; cout << "Reshenje " << root(n) << endl; }
Ке ти пројде на некои примери, а некои ке ти падне, бидејќи никаде не е наведено трицифрен број, не е целосно тоа решение. Треба да размислуваш глобално како да ги опфатиш сите броеви, а не само трицифрени. Ја имам и таа решено, ке ја ставам ако заглавиш ама пробај прво сам да ја решиш. Еве ти идеја
Стави еден while циклус кој ке ги проверува сите броеви, почнувајќи од внесениот. И во него уште еден while циклус кој ке ги проверува цифрите на секој број, ако најде барем една цифра што не е 7 или 9 нека прекине, и нека оди на наредниот број...
#include <stdio.h>
int main()
{
int n,i,cifra,max;
scanf("%d",&n);
while (n<1000)
{
i=n;
while (i>0)
{
cifra= i%10;
if (cifra != 7 || cifra != 9 )
{
max=0;
break;
}
if (cifra== 7 || cifra== 9 )
{
max=1;
}
i/=10;
}
if (max == 1){
printf("%d\n",n);
break;
}
n++;
}
getch();
}