Re[19]: задачи по Visual C++ 6
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 10.10.05 08:24
Оценка:
Здравствуйте, Katenok, Вы писали:

Напоминаю алгоритм:

1. Получить с клавиатуры значения n1 и n2.
2. Для каждого A из диапазона [n1,n2] выполнить следующие действия:
2.1. Найти сумму его делителей B.
2.2. Если B принадлежит [n1,n2], то выполнить следующие действия:
2.2.1. Для числа B найти сумму его делителей C.
2.2.2. Если C=A, то вывести A и B.

K> for (int B=n1; B<=n2; B++)

K> {
K> int C=0;
K> for (int i=1;i<B;i++)
K> {if (B%i==0) C=C+i;
K> else (C==A) printf("\nNumber %d drug\n",A,C);
K> }
K> }

На шаге 2.2 ("ЕСЛИ") почему-то вместо if написан for. Еще появились какие-то два else, хотя в алгоритме нет ни одного слова "ИНАЧЕ". Да и вывод на печать в алгоритме идет в одном месте, а не в двух, потому что оптимизацией заниматься еще рано.
Re[20]: задачи по Visual C++ 6
От: Katenok  
Дата: 10.10.05 09:06
Оценка:
#include <math.h>
#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>

void main ()

{
int n1, n2;
char str[128];
CharToOem("Ââåäè çíà÷åíèå n1  ",str);cout<<str;cin>>n1;
CharToOem("Ââåäè çíà÷åíèå n2  ",str);cout<<str;cin>>n2;

for (int A=n1; A<=n2; A++)    
    { 
    int B=0;
    for (int i=1;i<A;i++)
        {if (A%i==0) B=B+i;
         
        }

        {if (B=n1 && B<=n2)
        int C=0;
        for (int i=1;i<B;i++)
            {if (B%i==0) C=C+i;
            if (C==A) printf("\nNumber %d drug\n",A,B);
            }
        }
    }      
}
Re[2]: задачи по Visual C++ 6
От: ssm Россия  
Дата: 10.10.05 09:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Поможем. Но не сделаем работу за тебя.


прошло две недели, а все идет к этому
Re[21]: задачи по Visual C++ 6
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 10.10.05 09:24
Оценка:
Здравствуйте, Katenok, Вы писали:

K>for (int A=n1; A<=n2; A++)

K> {
K> int B=0;
K> for (int i=1;i<A;i++)
K> {if (A%i==0) B=B+i;
K> }
K> {if (B=n1 && B<=n2)

Во-первых, не =, а >=. Во-вторых, "если ..., то выполнить СЛЕДУЮЩИЕ ДЕЙСТВИЯ:". То есть в фигурные скобки должен быть заключен список следующих действий, а не сам if.

K> int C=0;

K> for (int i=1;i<B;i++)
K> {if (B%i==0) C=C+i;
K> if (C==A) printf("\nNumber %d drug\n",A,B);
K> }


Надо сначала досчитать делители, а потом уже сравнивать результат. А ты наоборот, пытаешься сравнивать внутри цикла по i — опять скобка не там. Кроме того, ты выводишь два числа, а %d написан только один раз. Второе не выведется.
Re[22]: задачи по Visual C++ 6
От: Katenok  
Дата: 10.10.05 10:40
Оценка:
чтоже я тупая то такая

K>for (int A=n1; A<=n2; A++) 
K> { 
K> int B=0;
K> for (int i=1;i<A;i++)
K> if (A%i==0) B=B+i;
K> if (B>=n1 && B<=n2)

K> {int C=0;
K> for (int i=1;i<B;i++)
K> if (B%i==0) C=C+i;
K> if (C==A) cout <<A<<B<<"\n";
K> }
Re[23]: задачи по Visual C++ 6
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 10.10.05 11:15
Оценка:
Здравствуйте, Katenok, Вы писали:

K>чтоже я тупая то такая


K>> if (C==A) cout <<A<<B<<"\n";


Кажется, пора приделывать к этому заголовок и пробовать откомпилировать, а потом запустить. Ну разве что пробел между A и B вывести не помешает
Re[24]: задачи по Visual C++ 6
От: Katenok  
Дата: 10.10.05 11:30
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Кажется, пора приделывать к этому заголовок и пробовать откомпилировать, а потом запустить. Ну разве что пробел между A и B вывести не помешает


не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит
Re[25]: задачи по Visual C++ 6
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 10.10.05 11:47
Оценка:
Здравствуйте, Katenok, Вы писали:

K> не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит


Покажи еще раз полный текст. Какие n1 и n2 вводишь?
Re[26]: задачи по Visual C++ 6
От: Katenok  
Дата: 10.10.05 12:20
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Здравствуйте, Katenok, Вы писали:


K>> не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит


_>Покажи еще раз полный текст. Какие n1 и n2 вводишь?


для n1= 156 n2=864, да какие тут не вводила ни на что не реагирует

#include <math.h>
#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>

void main ()

{
int n1, n2;
char str[128];
CharToOem("Введи значение n1  ",str);cout<<str;cin>>n1;
CharToOem("Введи значение n2  ",str);cout<<str;cin>>n2;

for (int A=n1; A<=n2; A++)    
    { 
    int B=0;
    for (int i=1;i<A;i++)
        if (A%i==0) B=B+i;
         
        

        if (B=n1 && B<=n2)
        {int C=0;
        for (int i=1;i<B;i++)
            if (B%i==0) C=C+i;
            if (C==A) printf("\nNumber %d drug\n",A,B);
        }
    }
      
}
Re[27]: задачи по Visual C++ 6
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 10.10.05 12:32
Оценка:
Здравствуйте, Katenok, Вы писали:

K>>> не работает, ошибок не выдает, ввожу n1 n2 и все конец программы никаких дружественных чисел не выводит


Вот это ты писала два часа назад. Я ответил, что можно запускать.

K> if (B>=n1 && B<=n2)

K> {int C=0;
K> for (int i=1;i<B;i++)
K> if (B%i==0) C=C+i;
K> if (C==A) cout <<A<<B<<"\n";
K> }

А вот что ты запускаешь:

K> if (B=n1 && B<=n2)

K> {int C=0;
K> for (int i=1;i<B;i++)
K> if (B%i==0) C=C+i;
K> if (C==A) printf("\nNumber %d drug\n",A,B);
K> }

Найди два отличия.
Re[11]: задачи по Visual C++ 6
От: Katenok  
Дата: 10.10.05 17:03
Оценка:
Ура!!!!!!!!!! Заработала!!!!!!!!!! Пасибо огромное!!!!!!!
Re: задачи по Visual C++ 6
От: Katenok  
Дата: 11.10.05 08:17
Оценка:
У меня вот еще какая проблема возникла, некоторые библиотеки не активны, в одной задачке #include "stdafx.h" не срабатывает пишет "fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory", а если убираю то ему не нравится по тексту long long и компилятор за него цепляется. а в другой ругается на strlen, если подключаю #include <string.h> #include <strstream.h> , то пишет тоже самое "fatal error C1083: Cannot open include file:"
Re: задачи по Visual C++ 6
От: Katenok  
Дата: 18.10.05 06:39
Оценка:
Вот не получается в этой задачке выполнить первое задание "найти количество трехзначных чисел", получилось только найти эти числа и распечатать их... подскажите плиз как посчитать выведенные числа???

Найти количество трехзначных чисел, кратных 15, но не кратных 30. Распечатать эти числа


#include <iostream>
using namespace std;
#include <windows.h>
#include <math.h>
#include <stdio.h>

void main ()

{
    int c, ka=0, kost=0;
for (int i = 105; i < 1000; i ++)

{
  if(i%15==0 && i%30!=0)
      cout<<i<<endl;
}
Re[2]: задачи по Visual C++ 6
От: Кодт Россия  
Дата: 18.10.05 10:27
Оценка:
Здравствуйте, Katenok, Вы писали:

K>Вот не получается в этой задачке выполнить первое задание "найти количество трехзначных чисел", получилось только найти эти числа и распечатать их... подскажите плиз как посчитать выведенные числа???


K>Найти количество трехзначных чисел, кратных 15, но не кратных 30. Распечатать эти числа


Ну, поехали!
K>#include <iostream>
K>using namespace std;

// Зачем включены вот эти три заголовка? Ты же ими вообще не пользуешься.
K>#include <windows.h>
K>#include <math.h>
K>#include <stdio.h>

K>void main ()
K>{
    // Что это за переменные? В дальнейшем они нигде не используются, а c ещё и не инициализирована.
K>  int c, ka=0, kost=0;

K>  for (int i = 105; i < 1000; i ++)
K>  {
K>    if(i%15==0 && i%30!=0)
K>      cout<<i<<endl;
K>  }

  // Нужна ещё одна закрывающая скобка. Ну, видимо, это опечатка была
  }

Пара замечаний вне текста программы:

1) Ты ввела переменные c, ka, kost. Их имена "не говорящие".
Есть "общечеловеческие" соглашения о смысле коротких имён: примерно такие
— i,j,k — индексы
— n,m — размеры (количество)
— c,s — подсчитываемое количество и сумма (count, sum)
— x,y,z, u,v — значения (компонентов многомерного пространства и скалярные)
— t — время или промежуточная переменная
— конвенции, принятые в предметной области (например, физике или экономике)
Если привить переменной существенно иной смысл, не вытекающий ни из конвенции, ни из сокращения в очевидном контексте (скажем, s может значить sum, size, source) — то это внесёт путаницу.
Альтернатива — это давать длинные имена, иногда с префиксом, означающим тип: nSum, szSource.
Куцые сокращения, особенно на русско-английском — очень мрачно. kost это исковерканное cost (стоимость), или k_ostatok, или что-то ещё?
Разделение слов в идентификаторе можно выполнять
— прыгающим регистром
— — первая часть в верхнем регистре, вторая в нижнем (как бы в субскрипте)
— — — Ftr = сила трения, F(orce — принятый физический знак) tr(enija — транслит, но если с программой связан текст, где фигрурирует Fтр, то это приемлемо)
— — капитализация первых букв
— — — SumOddNumbers
— подчёркиванием
— — — sum_odd_numbers
— — — f_tr
Есть разные рекомендации по выбору того или иного стиля, главное — не мешать их.

2) По алгоритму.
У тебя цикл for(i=105;i<1000;++i)
Почему ты начала не с 100 (это же тоже трёхзначное)? Наверное, потому что первое трёхзначное, интересующее тебя — это 105.
Тогда зачем инкрементировать на 1? Можно сразу на 15 и более не проверять делимость на 15.
for(i=105;i<1000;i+=15).
Пойдём дальше. Каждое второе из чисел, делящихся на 15, делится на 30. Просто возьмём и перепрыгнем через них:
for(i=105;i<1000;i+=30)
То есть нам вообще нет нужды проверять делимость внутри цикла!

А подсчитать количество чисел очень просто: заведи счётчик (не забудь обнулить перед входом в цикл) и внутри цикла инкрементируй его.

Твой ход!
Перекуём баги на фичи!
Re[3]: задачи по Visual C++ 6
От: Katenok  
Дата: 18.10.05 11:29
Оценка:
Эти переменные остатки от текста программы где я пыталась посчитать числа... у меня почему то считает до 1 и все

#include <iostream>
using namespace std;
#include <windows.h>
#include <math.h>
#include <stdio.h>

void main ()

{
    int i;

for(i=105;i<1000;i+=30)

{ cout<<i<<endl;}
int sum=0;
{if(i%15==0 && i%30!=0) {sum++;
cout<<"sum="<<sum<<endl;}}
}
Re[4]: задачи по Visual C++ 6
От: Кодт Россия  
Дата: 18.10.05 11:44
Оценка:
Здравствуйте, Katenok, Вы писали:

K>Эти переменные остатки от текста программы где я пыталась посчитать числа... у меня почему то считает до 1 и все


Ладно, не хочешь сама убрать заголовки (тоже остались?) — уберу я
Но вот бешеное форматирование (произвольные отступы и неряшливо расставленные фигурные скобки) — исправляй.

K>#include <iostream>
K>using namespace std;

K>void main ()

K>{
K>    int i;

K>for(i=105;i<1000;i+=30)

K>{ cout<<i<<endl;}
K>int sum=0;
K>{if(i%15==0 && i%30!=0) {sum++;
K>cout<<"sum="<<sum<<endl;}}
K>}

Переменная sum объявлена и инициализируется внутри цикла. Естественно, что если ты её всё время обнуляешь, то что она там сосчитает?
Вытащи её перед циклом.

Кроме того, если i начинается со 105 с шагом 30, то условие i%15==0 && i%30!=0 всегда истинно.
Перекуём баги на фичи!
Re[5]: задачи по Visual C++ 6
От: Katenok  
Дата: 18.10.05 12:07
Оценка:
Вот постаралась посимпатичней отформатировать, sum вытащила вперед но все равно считает тока до 1

#include <iostream>
using namespace std;


void main ()

{
int i;
int sum=0;

for(i=105;i<1000;i+=30)

    { cout<<i<<endl;}

    {sum++; cout<<"sum="<<sum<<endl;}
    
}
Re[6]: задачи по Visual C++ 6
От: Кодт Россия  
Дата: 18.10.05 13:01
Оценка:
Здравствуйте, Katenok, Вы писали:

K>Вот постаралась посимпатичней отформатировать, sum вытащила вперед но все равно считает тока до 1


Замечательно! Красиво отформатированная программа сразу покажет тебе, где ты опять наступаешь на грабли.
K>#include <iostream>
K>using namespace std;

K>void main ()

K>{
K>int i;
K>int sum=0;

K>for(i=105;i<1000;i+=30)

K>      { cout<<i<<endl;} // относится ли этот блок к циклу?

K>      {sum++; cout<<"sum="<<sum<<endl;} // а этот блок - относится?
        // Правомерно ли ты сделала отступ, как бы говоря, что блок внутри цикла?
K>}

В каком из блоков должно выполнятся увеличение sum?
Перекуём баги на фичи!
Re[7]: задачи по Visual C++ 6
От: Katenok  
Дата: 18.10.05 13:48
Оценка:
Вот так она считает но выводит sum каждый раз после i по возрастающей

#include <iostream>
using namespace std;

void main ()

{
int i;
int sum=0;

for(i=105;i<1000;i+=30)

        { cout<<i<<endl; 
            {sum++; cout<<"sum="<<sum<<endl;} 
        }
       
}
Re[8]: задачи по Visual C++ 6
От: __LP  
Дата: 18.10.05 14:02
Оценка:
Здравствуйте, Katenok, Вы писали:

K>Вот так она считает но выводит sum каждый раз после i по возрастающей


K>
K>#include <iostream>
K>using namespace std;

K>void main ()

K>{
K>int i;
K>int sum=0;

K>for(i=105;i<1000;i+=30)

K>        { cout<<i<<endl; 
K>            {sum++; cout<<"sum="<<sum<<endl;} 
K>        }
       
K>}
K>


Для чистоты дела можешь еще убрать лишние фигурные скобки и выводить значение sum, когда оно подсчитано полностью.
#include <iostream>
using namespace std;

void main ()

{
int i;
int sum=0;

for(i=105;i<1000;i+=30)
   { 
       cout<<i<<endl; 
       sum++;
   }
cout<<"sum="<<sum<<endl;        
}
C++ можно выучить за 21 день! ...если дни — полярные.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.