Valk@ Опубликовано 2 июля, 2008 Жалоба Поделиться Опубликовано 2 июля, 2008 Ребята! Что-то у меня никак не получается с прогами которые задают нам преподаватели. Помогите пожалуйста! Программу необходимо написать в С++ Borland 1) дан текстовый массив из 200 букв. Выстроить в алфавитном порядке все строчные буквы; 2) даны числа от 2 до n (n<=10) найти все простые числа; 3)матрица задается формулой а(i,j)=cos(i^2+j^2), найти транспонированную матрицу а. Для профи это же раз плюнуть. Надеюсь на помощь! :) :rolleyes: Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 июля, 2008 Жалоба Поделиться Опубликовано 2 июля, 2008 (изменено) Valk@: Вообще-то для таких заданий в начале раздела среди "Важных" есть тема "Заказы "Сделайте все за меня"". Но вернемся к нашим баранам. 1) дан текстовый массив из 200 букв. Выстроить в алфавитном порядке все строчные буквы;2) даны числа от 2 до n (n<=10) найти все простые числа; 3)матрица задается формулой а(i,j)=cos(i^2+j^2), найти транспонированную матрицу а. Для профи это же раз плюнуть. Профи берут за работу деньги. В этом их отличие от не-профи. Плевать по заказу, кстати, тоже работа. Но насчет "раз плюнуть" в третьем случае особо точно подмечено. Транспонированная матрица совпадает с исходной. Соответственно задача - типа "написать таблицу умножения на 1". Такую чушь писать рука не поднимается. Второй случай ненамного сложнее: достаточно напечатать все числа из ряда 2,3,5,7, меньшие или равные заданному n. Программа может выглядеть так: #include <iostream.h>#include <stdio.h>using namespace std;main(){int i,n,m[4]={2,3,5,7}; cout<<"n="; cin>>n; cout<<endl; for(i=0;i<4;i++)if(m[i]<=n)cout<<m[i];cout<<endl; getchar();getchar(); } Borland C++ под рукой, правда, нет, был Dev-C++, но это не должно быть важным. Первый случай еще чуть посложнее. Ну да ладно, "по порядку номеров рассчитайсь!": #include <iostream.h>#include <stdio.h>using namespace std;const int l=200;main(){char c,m[l],n[l]; int i,j;for(i=0;i<l;i++)cin>>m[i]; j=0; for(c='a';c<='z';c++)for(i=0;i<l;i++)if(m[i]==c)n[j++]=c;for(i=0;i<j;i++)cout<<n[i]; cout<<endl; getchar();getchar();} Вводим строку букв целиком или буквы по отдельности, заканчивая нажатием (-ями) клавиши Enter. Выведутся входившие в состав строки строчные латинские буквы в алфавитном порядке - каждая столько раз, сколько ее вводили. P.S. В последней программе при проверке советую временно поменять значение константы l с 200 на 10 - вводить при испытании программы двести букв портит характер :rolleyes: Изменено 2 июля, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 3 июля, 2008 Автор Жалоба Поделиться Опубликовано 3 июля, 2008 Спасибо огромное! с транспонированной матрицей я сама как-то разобралась. А вот с текстом вообще ничего не могла придумать! Профи ты иль не профи, но все равно спасибо большое! Только один маленький вопросик для чего "using namespace std", я такое не учила? :cool: Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 3 июля, 2008 Жалоба Поделиться Опубликовано 3 июля, 2008 Некоторые варианты C++ требуют такой строчки, некоторые нет. Можешь попробовать ее исключить - если будет работать без нее, она для данного варианта C++ необязательна. Вообще это было введено, чтобы можно было использовать готовые куски программы от нескольких разработчиков, которые использовали одинаковые имена для разных переменных. Тогда при включении этих кусков в программу можно с помощью команды using namespace ... указать, что в этой части программы используются свои имена, на случай конфликта с такими же именами в других частях программы. Некоторые компиляторы считают, что если namespace (пространство имен) не указано, используется одно и то же стандартное пространство имен, для других надо всегда указывать, что используется основное пространство имен, эту роль и выполняет эта строка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 3 июля, 2008 Автор Жалоба Поделиться Опубликовано 3 июля, 2008 Спасибо :cool: Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 3 июля, 2008 Автор Жалоба Поделиться Опубликовано 3 июля, 2008 Можешь еще подсказать? Если в задачи с простыми числами n неограниченное, то какое должно быть условие для нахождение простых чисел! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 3 июля, 2008 Жалоба Поделиться Опубликовано 3 июля, 2008 (изменено) Если n неограниченное - надо создавать программу, оперирующую с числами c неограниченным числом цифр. Это задача уже другого класса сложности. Так что давай ограничимся для простоты, например, n<=32000 (целые обычной точности часто ограничиваются примерно 32000). #include <iostream.h>#include <stdio.h>using namespace std;main(){int i,k,j,n,m[10000];cout<<"n="; cin>>n; cout<<endl;k=0;for(j=2;j<n;j++){for(i=0;i<k;i++)if(j%m[i]==0)break;if(i==k)m[k++]=j;};for(i=0;i<k;i++){cout.width(8);cout<<m[i];}cout<<endl; getchar();getchar();} P.S. Вообще-то для n<=32000 хватает и размера массива для простых чисел на 4000 чисел, это легко оценить по формуле для приближенного количества простых чисел, не превышающих n: n/(ln(n)-2), в случае дробного числа округляем в большую сторону. Так что 10000 правильнее для некоторой экономии памяти заменить на 4000. Изменено 3 июля, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 4 июля, 2008 Автор Жалоба Поделиться Опубликовано 4 июля, 2008 Спасибо!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 4 июля, 2008 Автор Жалоба Поделиться Опубликовано 4 июля, 2008 k=0;for(j=2;j<n;j++){for(i=0;i<k;i++)if(j%m==0)break; а как у нас изменяется k, оно же не должно оставаться фиксированным к=0??? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 4 июля, 2008 Жалоба Поделиться Опубликовано 4 июля, 2008 Ммм... Было бы понятнее, если бы я перенес строку на другом месте. Вот эта часть программы без переноса строки: k=0;for(j=2;j<n;j++){for(i=0;i<k;i++)if(j%m==0)break; if(i==k)m[k++]=j;}; Так яснее видно, что k меняется в выражении k++ Вообще же идея работы программы (если понадобится объяснять) состоит в том, что для проверки простоты числа проверяется его делимость на все найденные до этого простые числа. Ссылка на комментарий Поделиться на другие сайты Поделиться
Valk@ Опубликовано 4 июля, 2008 Автор Жалоба Поделиться Опубликовано 4 июля, 2008 Могу ли я вместо фиксированного массива из 10000 элементов, сделать простой массив допустим из n элементов? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 4 июля, 2008 Жалоба Поделиться Опубликовано 4 июля, 2008 (изменено) Это уже будет "непростой" массив, точнее, динамический, то есть с задаваемым во время выполнения программы размером. Прямо указать вместо 10000 имя n нельзя, потому что для простых массивов память распределяется еще перед началом выполнения программы, а значение n в это время еще неизвестно. А эта же программа с динамическим массивом, для которого память выделяться будет уже во время работы программы, когда станет известно n, будет выглядеть так: #include <iostream.h>#include <stdio.h>using namespace std;main(){int i,k,j,n,*m;cout<<"n="; cin>>n; cout<<endl;m=new int[n];k=0;for(j=2;j<n;j++){for(i=0;i<k;i++)if(j%m[i]==0)break;if(i==k)m[k++]=j;};for(i=0;i<k;i++){cout.width(8);cout<<m[i];}delete[]m; cout<<endl; getchar();getchar();} P.S. Длину для массива простых чисел неэкономно брать равной n, их намного меньше. Для n=32000 хватило бы, например, 4000. Поэтому экономнее брать длину массива по приведенной раньше формуле (с небольшим запасом). Тогда надо заменить в программе строку m=new int[n]; на k=n/(log(n)-2)+10; m=new int[k]; а в начало программы вставить еще строку #include <math.h> , чтобы можно было использовать функцию логарифма. Изменено 4 июля, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти