Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Лёгкая задача на одномерный массив

Автор: Олежечег(быв. Олежик) 3.12.2007 0:35

1. Ввести целое число N. Выделить из этого числа цифры, кратные 3, и записать их в одномерный массив.

Вот задача.
Как я помню ПАСКАЛЬ..
вот вроде реализация.


А на си..пока незнаю
помогите.

A - МАССИВ ;
chislo - это string!!!!

Код
begin
read(chislo);
i:=1;  
j:=1;      
  repeat  
      begin;  
         if ord(chislo[i])>=48 and ord(chislo[i])<=57 then     ('Tipa proverka na ot 0 do 9')
            begin
    if ( ord(chislo[i]) mod 3 )= 0 then    (Proverka vrode na nulevoy ostatok)
         begin
               a[j]:=chislo[i];        
                J :=j+1;
        end;
            end;
         i:=i+1;
   until i=length(chislo) or (ord(chislo[i])<=48 or ord(chislo[i])>=57;


+ концовка


вроде алгоритм очень простой.
конечно я его сдела более замухрированным))
Объясните...
как на С++ писать такую задачу..
и ещё вопрос....
В паскале перед концом можно поставить "readln;" и программа не пройдёт сразу, а будет ждать твоего нажатия клавиши.
объясните...что можно поставить в самом конце., чтобы программа, не выполнила действие сразу и не не исчесла, а дождалась хотя бы нажатия любой клавиши!


Очень помощь нужна.
пожалуйста(((

Автор: мисс_граффити 3.12.2007 1:15

ну... как вариант.
проверяла в билдере (то есть можешь считать, что не проверяла никак smile.gif )

int main(int argc, char* argv[])
{
int a, i=-1, ar[5];
cout<<"Pls, input the number"<<endl;
cin>>a;
while (a!=0){
if ((a%10)%3==0) {
i++;
ar[i]=a%10;
}
a/=10;
}
for (int j=0; j<=i; j++)
cout<<ar[j];
getch();
return 0;
}


моменты, которые оставила на твое усмотрение:
1) как задавать размерность массива (как ты это делал в паскале - я не видела)
2) порядок сохранения в массиве - обратный (то есть для числа 319 там будет 93)
выводи, как тебе удобнее - хоть в прямом, хоть в обратном порядке
3) строки не использовала, контроля на корректность ввода нет.

Автор: volvo 3.12.2007 2:04

Вообще-то вопрос поднимался буквально пару дней назад:
http://forum.pascal.net.ru/index.php?showtopic=20332

Автор: Олежечег(быв. Олежик) 3.12.2007 2:26

Спасибо!


А не подскажете, как остановить программу, потому что даже с return 0 она после нажатия enter ? она сразу закрывается!
Может надо что то в программе поменять?
У меня DEV-C++

Автор: мисс_граффити 3.12.2007 2:47

А что, ей должно быть все равно - нажимаешь ты что-то или нет? Она должна висеть вечно?
В паскале если пишешь readln; а потом нажимаешь enter - тоже закрывается.
а return тут вообще не при чем.

Автор: Олежечег(быв. Олежик) 3.12.2007 2:49

Я в плане того....
Что я нажимаю ENTER, на микро доли секунды появляется ответ......и всё!!!
А Я хочу на него посмотреть)))

Автор: мисс_граффити 3.12.2007 3:30

добавь еще getch();

Автор: Олежечег(быв. Олежик) 3.12.2007 4:15

дело в том, что он выдаёт мне ошибку на том месте...
я решил использовать....
system("pause");
...
вроде нормально работает.
теперь вопрос в другом....



#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
int a, i=-1, ar[5];
cout<<"Pls input the number"<<endl;
cin>>a;
while (a!=0){
if ((a%10)%3==0) {
i++;
ar[i]=a%10;
}
a/=10;
}
for (int j=0; j<=i; j++)
cout<<ar[j];

system("pause");
return 0;
}


если вводить менее 10 цифр..все нормально..
если вводить больше, выскакивает проблема.
он пишет 693.
как быть?

Автор: volvo 3.12.2007 4:29

Цитата
если вводить больше, выскакивает проблема.
Ну, так не помещаются больше 10 цифр в int, отсюда и проблема... Верхняя граница типа int = INT_MAX, а это 2147483647... Нужно больше - надо переходить к более емкому типу...