2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Помагите решить задачку по програмированию
Сообщение11.07.2006, 13:54 


15/04/06
19
Мне нужно решыть задачу а точнее написать програму, это задание с практики в юнивере, но есть небольшая проблемма, Я ВООБЩЕ НЕЗНАЮ Борлан С: мож кто напишет прогу,а пожалуйста.

Данные целые числа p,q,a1..., a67(p>q тут значек > или равно пставлю так >= 0) В
последовательности а1...,а67 заменить нулями члены,модуль которых при делении на p дает в остатке q.


Вот и вся задачка, токо как ее решить я без понятия :(

 Профиль  
                  
 
 
Сообщение11.07.2006, 14:05 
Экс-модератор
Аватара пользователя


23/12/05
12049
А давайте для начала без привязки к конкретному языку программирования (не знаете Borland C - и Бог с ним), прорисуем алгоритм.

Я Вам даже намекну. В MatLAB это пишется в одну строку
Код:
a.*(mod(abs(a),p)~=q)

где a - массив [a1,a2....a67].

Осталось расшифровать, что я тут сделал :wink:

 Профиль  
                  
 
 
Сообщение11.07.2006, 23:19 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Хм, из поста про MatLab я ничего не понял, думаю, и автор темы --- тоже. Хотя как задачку решать - мне ясно. Давайте попробуем спросить - а Вы вообще хоть какой-нить язык программирования знаете? Ну паскаль, бейсик... или тот же C?

Потому что в решении такой задачи (да и многих других задач!)есть два этапа: 1. построить алгоритм, плюя на язык, 2. закодировать алгоритм на данном языке.

Если трудности в шаге 1, то вот набросок. Пусть числа a[i] (i = 1..67) организованы в массив (что бы это ни значило). Для каждого элемента массива (т.е. для каждого a[i]) нужно выполнить простую операцию: узнать его остаток при делении на p и сравнить его с q, в последнем случае положить a[i] <--- 0.

Если непонятки именно с шагом 2, то напишите прогу на любом другом известном Вам языке. Потом переведём на Borland C.

 Профиль  
                  
 
 
Сообщение12.07.2006, 11:16 
Экс-модератор
Аватара пользователя


23/12/05
12049
DMVN писал(а):
Хм, из поста про MatLab я ничего не понял, думаю, и автор темы --- тоже.

Поясню:
У нас есть одномерный (хотя в моем примере это несущественно) массив a - неважно каким образом он задан.
Например зададим
Код:
a=[1 -2 3 -4 5 -6...]

Тогда
Код:
abs(a)
создает массив модулей элементов исходного массива.
Получим $[\text{1 2 3 4 5 6...}]$
Код:
mod(...,p)
создает массив остататков от деления полученных модулей на $p$. Например, для $p=3$ мы получим
$[\text{1 2 0 1 2 0...}]$
наконец $...\thicksim =q$ - не равно, возвращает массив, в котором для всех элементов предыдущего нашего массива будут единицы, если эти элементы не равны $q$ и нули - если равны.
Например, при $q=2$ получим: $[\text{1 0 1 1 0 1...}]$
и последнее $.*$ - поэлементное умножение исходного массива $a=[\text{1 -2 3 -4 5 -6...}]$ и массива с нулями и единицами: умножение на единицу, не изменяет элемент, а умножение на ноль дает ноль - как раз то, что нам нужно: $[\text{1 0 3 -4 0 -6...}]$

Собственно, алгоритм написан (правда, для С он будет не оптимален, но...)

 Профиль  
                  
 
 
Сообщение13.07.2006, 00:21 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Да, забавная вещь MatLAB :) Но, думаю, проблемы у человека всё же именно с кодировкой --- алгоритм-то предельно прост - ну на уровне здравого смысла всё ясно... Из наших постов уже заведомо ясно, КАК нужно делать (почти в терминах C/C++), но автор пока не торопится спрашивать дальше. Неужели ждёт готовых решений?

 Профиль  
                  
 
 
Сообщение13.07.2006, 08:23 


15/04/06
19
DMVN писал(а):
Да, забавная вещь MatLAB :) . Неужели ждёт готовых решений?

Ребят ну правда вообще не шарю, :( что говорить если мля сам учитель не шарит, а будет просто смотреть в методичке правильно ли я написал, если кому не сложно напишите пожалуйста програму.

Вроде язык програмирования не важен можно или в паскаль или в с++ или в еще каком :).

Если не принесу эту задачку не переведут на 3 курс :(... Что я делаю на факультете програмирования?... неспрашивайте я уж и сам не знаю =), хочу скорее закончить юнивер и пойти переквалифицироваться на економиста так как понял что всетаки програмирование это не моё. А щас уже нельзя перевестись на економику ток на 1 курсе можно было.

Если уж несложно напишите поностью задачку :). Заранеее всем огромное спасибо.

 Профиль  
                  
 
 
Сообщение13.07.2006, 09:10 
Основатель
Аватара пользователя


11/05/05
4312
Киса, ты с какова горада? (с)
Это где на 2 курсе факультета программирования дают такие задачи, причем препод проверяет их правильность по методичке???

 Профиль  
                  
 
 
Сообщение13.07.2006, 12:56 


15/04/06
19
Украина =), у мееня просто принимает задачу не учитель а отвественій за практику, а он нефига нешарит. Мож всетаки ктото напишет програму 8-)

 Профиль  
                  
 
 
Сообщение13.07.2006, 13:38 
Экс-модератор
Аватара пользователя


23/12/05
12049
vanhalsing писал(а):
Украина

... Это не в нашем вузе точно. :evil:

 Профиль  
                  
 
 
Сообщение13.07.2006, 15:03 


13/07/06
68
вот решение на лиспе, раз уж язык неважен:
Код:
(defparameter p 3)
(defparameter q 1)
(defparameter seq '(0 1 2 3 4 5 6 7 8 9 10 11 12))

(format t "~S~%" (mapcar (lambda (x) (if (eq q (mod x p)) 0 x)) seq))

Введи свои значения в p, q, seq.

Учи лисп, он прост и в жизни пригодится.

 Профиль  
                  
 
 
Сообщение14.07.2006, 12:20 


15/04/06
19
Спасибо :).

П.С. У нас в юнивере Лиспу не преподают ))

 Профиль  
                  
 
 
Сообщение14.07.2006, 12:39 
Основатель
Аватара пользователя


11/05/05
4312
А что у вас преподают?

 Профиль  
                  
 
 ну вот Вам на кошерном C
Сообщение14.07.2006, 16:28 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Код:
#include <stdio.h>
#include <stdlib.h>
#define MAX 67

int main()
{
  int seq[MAX]; // массив с нашей последовательностью seq[0]..seq[66] (с нуля, а не с 1!)
  int p,q;         // типа, объявляем переменные
  printf("Enter p: ");
  scanf("%d", &p);  // вводим их...
  printf("Enter q: ");
  scanf("%d", &q);  // ...с клавиатуры
  printf("Filling sequence with random numbers...\n");
  for (int i = 0; i < MAX; i++) seq[i] = rand() % 100 - 50; // заполняем случайными числами
  printf("Initial sequence:\n");
  for (int i = 0; i < MAX; i++) printf("%d ", seq[i]);
  printf("\n");
  for (int i = 0; i < MAX; i++)
  {
    if (abs(seq[i]) % p == q)
      seq[i] = 0;
  }
  printf("Processed sequence:\n");
  for (int i = 0; i < MAX; i++) printf("%d ", seq[i]);
  printf("\n");
  return 0;
}

 Профиль  
                  
 
 Re: ну вот Вам на кошерном C
Сообщение14.07.2006, 17:00 


14/07/06
1
Moscow
ИМХО, зря ты ему написАл. Через полгода прибежит опять, и опять чего-нибудь выпросит. Так никогда ничему не научиться

 Профиль  
                  
 
 Re: ну вот Вам на кошерном C
Сообщение15.07.2006, 12:50 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
eXire писал(а):
ИМХО, зря ты ему написАл. Через полгода прибежит опять, и опять чего-нибудь выпросит. Так никогда ничему не научиться

Вопрос о корректности моих действий уже был оговорен в ЛС с г-ном модератором раздела. Если бы был энтузиазм у автора темы, мои действия были бы иными. Предлагаю вопрос о том, стОит ли отвечать на подобные просьбы, в ДАННОМ разделе НЕ вести.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: mihaild


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group